#include<stdio.h> #include<stdlib.h> #define MAX 20 typedef struct { int stack[MAX]; int top; }sqstack; void Initstack(sqstack *p) /*初始化*/ { if(!p) printf("error"); p->top=-1; } void Push(sqstack *p,int x) { if(p->top<MAX-1) { p->top=p->top+1; p->stack[p->top]=x; } else printf("overflow! "); } int Pop(sqstack *p) { int x; if(p->top!=0) { x=p->stack[p->top]; printf("以前的栈顶元素%d已经被删除 ! ",x); p->top=p->top-1; return x; } else { printf("underflow! "); return 0; } } int Gettop(sqstack *p) { int x; if(p->top!=0) { x=p->stack[p->top]; return x; } else { printf("underflow "); return 0; } } void Outstack(sqstack *p) { int i; printf(" "); if(p->top<0) { printf("这是一个空栈 !"); printf(" "); } else for(i=p->top;i>=0;i--) printf("第 %d 个数据元素是: %d ",i,p->stack[i]); } void Setempty(sqstack *p) { p->top=-1; } void main() { sqstack *q; int y,cord; int a; do { printf(" "); printf("第一次使用必须初始化 ! "); printf(" "); printf(" 主菜单 "); printf(" 1 初始化顺序栈 "); printf(" 2 插入一个元素 "); printf(" 3 删除栈顶元素 "); printf(" 4 取栈顶元素 "); printf(" 5 置空顺序栈 "); printf(" 6 结束程序运行 "); printf(" ---------------------------------- "); printf("请输入您的选择 (1,2,3,4,5,6)"); scanf("%d",&cord); printf(" "); switch(cord) { case 1: { q=(sqstack *)malloc(sizeof(sqstack)); Initstack(q); Outstack(q); }break; case 2: { printf("请输入要插入的数据元素 :a="); scanf("%d",&a); Push(q,a); Outstack(q); }break; case 3: { Pop(q); Outstack(q); } break; case 4: { y=Gettop(q); printf(" 栈顶元素为 : %d",y); Outstack(q); }break; case 5: { Setempty(q); printf(" 顺序栈被置空! "); Outstack(q); }break; case 6: exit(0); } }while(cord<=6); }