数据结构-顺序栈
#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!\n"); } int Pop(sqstack *p) { int x; if(p->top!=0) { x=p->stack[p->top]; printf("以前的栈顶元素%d已经被删除 !\n",x); p->top=p->top-1; return x; } else { printf("underflow!\n"); return 0; } } int Gettop(sqstack *p) { int x; if(p->top!=0) { x=p->stack[p->top]; return x; } else { printf("underflow\n"); return 0; } } void Outstack(sqstack *p) { int i; printf("\n"); if(p->top<0) { printf("这是一个空栈 !"); printf("\n"); } else for(i=p->top;i>=0;i--) printf("第 %d 个数据元素是: %d\n",i,p->stack[i]); } void Setempty(sqstack *p) { p->top=-1; } void main() { sqstack *q; int y,cord; int a; do { printf("\n"); printf("第一次使用必须初始化 !\n"); printf("\n"); printf("\n 主菜单 \n"); printf("\n 1 初始化顺序栈 \n"); printf("\n 2 插入一个元素 \n"); printf("\n 3 删除栈顶元素 \n"); printf("\n 4 取栈顶元素 \n"); printf("\n 5 置空顺序栈 \n"); printf("\n 6 结束程序运行 \n"); printf("\n----------------------------------\n"); printf("请输入您的选择 (1,2,3,4,5,6)"); scanf("%d",&cord); printf("\n"); 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("\n 栈顶元素为 : %d",y); Outstack(q); }break; case 5: { Setempty(q); printf("\n顺序栈被置空! \n"); Outstack(q); }break; case 6: exit(0); } }while(cord<=6); }