数据与结构-顺序栈
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 20 typedef int datetype; typedef struct { datetype date[MAXSIZE]; int top; }SeqStack; SeqStack *s; SeqStack* Init_SeqStack() { s=malloc(sizeof(SeqStack)); s->top=-1; return s;//建立一个指向为NULL的空栈 } //判断栈是否为空 int Empty_SeqStack(SeqStack *s) { if(s->top==-1) return 1;//返回1时,栈为空栈 else return 0;//返回0时,栈不为空栈 } //入栈 int Push_SeqStack(SeqStack *s,datetype x) { if(s->top==MAXSIZE-1) return -1; //判断栈满了没有 else { s->top++; s->date[s->top]=x; return 1; } } //出栈 datetype Pop_SeqStack(SeqStack *s,datetype *x) { if(Empty_SeqStack(s))//空栈结果为1,为真,执行return 0,返回 return 0;//栈空不能出栈 else{ *x=s->date[s->top]; s->top--; return *x; } } //取栈顶元素 datetype Top_SeqStack(SeqStack *s) { if(Empty_SeqStack(s)) return 0; else return (s->date[s->top]); } //清空栈 SeqStack Clear_SeqStack(SeqStack *s) { if(s->top!=-1) s->top=-1; } //求长度 datetype long_SeqStack(SeqStack *s) { int i=0; while(s->top!=-1) { i++; s->top--; } return i; } //遍历栈 void output(SeqStack *s) { SeqStack p; p.top=s->top; if(p.top!=-1) { printf("栈内元素为:\n"); while(p.top!=-1) { printf("%3d",s->date[p.top]); p.top--; }} else printf("栈空,无元素。\n"); } int main() { int num=1,num2,num4,num7; datetype num1,num3; SeqStack* s1=Init_SeqStack(); printf("0表示退出栈\n"); printf("1表示入栈\n"); printf("2表示出栈\n"); printf("3表示取栈顶元素\n"); printf("4表示判断栈是否为空\n"); printf("5表示清空栈\n"); printf("6表示销毁栈\n"); printf("7表示求栈的长度\n"); printf("8表示遍历栈\n"); while(num!=0)//0表示退出循环栈 { printf("\n请输入你的指令:"); scanf("%d",&num); switch(num){ case 0:num=0; break; case 1:printf("请输入入栈元素:\n"); scanf("%d",&num2); Push_SeqStack(s1,num2); break; case 2:num3=Pop_SeqStack(s1,&num2); if(num3==0&&s1->top==-1) printf("栈空不能出栈!\n"); else printf("%d",num3); break; case 3:num2=Top_SeqStack(s1); printf("%d",num2); break; case 4:num4=Empty_SeqStack(s1); printf("yes:空栈,no:非空栈\n"); if(num4==1) printf("结果为:%c%c%c\n",121,101,115); else if(num4==0) printf("结果为:%c%c\n",110,111); else printf("程序错误!请检查判断空栈函数!\n"); break; case 5:Clear_SeqStack(s1); break; case 6: num=0; break; case 7:num7=long_SeqStack(s1); printf("%d",num7); break; case 8:output(s1); break; default:printf("输入错误!请重输:\n"); } } }