8、数据结构——栈与队列——顺序栈(二) 结构体定义12345#define MaxSize 10 // 定义栈元素的最大值typedef struct { ElemType data[MaxSize]; // 静态数组存放栈中元素 int top; // 栈顶指针}SqStack; 初始化12345678910111213// 方式一(与后面的对应着的)void InitStack(SqStack &S) { S.top = -1;}// 方式二(与后面的对应着的)void InitStack(SqStack &S) { S.top = 0;}void testStack() { SqStack S; InitStack(S);} 判栈空12345678910// 方式一(与后面的对应着的)bool Empty(SqStack &S) { return S.top == -1;}// 方式二(与后面的对应着的)bool Empty(SqStack &S) { return S.top == 0;} 进栈1234567891011121314151617181920// 方式一(与后面的对应着的)bool Push(SqStack &S, ElemType x) { if (S.top == MaxSize - 1) return false; // 判断是否栈满 S.top = S.top + 1; S.data[S.top] = x; // 上面两条语句可以合并为:x = S.data[++S.top]; return true;}// 方式二(与后面的对应着的)bool Push(SqStack &S, ElemType x) { if (S.top == MaxSize) return false; // 判断是否栈满 S.top = S.top + 1; S.data[S.top] = x; // 上面两条语句可以合并为:x = S.data[++S.top]; return true;} 方式一: 方式二: 出栈12345678bool Pop(SqStack &S, ElemType &x) { if (S.top == -1) return false; // 判断栈是否为空 x = S.data[S.top]; // x就是记录一下马上要弹出的栈顶元素 S.top = S.top - 1; // 栈底元素弹出S.top = S.top - 1 // 上面两条语句可以合并为:x = S.data[S.top--]; return true; // 出栈成功,而且仅仅是逻辑删除} 拓展: 共享栈(小小了解即可) 说白了就是两个栈放到内存中同一块连续空间中存储,一个栈从底往上添加元素,另一个从顶往下添加元素。 下一节内容是:9、栈与队列——链栈!!!一定要把本节内容看懂再往下看,不然会非常痛苦的哦o(╥﹏╥)oo(╥﹏╥)oo(╥﹏╥)o…….. 9、数据结构——栈与队列——链栈(三) 上一篇 7、数据结构——栈与队列——栈(一) 下一篇 Please enable JavaScript to view the comments