顺序栈的基本运算

栈的定义

  1. #include <stdio.h>
  2. typedef char ElemType;
  3. #define StackSize 100 /*顺序栈的初始分配空间*/
  4. typedef struct
  5. {
  6. ElemType data[StackSize]; /*保存栈中元素*/
  7. int top; /*栈指针*/
  8. } SqStack;

初始化栈

  1. void InitStack(SqStack &st) /*st为引用型参数*/
  2. {
  3. st.top=-1;
  4. }

进栈运算

  1. int Push(SqStack &st,ElemType x) /*进栈运算,st为引用型参数*/
  2. {
  3. if (st.top==StackSize-1) /*栈满*/
  4. return 0;
  5. else /*栈不满*/
  6. {
  7. st.top++;
  8. st.data[st.top]=x;
  9. return 1;
  10. }
  11. }

出栈运算

  1. int Pop(SqStack &st,ElemType &x) /*出栈运算,st和x为引用型参数*/
  2. {
  3. if (st.top==-1) /*栈空*/
  4. return 0;
  5. else /*栈不空*/
  6. {
  7. x=st.data[st.top];
  8. st.top--;
  9. return 1;
  10. }
  11. }

取栈顶元素

  1. int GetTop(SqStack st,ElemType &x) /*取栈顶元素,x为引用型参数*/
  2. {
  3. if (st.top==-1) /*栈空*/
  4. return 0;
  5. else
  6. {
  7. x=st.data[st.top];
  8. return 1;
  9. }
  10. }

判断栈空运算

  1. int StackEmpty(SqStack st) /*判断栈空运算*/
  2. {
  3. if (st.top==-1) /*栈空*/
  4. return 1;
  5. else /*栈不空*/
  6. return 0;
  7. }

main

  1. void main()
  2. {
  3. SqStack st;
  4. ElemType e;
  5. InitStack(st);
  6. printf("栈%s\n",(StackEmpty(st)==1?"空":"不空"));
  7. printf("a进栈\n");Push(st,'a');
  8. printf("b进栈\n");Push(st,'b');
  9. printf("c进栈\n");Push(st,'c');
  10. printf("d进栈\n");Push(st,'d');
  11. printf("栈%s\n",(StackEmpty(st)==1?"空":"不空"));
  12. GetTop(st,e);
  13. printf("栈顶元素:%c\n",e);
  14. printf("出栈次序:");
  15. while (!StackEmpty(st))
  16. {
  17. Pop(st,e);
  18. printf("%c ",e);
  19. }
  20. printf("\n");
  21. }