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 }