C++,简单的顺序栈

#include<iostream>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
using namespace std;
typedef int ElemType;
typedef int Status;

//定义栈
typedef struct{
	ElemType * base;
	ElemType * top;
	int stackSize;
}sqStack;

//栈的初始化
Status InitStack(sqStack &S){
	S.base = new int[MAXSIZE];
	if(!S.base)
		return OVERFLOW;
	S.top=S.base;
	S.stackSize=MAXSIZE;
	return OK;	
} 

//创建栈
Status StackCreate(sqStack &S,int e){
	if(S.top-S.base==S.stackSize)
		return ERROR;
	*S.top=e;
	S.top++;	
} 

//打印栈
Status sqStack_print(sqStack S){
	ElemType e;
	while(S.top!=S.base){
		S.top--;
		e=*S.top;
		cout<<e<<endl;
	}
return OK;	
} 

//压栈
Status Push(sqStack &S,int e){
	if(S.top-S.base==S.stackSize)
		return ERROR;
	*S.top=e;
	S.top++;
	return OK;	
} 

//取出栈顶元素
Status getTop(sqStack S,int &e){
	if(S.top==S.base)
		return ERROR;
	e=*(S.top-1);
	return OK;	
} 

//弹栈
Status Pop(sqStack &S,int &e){
	if(S.top==S.base){
		return ERROR;
	}
	e=*--S.top;
	return OK; 
} 
 
int main(){
	int n,e,i,p,q,t;
	sqStack S;
	
	InitStack(S);
	
	//(1)根据输入的栈中元素个数n和各元素值建立一个顺序栈,并输出栈中各元素值。
	cout<<"请输入栈的元素个数:"<<endl;
	cin>>n;
	cout<<"请分别输入栈中元素数据:"<<endl;
	for(i=0;i<n;i++){
		cin>>e;
		StackCreate(S,e);
	}
	cout<<"目前栈中有"<<S.top-S.base<<"个数据元素,如下所示:"<<endl;
	sqStack_print(S);
	
	//(2)将数据元素e入栈,并输出入栈后的顺序栈中各元素值。
	cout<<"请输入压栈数据元素:"<<endl;
	cin>>p;
	Push(S,p);
	cout<<"目前栈中有"<<S.top-S.base<<"个数据元素,如下所示:"<<endl;
	sqStack_print(S);
	
	//(3)将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值。	
	getTop(S,q);
	cout<<"此时的栈顶元素为:"<<q<<endl;
	cout<<"弹栈后,"<<endl;
	Pop(S,t);
	cout<<"目前栈中有"<<S.top-S.base<<"个数据元素,如下所示:"<<endl;
	sqStack_print(S); 
	
	return OK; 
} 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值