顺序栈

来源:互联网 发布:mac系统下安装虚拟机 编辑:程序博客网 时间:2024/04/30 12:50
/*将元素a,b,c,d,e依次入栈,然后将d和e出栈,再将f和g进栈,最后将元素全部进栈,并将元素按照出栈次序输出*/ #include <stdio.h>#include<stdlib.h>typedef char DataType;#include "SeqStack.h"void main(){ SeqStack S; int i; DataType a[] = {'a','b','c','d','e'}; DataType e; InitStack(&S); for(i = 0;i < sizeof(a)/sizeof(a[0]);i++) //数组元素依次进栈{ if(PushStack(&S,a[i]) == 0) { printf("栈已满,不能进栈!");             return 0; } } printf("出栈元素是:"); if(PopStack(&S,&e) == 1) { printf("%4c",e);} if(PopStack(&S,&e) == 1) { printf("%4c",e); } printf("\n"); printf("当前栈顶元素是:"); if(GetTop(S,&e) == 0)     //取栈顶元素{ printf("栈已空!"); return 0; } else { printf("%4c\n",e);} if(PushStack(&S,'f') == 0) { printf("栈已满,不能进栈!"); return 0; } if(PushStack(&S,'g') == 0) { printf("栈已满,不能进栈!"); return 0; } printf("当前栈的元素个数是:%d\n",StackLength(S)); printf("元素的出栈顺序是:"); while(!StackEmpty(S)) //如果栈不空,将所有元素出栈{ PopStack(&S,&e); printf("%4c",e); } printf("\n");   }

/*顺序表头文件:SeqStack.h*/#include <stdio.h> #include <stdlib.h> #define STACKSIZE 100 typedef char DataType;typedef struct{DataType stack[STACKSIZE];int top;}SeqStack;void InitStack(SeqStack *S);//初始化栈 int StackEmpty(SeqStack S);//判断栈是否为空 int GetTop(SeqStack S, DataType *e);//取栈顶元素 int PushStack(SeqStack *S, DataType e);//入栈 int PopStack(SeqStack *S, DataType *e);//出栈 int StackLength(SeqStack S);//求栈长度 void ClearStack(SeqStack *S);//清空栈void InitStack(SeqStack *S)//将栈S初始化为空栈 {S->top = 0;}int StackEmpty(SeqStack S)//判断栈是否为空,栈为空返回1,否则返回0 {if (S.top == 0){return 1;}else{return 0;}}int GetTop(SeqStack S, DataType *e)//取栈顶元素,将栈顶元素值返回给e,并返回1表示成功,返回0表示失败{if (S.top <= 0){printf("栈已经空!n");return 0;}else {*e = S.stack[S.top - 1];//取栈顶元素 return 1;}}int PushStack(SeqStack *S,DataType e)//进栈操作//将元素e进栈,元素进栈成功返回1,否则返回0{ if(S->top >= STACKSIZE-1)   //元素进栈前,判断是否栈已满{ printf("栈已满,不能入栈!");return 0;} else { S->stack[S->top] = e;     //元素e进栈S->top++;                 //修改栈顶指针return 1;}}int PopStack(SeqStack *S,DataType *e)//出栈操作{ if(S->top <= 0) { printf("栈已经没有元素,不能出栈!n"); return 0;} else { S->top--;     //先修改栈顶指针,即出栈*e = S->stack[S->top]; //将出栈元素赋值给ereturn 1;} }int StackLength(SeqStack S)//返回栈长度{ return S.top;} void ClearStack(SeqStack *S)//清空栈{ S->top = 0; //将栈顶指针置0}
/*顺序表头文件:SeqStack.h*/#include <stdio.h> #include <stdlib.h> #define STACKSIZE 100 typedef char DataType;typedef struct{DataType stack[STACKSIZE];int top;}SeqStack;void InitStack(SeqStack *S);//初始化栈 int StackEmpty(SeqStack S);//判断栈是否为空 int GetTop(SeqStack S, DataType *e);//取栈顶元素 int PushStack(SeqStack *S, DataType e);//入栈 int PopStack(SeqStack *S, DataType *e);//出栈 int StackLength(SeqStack S);//求栈长度 void ClearStack(SeqStack *S);//清空栈void InitStack(SeqStack *S)//将栈S初始化为空栈 {S->top = 0;}int StackEmpty(SeqStack S)//判断栈是否为空,栈为空返回1,否则返回0 {if (S.top == 0){return 1;}else{return 0;}}int GetTop(SeqStack S, DataType *e)//取栈顶元素,将栈顶元素值返回给e,并返回1表示成功,返回0表示失败{if (S.top <= 0){printf("栈已经空!n");return 0;}else {*e = S.stack[S.top - 1];//取栈顶元素 return 1;}}int PushStack(SeqStack *S,DataType e)//进栈操作//将元素e进栈,元素进栈成功返回1,否则返回0{ if(S->top >= STACKSIZE-1)   //元素进栈前,判断是否栈已满{ printf("栈已满,不能入栈!");return 0;} else { S->stack[S->top] = e;     //元素e进栈S->top++;                 //修改栈顶指针return 1;}}int PopStack(SeqStack *S,DataType *e)//出栈操作{ if(S->top <= 0) { printf("栈已经没有元素,不能出栈!n"); return 0;} else { S->top--;     //先修改栈顶指针,即出栈*e = S->stack[S->top]; //将出栈元素赋值给ereturn 1;} }int StackLength(SeqStack S)//返回栈长度{ return S.top;} void ClearStack(SeqStack *S)//清空栈{ S->top = 0; //将栈顶指针置0}


0 0
原创粉丝点击