栈的相关操作

  学习栈的时候自己写了个代码,革新就是加上了动态输出栈内容,可以直观的观察了解栈内情况,对初学栈的同学应该有一定帮助。

  

//库函数头文件包含
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//函数状态码定义
#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE -1
#define OVERFLOW   -2

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int  Status;
typedef int SElemType;

//栈的定义
typedef struct{
   SElemType *base;
   SElemType *top;
   int stacksize;
}SqStack;

//链表的创建
Status InitStack(SqStack &S){
   S.base = (SElemType*)malloc(sizeof(SElemType)*STACK_INIT_SIZE);
   if(!S.base) exit(OVERFLOW);
   S.top = S.base;
   S.stacksize = STACK_INIT_SIZE;
   return OK;
}

//栈顶的获取
Status GetTop(SqStack S, SElemType &e){
   if(S.top == S.base) return ERROR;
   e = *(S.top-1);
   return OK;
}

//入栈
Status Push(SqStack &S, SElemType e){
   if(S.top - S.base >= S.stacksize){
       S.base = (SElemType*)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType));
       if(!S.base) exit(OVERFLOW);
       S.top = S.base+S.stacksize;
       S.stacksize += STACKINCREMENT;
   }
   *S.top++ =e;
   return OK;
}

//出栈
Status Pop(SqStack &S, SElemType &e){
   if(S.top == S.base) return ERROR;
   e = *--S.top;
   return OK;

}

//输出栈,动态显示栈内情况
Status PrintStack(SqStack S){
    SElemType *p;
    p = S.top-1;
    printf("--   --\n");
   while(p >= S.base){
       printf("|++%d++|\n", *p);
       printf("|-----|\n");
       p--;
   }
   return OK;
}

int main(){
    printf("欢迎使用\n输入操作栈的序列个数以及序列内容\n");
   SqStack S;
   int n;
   scanf("%d", &n);
   InitStack(S);
   for(int i = 0; i < n; i++){
       SElemType x;
       scanf("%d", &x);
       Push(S, x);
   }
   int t;
   printf("输入1:输出栈,动态显示栈内情况\n输入2:出栈,并输出出栈数\n输入3:入栈\n输入4:输出栈顶\n");
   while(scanf("%d", &t)!=EOF){
       if(t == 1)//输出栈
        PrintStack(S);
       else if(t == 2){
           SElemType e;
           Pop(S, e);//出栈,并输出出栈数
           printf("%d\n", e);
       }
       else if(t == 3){
           SElemType e;
           printf("请输入入栈内容\n");
           scanf("%d", &e);
           Push(S, e);
       }
       else if(t == 4){
           SElemType e;
           GetTop(S, e);
           printf("%d\n", e);
       }
   }
}


猜你喜欢

转载自blog.csdn.net/hackq_sxj/article/details/78608809