1 #include <iostream>
2 #define STACKSIZE 50/*设栈中元素个数为50个*/
3 using namespace std;
4
5 struct SeqStack
6 {
7 int elem[STACKSIZE];
8 int top;
9 };
10
11 /*构造一个空栈*/
12 void InitStack(SeqStack *S)
13 {
14 S->top=-1;
15 }
16
17 /*将x置入S栈新栈顶*/
18 bool Push(SeqStack *S,int x)
19 {
20 if(S->top==STACKSIZE-1)
21 return false;
22 S->top++;
23 S->elem[S->top]=x;
24 return true;
25 }
26
27 /*将S栈顶元素弹出,放到x所指的存储空间中带出*/
28 bool Pop(SeqStack * S,int &x)
29 {
30 if(S->top==-1)
31 return false;
32 x = S->elem[S->top];
33 S->top--;
34 return true;
35 }
36
37 /*将栈S栈顶元素读出,放到x所指的存储空间中,栈顶指针保持不变*/
38 bool GetTop(SeqStack * S, int &x)
39 {
40 if(S->top==-1)
41 return false;
42 x = S->elem[S->top];
43 return true;
44 }
45
46 /*将栈清空*/
47 void ClearStack(SeqStack * S)
48 {
49 S->top=-1;
50 }
51
52 /*判断栈S是否为空*/
53 bool IsEmpty(SeqStack * S)
54 {
55 if(S->top==-1)
56 return true;
57 return false;
58 }
59
60 /*判断栈S是否已满*/
61 bool IsFull(SeqStack * S)
62 {
63 if(S->top==STACKSIZE-1)
64 return true;
65 return
66 false;
67 }
68
69 /*打印栈S所有元素*/
70 void PrintStack(SeqStack S)
71 {
72 for(int i=0;i<=S.top;i++)
73 cout << S.elem[i] << " ";
74 cout << endl;
75 }
76
77 int main(){
78 SeqStack s;
79 InitStack(&s);
80
81 for(int i=0;i<60;i++)
82 Push(&s,i);
83
84 cout << IsFull(&s) << endl;
85
86 PrintStack(s);
87
88 int x=0;
89
90 Pop(&s,x);
91 cout << "x= " << x << endl;
92 PrintStack(s);
93 Pop(&s,x);
94 cout << "x= " << x << endl;
95 PrintStack(s);
96 Pop(&s,x);
97 cout << "x= " << x << endl;
98 PrintStack(s);
99 Pop(&s,x);
100 cout << "x= " << x << endl;
101 PrintStack(s);
102
103 GetTop(&s,x);
104 cout << "x= " << x << endl;
105 PrintStack(s);
106
107 ClearStack(&s);
108 PrintStack(s);
109 cout << IsEmpty(&s) << endl;
110 return 0;
111 }