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 }