#define STACK_INIT_SIZE 3#define STACK_INCREAMENT 2#define null 0#include <stdio.h>#include <alloc.h> typedef struct stack{ int *base; int *top; int size;//当前已非配的空间,没数据也算 }Sqstack;//用作堆栈的指针de 类型 void Initstack(Sqstack &s)//建立堆栈{ s.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); if(s.base==null) { printf("overflow"); } s.top=s.base; s.size=STACK_INIT_SIZE;} void Gettop(Sqstack &s,int &e){ if(s.top==s.base){printf("stack is empty");} e=*(s.top-1);//注意哦,有一个元素时top指向第二隔了,没改变TOP的指向} void Push(Sqstack &s,int e){ if((s.top-s.base)+1==s.size)//堆栈满了 { s.base=(int*)realloc(s.base,(s.size+STACK_INCREAMENT)*sizeof(int)); //仍然以源地址为基地址,从。size后续补充increase if(s.base==null) { printf("overflow"); } s.top=s.base+s.size-1; s.size+=STACK_INCREAMENT;printf("我加了\n"); } *(s.top++)=e;} void Pop(Sqstack &s,int &e){ if(s.top==s.base){printf("stack is empty");} e=*(--s.top);} void Show(Sqstack &s){ int i=0; for(i=0;i<(s.top-s.base);i++) printf("%d ",*(s.base+i));} int main(){ Sqstack s; Initstack(s); int a,e; while(a!=0) { printf("选择操作1:Gettop 2:Push 3:Pop 4:Show\n"); scanf("%d",&a); switch(a) { case 1:Gettop(s,e);printf("栈顶元素是%d\n",e);break; case 2:printf("输入进站元素\n");scanf("%d",&e);Push(s,e);break; case 3:Pop(s,e);printf("出栈元素是%d\n",e);break; case 4:Show(s);printf("\n");break; } } return 0;}

评论