学习栈的时候自己写了个代码,革新就是加上了动态输出栈内容,可以直观的观察了解栈内情况,对初学栈的同学应该有一定帮助。
//库函数头文件包含 #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); } } }