• 顺序栈的基本运算
    • 栈的定义
    • 初始化栈
    • 进栈运算
    • 出栈运算
    • 取栈顶元素
    • 判断栈空运算
    • main

    顺序栈的基本运算

    栈的定义

    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. }