顺序栈基本操作代码实现
#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;
}
版权声明:本文为weixin_45964966原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。