
1、 顺序栈初始化
2、 顺序栈的入栈
3、 顺序栈的出栈
4、 顺序栈取栈顶
5、 顺序栈的清空
6、 顺序栈的销毁
7、 顺序栈的判空
8、 顺序栈的判满
9、所有元素出栈
10、求栈元素个数
二、总代码#include#include #include typedef int StackEntry; typedef enum status { success,fail }Status; typedef struct stack { int top; int maxsize; StackEntry *entry;//动态分配 }Stack,*StackPtr; Status Stack_Init(StackPtr s,int size); Status Stack_Push(StackPtr s,StackEntry item); Status Stack_Pop(StackPtr s,StackEntry *item); Status Stack_Top(StackPtr s,StackEntry *item); bool Stack_Clear(StackPtr s); Status Stack_Destroy(StackPtr s); bool Stack_Empty(StackPtr s); bool Stack_Full(StackPtr s); void Stack_All(StackPtr s); Status Stack_Check(Status sInit); Status Stack_Init(StackPtr s,int size) { Status outcome=fail; s->entry=(StackEntry *)malloc(size*sizeof(StackEntry)); if(s->entry!=NULL) { s->top=-1;//空栈 s->maxsize=size; outcome=success; } return outcome; } Status Stack_Push(StackPtr s,StackEntry item) { Status outcome=success; if(Stack_Full(s)==1) { outcome=fail; } else { s->top++; s->entry[s->top]=item; } return outcome; } Status Stack_Pop(StackPtr s,StackEntry *item) { Status outcome=success; if(Stack_Empty(s)==true) { outcome=fail; } else { *item=s->entry[s->top]; --s->top; } return outcome; } Status Stack_Top(StackPtr s,StackEntry *item) { Status outcome=success; if(Stack_Empty(s)==1) { outcome=fail; } else { *item=s->entry[s->top]; } return outcome; } bool Stack_Clear(StackPtr s) { s->top=-1; return true; } Status Stack_Destroy(StackPtr s) { Status outcome=fail; if(s->entry!=NULL) { free(s->entry); s->entry=NULL; s->top=-1; outcome=success; } return outcome; } bool Stack_Empty(StackPtr s) { return (s->top<=-1); } bool Stack_Full(StackPtr s) { return (s->top>=s->maxsize-1);//如果栈满则返回1 } void Stack_All(StackPtr s) { int item,i; if(Stack_Empty(s)==true)printf("栈下溢!n"); else { printf("从栈顶依次向底的元素为:n"); for(i=s->top;i>=0;i--) { Stack_Pop(s,&item); printf("%dn",item); } } } Status Stack_Check(Status sInit) { if(sInit==success)return success; else return fail; } int main() { int number,i,n,size=0; StackEntry item; Status sInit=fail,sOther=fail; Stack s; printf("****************1、 顺序栈初始化t"); printf("2、 顺序栈的入栈****************n"); printf("****************3、 顺序栈的出栈t"); printf("4、 顺序栈取栈顶****************n"); printf("****************5、 顺序栈的清空t"); printf("6、 顺序栈的销毁****************n"); printf("****************7、 顺序栈的判空t"); printf("8、 顺序栈的判满****************n"); printf("****************9、 展示菜单选项t"); printf("10、所有元素出栈****************n"); printf("****************11、栈元素的个数t"); printf("0、 结束该程序******************n"); while(1) { printf("选项:"); scanf("%d",&number); switch(number) { case 1: { printf("请输入栈顶最大元素个数:"); scanf("%d",&size); sInit=Stack_Init(&s,size); if(sInit==success) printf("初始化成功!n"); else if(sInit==fail)printf("初始化失败!n"); break; } case 2: { if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n"); else { printf("请输入入栈元素:"); scanf("%d",&item); sOther=Stack_Push(&s,item); if(sOther==success)printf("入栈成功!n"); else printf("栈上溢!n"); } break; } case 3 :{ if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n"); else { sOther=Stack_Pop(&s,&item); if(sOther==success)printf("出栈元素为:%dn",item); else printf("栈下溢!n"); } break; } case 4 :{ if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n"); else { sOther=Stack_Top(&s,&item); if(sOther==success)printf("栈顶元素为:%dn",item); else printf("栈下溢!n"); } break; } case 5 :{ if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n"); else { if(Stack_Clear(&s)==true)printf("清空成功!n"); else printf("清空失败!n"); } break; } case 6 :{ if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n"); else { sOther=Stack_Destroy(&s); if(sOther==success) { printf("销毁成功!n"); sInit=fail; } else printf("销毁失败!n"); } break; } case 7 :{ if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n"); else { if(Stack_Empty(&s)==1)printf("栈空!n"); else printf("栈未空!n"); } break; } case 8 :{ if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n"); else { if(Stack_Full(&s)==1)printf("栈满!n"); else printf("栈未满!n"); } break; } case 9 :{ printf("------------------------------------------------------------------------n"); printf("****************1、 顺序栈初始化t"); printf("2、 顺序栈的入栈****************n"); printf("****************3、 顺序栈的出栈t"); printf("4、 顺序栈取栈顶****************n"); printf("****************5、 顺序栈的清空t"); printf("6、 顺序栈的销毁****************n"); printf("****************7、 顺序栈的判空t"); printf("8、 顺序栈的判满****************n"); printf("****************9、 展示菜单选项t"); printf("10、所有元素出栈****************n"); printf("****************11、栈元素的个数t"); printf("0、 结束该程序******************n"); printf("------------------------------------------------------------------------n"); break; } case 10:{ if(Stack_Check(sInit)==fail)printf("请先初始化再进行其他操作!n"); else { Stack_All(&s); } break; } case 11:{ printf("栈元素个数:%dn",s.maxsize); break; } case 0 :{ printf("再见,祝您生活幸福愉快!"); return 0; } default:{ printf("请输入0~11内的整数!n"); break; } } } }