#define MAXSIZE 100 typedef struct{ SElemType *base; //栈底指针 SElemType *top; //栈顶指针 int stacksize; //栈可用最大容量 }SqStack;
以上为顺序栈的表示,定义了个结构类型,SqStack
顺序栈的表示:
注意上图左侧部分的最后一行,看似是两个指针相减,实际得到的是两个元素之间相差多少元素。
同时!!!!!相同数组才可以这么做,不是同一个数组,绝对不能这样做!!!!!!!
-----------------------------------------------------------------------------------------------------------------
顺序栈的初始化
① 开辟出来一个固定大小的空间,用 stacksize 表示其大小
② 让 top 和 base 指针指向下标为0的地方
#define MAXSIZE 100 typedef struct{ SElemType *base; //栈底指针 SElemType *top; //栈顶指针 int stacksize; //栈可用最大容量 }SqStack; Status InitStack(SqStack &S){ //构造一个空栈 // new 一个类型,元素个数为MAXSIZE // 如果类型后面跟了大小,则就是这种类型的一个数组 S.base = new SElemType[MAXSIZE]; // 如果用C语言的话,则用下面这行,用动态分配函数分配出,然后把它转换成 // SElemType 类型的指针,把它赋值给 base S.base = (SElemType*)malloc(MAXSIZE*sizeof(SElemType)); // 接着判断一下是否分配成功,分配成功的话,S.base就有一个地址,否则为空 // 如果是非0的就分配成功了。 if (!S.base) exit (OVERFLOW); // 存储分配失败 // 栈顶指针 等于 栈底指针 S.top = S.base; // 设定栈的大小限制 S.stacksize = MAXSIZE; return OK; }