1. #include "stdio.h"
    2. #include "stdlib.h"
    3. #include "io.h"
    4. #include "math.h"
    5. #include "time.h"
    6. #define OK 1
    7. #define ERROR 0
    8. #define TRUE 1
    9. #define FALSE 0
    10. #define MAXSIZE 20 /* 存储空间初始分配量 */
    11. typedef int Status;
    12. typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */
    13. /* 顺序栈结构 */
    14. typedef struct
    15. {
    16. SElemType data[MAXSIZE];
    17. int top; /* 用于栈顶指针 */
    18. }SqStack;
    19. Status visit(SElemType c)
    20. {
    21. printf("%d ",c);
    22. return OK;
    23. }
    24. /* 构造一个空栈S */
    25. Status InitStack(SqStack *S)
    26. {
    27. /* S.data=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); */
    28. S->top=-1;
    29. return OK;
    30. }
    31. /* 把S置为空栈 */
    32. Status ClearStack(SqStack *S)
    33. {
    34. S->top=-1;
    35. return OK;
    36. }
    37. /* 若栈S为空栈,则返回TRUE,否则返回FALSE */
    38. Status StackEmpty(SqStack S)
    39. {
    40. if (S.top==-1)
    41. return TRUE;
    42. else
    43. return FALSE;
    44. }
    45. /* 返回S的元素个数,即栈的长度 */
    46. int StackLength(SqStack S)
    47. {
    48. return S.top+1;
    49. }
    50. /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */
    51. Status GetTop(SqStack S,SElemType *e)
    52. {
    53. if (S.top==-1)
    54. return ERROR;
    55. else
    56. *e=S.data[S.top];
    57. return OK;
    58. }
    59. /* 插入元素e为新的栈顶元素 */
    60. Status Push(SqStack *S,SElemType e)
    61. {
    62. if(S->top == MAXSIZE -1) /* 栈满 */
    63. {
    64. return ERROR;
    65. }
    66. S->top++; /* 栈顶指针增加一 */
    67. S->data[S->top]=e; /* 将新插入元素赋值给栈顶空间 */
    68. return OK;
    69. }
    70. /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
    71. Status Pop(SqStack *S,SElemType *e)
    72. {
    73. if(S->top==-1)
    74. return ERROR;
    75. *e=S->data[S->top]; /* 将要删除的栈顶元素赋值给e */
    76. S->top--; /* 栈顶指针减一 */
    77. return OK;
    78. }
    79. /* 从栈底到栈顶依次对栈中每个元素显示 */
    80. Status StackTraverse(SqStack S)
    81. {
    82. int i;
    83. i=0;
    84. while(i<=S.top)
    85. {
    86. visit(S.data[i++]);
    87. }
    88. printf("\n");
    89. return OK;
    90. }
    91. int main()
    92. {
    93. int j;
    94. SqStack s;
    95. int e;
    96. if(InitStack(&s)==OK)
    97. for(j=1;j<=10;j++)
    98. Push(&s,j);
    99. printf("栈中元素依次为:");
    100. StackTraverse(s);
    101. Pop(&s,&e);
    102. printf("弹出的栈顶元素 e=%d\n",e);
    103. printf("栈空否:%d(1:空 0:否)\n",StackEmpty(s));
    104. GetTop(s,&e);
    105. printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(s));
    106. ClearStack(&s);
    107. printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s));
    108. return 0;
    109. }