顺序栈的基本操作(c语言)

主要介绍出栈,入栈,栈的初始化,栈的遍历,以及得到首元素
栈的数据结构参考严蔚敏的《数据结构》。
完整代码如下:

#define TRUE 1
#define ERROR -1
#define OVERFLOW -1
#define INIT_STACK_SIZE 100
#define SIZEINCREMENT 10
typedef int Elemtype;
typedef int Status;
typedef struct{
 Elemtype *base;
 Elemtype *top;
 int size;
}SqStack;
//初始化
Status InitStack(SqStack &s){
 s.base=(Elemtype *)malloc(INIT_STACK_SIZE*sizeof(Elemtype));
 if(!s.base) exit(OVERFLOW);
 s.top=s.base;
 s.size=INIT_STACK_SIZE;
 return TRUE;
}
//得到栈顶元素
Status Gettop(SqStack s,Elemtype &e){
 if(s.top==s.base) return ERROR;
 e=*(s.top-1);
 return TRUE;
}
//入栈
Status Push(SqStack &s,Elemtype e){
 if(s.top-s.base>=s.size){
  s.base=(Elemtype *)realloc(s.base,(s.size+SIZEINCREMENT)*sizeof(Elemtype));
  if(!s.base) return ERROR;
  s.top=s.base+s.size;
  s.size+=SIZEINCREMENT;
 }
 *s.top++=e;
 return TRUE;
}
//出栈
Status Pop(SqStack s, Elemtype &e){
 if(s.top==s.base) return ERROR;
 e=*--s.top;
 return TRUE;
}
//遍历输出
Status PrintStack(SqStack &s){
 Elemtype *i;
 if(s.top==s.base) return ERROR;
 for(i=s.base;i<s.top;i++){
  cout<<*i<<" "; 
 }
 return TRUE;
}
int main(){
 cout<<"请输入顺序栈中的元素个数:"<<endl;
 int m;
 Elemtype e;
 cin>>m;
 SqStack s;
 InitStack(s);
 cout<<"请输入该元素的数据:"<<endl;
 while(m--!=0){
  cin>>e;
  Push(s,e);
  //Gettop(s,e);
  //cout<<e<<endl;
  //cout<<"cc"<<endl;
  //PrintStack(s);
 }
 cout<<"该栈中元素为:"<<endl;
 PrintStack(s);
}

效果图如下,其中Push操作实现了元素的插入
在这里插入图片描述
栈的数据结构中用base指针存储栈底元素的地址,top指针存储栈顶元素的地址,遍历时从base开始,由于是连续的存储空间,所以可以线性加减实现遍历。
栈顶指针永远在栈顶元素的下一个位置上,获取栈顶元素时需要注意;需要修改栈中元素时参数的传递加上&引用符号可以实现实参内容的变化,具体传递参数时仍传递的是变量名。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值