顺序栈基本操作代码实现

顺序栈基本操作代码实现

#include<iostream>
using namespace std;
#include<stdlib.h>
#include<cstdlib> 

//顺序栈定义
#define OK 0
#define ERROR -1
#define OVERFLOW -2
#define MAXSIZE  100
typedef int Status;
typedef int SElemType;
typedef struct{
	SElemType *base;
	SElemType *top;
	int stacksize;
}SqStack;

//算法1 顺序栈的初始化
Status InitStack(SqStack &S)
{// 构造一个空栈 S 
	S.base=new int[MAXSIZE];
	if(!S.base) 
	{
		cout<<"初始化失败"<<endl;
		return ERROR;
	}
	else
	{
		cout<<"初始化成功"<<endl;
		S.top=S.base;
		S.stacksize=0;
		return OK;	
	}
	
}
//算法2 顺序栈的入栈
Status Push(SqStack &S,SElemType e)
{ // 插入元素e为新的栈顶元素
	if(S.top-S.base==MAXSIZE)
		return ERROR;
	*S.top++=e;
	return OK;
}
//算法3 顺序栈的出栈
Status Pop(SqStack &S,SElemType &e)
{// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
	if(S.top==S.base)
		return ERROR;
	e=*--S.top;
	return OK;
}
//算法4 取顺序栈的栈顶元素
Status GetTop(SqStack S,SElemType &e)
{// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
	if(S.top==S.base)
	  return ERROR;
	e=*S.top;
	return OK;
}
//算法5  判断栈是否为空
//若栈为空,输出栈为空 返回ERROR,不为空,输出不为空,返回OK 
Status StackEmpty(SqStack &S)
{
    if (S.top == S.base)
        return OK;  	
    else
        return ERROR;
}
//算法6  取栈顶元素
Status GetTop(SqStack &S)
{
	if(S.top==S.base)
	{//若栈为空,返回ERROR,并且输出栈为空,无栈顶元素
		cout<<"栈为空,无栈顶元素"<<endl;
		return ERROR;
	}
	else
	{//若栈不为空,返回OK,并且输出栈顶元素 
		cout<<"栈顶元素为"<<*(S.top)<<endl;
		return OK;	
	}
}

//算法7 清空栈 
Status ClearStack(SqStack &S)
{
	S.top=S.base;
	cout<<"栈已清空"<<endl;
	return OK;	
} 

//算法8  销毁栈 
Status DestoryStack(SqStack &S)
{
	delete(S.base);
	S.base=NULL;
	S.top=NULL;
	S.stacksize=0;
	cout<<"栈已销毁"<<endl;
	return OK;
}

//算法9  输出栈中所有元素,弹出所有元素 
Status OutputStack(SqStack S)
{
	cout<<"栈中全部元素为:";
	for(int i=0;i<S.stacksize;i++)
	{
		int m;
		Pop(S,m);
		cout<<m<<" ";
	}
	cout<<endl;
	return 0;
}
Status main()
{
	SqStack S;
	int choose=-1;
	cout<<"1.初始化栈"<<endl;
	cout<<"2.销毁栈"<<endl;
	cout<<"3.清空栈"<<endl;
	cout<<"4.栈判空"<<endl;
	cout<<"5.求栈长度"<<endl;
	cout<<"6.获取栈顶元素"<<endl;	
	cout<<"7.插入一个元素"<<endl;
	cout<<"8.删除一个元素"<<endl;
	cout<<"9.输出所有元素"<<endl;
	cout<<"10.进制转换"<<endl;
	cout<<"0.退出"<<endl;
	while(choose!=0)
	{
		cout<<"请输入选择的功能"<<endl;
		cin>>choose;
		switch(choose)
		{
			case 1:
				InitStack(S);                               //1.初始化栈
			break;
			case 2:
				DestoryStack(S);                            //2.销毁栈 
			break;
			case 3:
				ClearStack(S);                               //3.清空栈元素 
			break;
			case 4:
				StackEmpty(S);                               //4.栈判空
			break;
			case 5:
				cout<<"栈长度为"<<S.stacksize<<endl;         //5.求栈长度 
			break;
			case 6:
				GetTop(S);                                   //6.求栈顶元素 
			break;
			case 7:
				cout<<"请输入进栈元素:"<<endl;              //7.插入一个元素,进栈 
				SElemType e;
				cin>>e;
				S.stacksize++; 
				Push(S,e);
			break;
			case 8:                                                  //8.删除一个元素,出栈 
				cout<<endl<<"弹出的栈顶元素为:"<<endl;
				SElemType t;
				Pop(S,t);
				cout<<t<<" "<<endl;
			break;
			case 9:
				OutputStack(S);                                     //9.输出栈的所有元素 
			break;
			case 10:                                                //10.进制转换
				int N,d;
			    SqStack S1;
			    InitStack(S1);
			    cout<<"请输入要转换的数:"<<endl;
			    cin>>N;
			    cout<<"请输入要转换的进制:"<<endl;
			    cin>>d;
			    while(N)
			    {
			        Push(S1,N%d);
			        N=N/d;
			    }
			    cout<<"转换后的数为:";
			    while(StackEmpty(S1))
			    {
			        int e;
			        Pop(S1,e);
			        cout<<e;
			    }
			    cout<<endl;
			break;
			case 0:	
			break;	
		} 
	}
	return 0;
}
  • 8
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值