顺序栈的基本操作

#include
#include
#define MAXSZIE 100
typedef int ElemType;
typedef struct SqStack{ElemType *top;ElemType *base;int sizestack;
}SqStack;				//接口 
SqStack *InitStack(SqStack &s)//初始化创建空栈 
{s.base=(int*)malloc(sizeof(int)*MAXSZIE);if(!s.base)return 0;s.top=s.base;s.sizestack=MAXSZIE;return 0;
}
void pushStack(SqStack &s)//压栈 
{int e;scanf("%d",&e);if(s.top-s.base==s.sizestack)  printf("内存已满,无法继续压栈!");else*s.top++=e;   //先压栈,再使top指针上移 
}
void DisplayStack(SqStack &s) //遍历栈 
{if(s.base==s.top)printf("栈空!");int *p;p=s.top;while(p>s.base){p--;printf("%d->",*p);}
}
int popStack(SqStack &s,ElemType &e) //出栈 
{if(s.base==s.top){printf("栈已空!");}e=*(--s.top);  //先使top指针下移,再弹栈; return e; 
}
void CleanStack(SqStack &s)//清空栈 
{if(s.base==s.top)printf("栈已空!");s.base=s.top;
}
void destory_stack(SqStack &s)//销毁栈 
{if(s.base){free(s.base);s.base=NULL;s.top=NULL;s.sizestack=0;}
}
int GetTop(SqStack s,ElemType &e) //得到栈顶元素,注意这里s前没有添加引用,该处为值传递,不是引用传递,为了对main方法中的top指针不进行变动 
{if(s.base==s.top)printf("栈已空!");e=*(--s.top);return e;	
} 
int StackEmpty(SqStack s)//判断栈是否清空 
{if(s.base==s.top)return 1;elsereturn 0;
}
int main()
{SqStack s;InitStack(s);int n;printf("你要输入多少数据:");scanf("%d",&n);for(int i=1;i<=n;i++){printf("请输入第%d个压栈数据:",i);pushStack(s);}printf("该栈顶元素为:");int v;GetTop(s,v);printf("%d",v);printf("\n");int x,y;printf("请输入出栈数据个数:");scanf("%d",&x);for(int i=1;i<=x;i++){popStack(s,y);printf("%d->",y);}printf("\n");printf("余下数据如下\n");DisplayStack(s);CleanStack(s);printf("\n清栈后,栈空否:%d(1:空 0:否)",StackEmpty(s));destory_stack(s); 	
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部