
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef char DataType;
5
6
7 #define StackSize 100
8
9 //栈的定义
10 typedef struct
11 {
12 DataType stack[StackSize];
13 int top;//指示栈顶指针
14 }SqStack;
15
16 //初始化栈为空栈
17 void InitStack(SqStack &s)
18 {
19 s.top = -1;//设置栈顶指针为-1
20 }
21
22 //判断栈顶为空
23 bool StackEmpty(SqStack s)
24 {
25 if (s.top == -1)
26 return true;
27 else
28 return false;
29 }
30
31 //读取栈顶元素
32 bool GetTop(SqStack s, DataType &e)
33 {
34 if (s.top == -1)
35 {
36 return false;//空栈,无法继续操作
37 }
38 else
39 {
40 e = s.stack[s.top];//读取到栈顶元素
41 return true;
42 }
43
44 }
45 //进栈操作
46 bool PushStack(SqStack &s, DataType e)
47 {
48 //先判断元素是否已经满了
49 if (s.top >= StackSize - 1)
50 {
51 return false;
52 }
53 else
54 {
55 s.top += 1;//栈顶指针增加1
56 s.stack[s.top] = e;//新元素e进栈
57 return true;
58 }
59 }
60 //出栈操作--将栈顶元素出栈,并将值赋值给e
61 bool PopStack(SqStack &s, DataType &e)
62 {
63 if (s.top == -1)
64 {
65 return false;//空栈
66 }
67 else
68 {
69 e = s.stack[s.top];//将元素赋值给e
70 s.top -= 1;//栈顶指针减少1
71 return true;
72 }
73 }
74 //求栈的长度
75 int StackLength(SqStack s)
76 {
77 return s.top + 1;
78 }
79 //清空栈
80 void ClearStack(SqStack s)
81 {
82 s.top = -1;//函数运行结束后系统会自动回收内存
83 }
84
85
86 int main()
87 {
88 SqStack s;
89 DataType a[] = { 'a','b','c','d','e' };
90 DataType e;
91
92 //初始化栈
93 InitStack(s);
94
95 //进栈操作
96 for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
97 {
98 if (PushStack(s, a[i]) == false)
99 {
100 //栈满无法进栈
101 return false;
102 }
103 }
104
105 //出栈操作
106 printf("出栈的元素是:");
107 if (PopStack(s, e) == true)
108 {
109 printf("%4c", e);
110 }
111 if (PopStack(s, e) == true)
112 {
113 printf("%4c\n", e);
114 }
115 printf("当前栈顶元素是:");
116 if (GetTop(s, e) == true)
117 {
118 printf("%4c\n", e);
119 }
120
121 if (PushStack(s, 'f') == false)
122 {
123 //栈已满
124 return false;
125 }
126 if (PushStack(s, 'g') == false)
127 {
128 //栈已满
129 return false;
130 }
131
132 /*
133 由于用s.top = -1来判断是否为空以及初始化,所以计算长度时要多加一个1
134 */
135 printf("当前栈中的元素个数:%d\n", StackLength(s));
136
137 printf("元素出栈的序列是:");
138 while (!StackEmpty(s))
139 {
140 PopStack(s, e);
141 printf("%4c ", e);
142 }
143 printf("\n");
144
145
146 getchar();
147 return 0;
148 }