1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4
5 typedef int ElemType;
6 #define OK 1
7 #define ERROR 0
8 typedef int Status;
9 #define MAXSIZE 100
10
11 typedef struct
12 {
13 ElemType data[MAXSIZE];
14 int top;
15 }SqStack;
16
17 Status InitStack(SqStack *S)
18 {
19 S->top = -1;
20 return OK;
21 }
22 Status DestroyStack(SqStack *S)
23 {
24 S->top = -1;
25 return OK;
26 }
27 Status ClearStack(SqStack *S)
28 {
29 S->top = -1;
30 return OK;
31 }
32 Status StackEmpty(SqStack S)
33 {
34 if (S.top < 0)
35 return OK;
36 return ERROR;
37 }
38 Status GetTop(SqStack S,ElemType *e)
39 {
40 if (S.top < 0)
41 return ERROR;
42 *e = S.data[S.top];
43 return OK;
44 }
45 Status Push(SqStack *S,ElemType e)
46 {
47 if (S->top > MAXSIZE - 2)
48 return ERROR;
49 S->data[++S->top] = e;
50 return OK;
51 }
52 Status Pop(SqStack *S,ElemType *e)
53 {
54 if (S->top < 0)
55 return ERROR;
56 *e = S->data[S->top--];
57 return OK;
58 }
59 int StackLength(SqStack S)
60 {
61 return S.top + 1;
62 }
63 void visit(ElemType n)
64 {
65 printf("%d ", n);
66 }
67
68 void ListTraverse(SqStack S)
69 {
70 int i;
71 for (i = 0; i <= S.top; i++)
72 visit(S.data[i]);
73 }
74 int main()
75 {
76 SqStack L;
77 Status i, j;
78 char opp = '-1';
79 ElemType e;
80 int pos = 1;
81 int k = 0;
82
83 i = InitStack(&L);
84 printf("栈L初始化完毕,StackLength(L)=%d\n\n", StackLength(L));
85
86 printf("\n1.遍历操作 \n2.插入操作 \n3.删除操作 \n4.获取栈顶数据\n5.清空栈 \n6.栈是否为空 \n7.销毁栈 \n0.退出 \n请选择你的操作:\n");
87
88 while (opp != '0') {
89 scanf_s("%c", &opp);
90 switch (opp) {
91 case '1':
92 ListTraverse(L);
93 printf("\n");
94 break;
95
96 case '2':
97 srand((unsigned)time(NULL));
98 for (j = 1; j <= 10; j++)
99 {
100 i =Push(&L, rand() % 100);
101 }
102 printf("在栈中依次插入10个随机数后:");
103 ListTraverse(L);
104 printf("\n");
105 printf("创建完毕,StackLength(L)=%d\n\n", StackLength(L));
106 break;
107 case '3':
108 e = -1;
109 Pop(&L, &e);
110 printf("弹出栈顶元素%d,现在链表为:\n", e);
111 ListTraverse(L);
112 printf("\n");
113 break;
114 case '4':
115 GetTop(L, &e);
116 printf("栈顶元素的值为:%d\n",e);
117 printf("\n");
118 break;
119 case '5':
120 i=ClearStack(&L);
121 printf("清空栈:%d\n",i);
122 ListTraverse(L);
123 printf("\n");
124 break;
125
126 case '6':
127 i=StackEmpty(L);
128 printf("栈是否为空?:%d\n",i);
129 printf("\n");
130 break;
131
132 case '7':
133 i = DestroyStack(&L);
134 printf("\n销毁栈:ListLength(L)=%d\n", StackLength(L));
135 ListTraverse(L);
136 printf("\n");
137 break;
138
139 case '0':
140 exit(0);
141 }
142 }
143 }