1 #include<iostream>
2 #include<cstdlib>
3 #include<cstdio>
4 #define Max 50
5 #define OK 1
6 using namespace std;
7 typedef int ElemType;
8 typedef struct Stack //顺序栈的定义
9 {
10 ElemType *elem;
11 int top;
12 int capactiy;
13 }TStack,TNode;
14
15 int StackInit(TStack &s)//顺序栈的初始化
16 {
17 s.elem =(ElemType*)malloc(sizeof(ElemType) * Max);
18 if (!s.elem)
19 exit(-1);
20 s.top = 0;
21 s.capactiy = Max;
22 return 0;
23 }
24
25 void StackDestory(TStack& s)//销毁栈
26 {
27 if (!s.elem)
28 return;
29 free(s.elem);
30 s.elem = nullptr;
31 s.capactiy = 0;
32 s.top = 0;
33 }
34
35 void StackClear(TStack& s)//清空栈
36 {
37 s.top = 0;
38 }
39
40 bool StackEmpty(TStack* s)//顺序栈是否为空
41 {
42 return s->top == 0;
43 }
44
45
46 bool StackPush(TStack* s, ElemType e)//顺序栈入栈
47 {
48 s->elem[s->top++] = e;
49 return true;
50 }
51
52 bool StackPop(TStack* s)///顺序栈出栈
53 {
54 if (StackEmpty(s)||s->top == 0)
55 {
56 return false;
57 }
58 else
59 {
60 --s->top;
61 return true;
62 }
63 }
64
65 ElemType StackTop(TStack s)//顺序栈栈顶元素查询
66 {
67 return s.elem[--s.top];
68 }
69
70 void StackShow(TStack s)//顺序栈的遍历
71 {
72 for (int i = 0; i < s.top; ++i)
73 {
74 cout << s.elem[i] << " ";
75 }
76 }
77
78 int main() {
79 TStack s ;
80 StackInit(s);
81 StackPush(&s, 2);
82 StackPush(&s, 3);
83 StackPush(&s, 4);
84 StackPush(&s, 5);
85 StackShow(s);
86 cout << endl;
87 cout << StackTop(s) << endl;
88 StackPop(&s);
89 StackShow(s);
90 cout << endl;
91 cout << StackEmpty(&s) << endl;
92 StackClear(s);
93 cout << StackEmpty(&s) << endl;
94 StackDestory(s);
95 return 0;
96
97 }