1 #define MaxSize 100 2 3 //顺序栈的创建 4 typedef struct { 5 int *base;//栈底指针 6 int *top;//栈顶指针 7 int stacksize;//栈可用最大容量 8 }SqStack; 9 10 //栈的初始化 11 bool InitStack(SqStack &s) 12 { 13 s.base = new int[MaxSize]; 14 //s.base = (int*)malloc(StackMaxSize*sizeof(int)); 15 if (!s.base)//判断分配内存有没有成功 16 return false; 17 s.top = s.base; 18 s.stacksize = MaxSize; 19 return true; 20 } 21 22 //判栈空 23 bool StackEmpty(SqStack s) 24 { 25 if (s.base == s.top) 26 return true; 27 else 28 return false; 29 } 30 31 //求栈长 32 int StackLength(SqStack s) 33 { 34 return s.top - s.base; 35 } 36 37 //清空顺序栈 38 bool StackClear(SqStack &s) 39 { 40 if (s.base) 41 s.top = s.base;//直接将top下移下来就可 42 return true; 43 } 44 45 //销毁顺序栈 46 bool StackDestroy(SqStack &s) 47 { 48 if (s.base) { 49 delete s.base;//释放指针内存,和new配对,指针的对象没了 50 s.stacksize = 0;//将栈的个数设置为0 51 s.base = s.top = NULL;//避免野指针生成 52 } 53 return true; 54 } 55 56 //入栈操作---存放元素到栈顶 57 bool PushStack(SqStack &s, int e) 58 { 59 //栈底永远在下面呢---判断栈满了 60 if (s.top - s.base == s.stacksize) 61 return false; 62 63 *s.top = e;//元素e压入栈顶 64 s.top++;//栈指针+1 65 return true; 66 } 67 68 //出栈操作---将位于栈顶的元素弹出 69 bool PopStack(SqStack &s, int &e) 70 { 71 //判断指针下溢 72 if (s.base == s.top) 73 return false; 74 e = *s.top; 75 s.top--; 76 }