#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int SElemType; //SElemType 为可定义的数据类型,此设为int类型
#define MAXSIZE 100//存储空间的初始分配量
typedef struct
{
SElemType *base;//栈底指针
SElemType *top;//栈顶指针
int stacksize;//最大容量
}SqStack;
Status InitStack(SqStack &S)
{
//构造一个空栈
S.base=new SElemType[MAXSIZE];//动态分配数组空间
if(!S.base) exit(OVERFLOW);//存储分配失败
S.top=S.base;
S.stacksize=MAXSIZE;//最大容量
return OK;
}
Status Push(SqStack &S,SElemType e)
{
//插入e为新的栈顶元素
if(S.top-S.base==S.stacksize) return ERROR;//栈满
*S.top++=e;//将元素e压入栈顶,栈顶指针加1
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
//删除栈顶元素,用e返回其值
if(S.top==S.base) return ERROR;//栈空
e=*--S.top;//栈顶指针减1,将栈顶元素赋给e
return OK;
}
SElemType GetTop(SqStack S)
{
//返回栈顶元素,不修改栈顶指针
if(S.top!=S.base)//栈非空
return *(S.top-1);//返回栈顶元素的值,栈顶指针不变
}
Status PrintStack(SqStack S)
{
//遍历输出
SElemType *p=S.base;
while(p!=S.top)
{
cout<<*p<<"\t";
p++;
}
cout<<endl;
return OK;
}
Status CleanStack(SqStack S)
{
//清空栈
if(S.base)
S.top=S.base;
return OK;
}
Status DestoryStack(SqStack &S)
{
//销毁栈
if(S.base)
{
delete S.base;
S.stacksize=0;
S.base=S.top=NULL;
}
return OK;
}
int main()
{
SqStack s;
InitStack(s);
int choose = 0;
int e1,e2,e3;
if (!InitStack(s))
{
cout << "初始化失败" << endl;
}
cout << "1、入栈" << endl;
cout << "2、出栈" << endl;
cout << "3、取栈顶" << endl;
cout << "4、遍历" << endl;
cout << "5、清空" << endl;
cout << "6、销毁" << endl;
cout << "7、退出" << endl;
while (choose != 9)
{
cout << "请输入要做的操作" << endl;
cin >> choose;
switch (choose)
{
case 1:
cout<<"请输入想要入栈的元素值:"<<endl;
cin>>e1;
Push(s,e1);
break;
case 2:
Pop(s,e2);
cout<<"弹出的元素为"<<e2<<endl;
break;
case 3:
e3=GetTop(s);
cout<<"栈顶元素为"<<e3<<endl;
break;
case 4:
PrintStack(s);
break;
case 5:
CleanStack(s);
break;
case 6:
DestoryStack(s);
cout<<"已销毁"<<endl;
break;
default:
break;
}
}
return 0;
}
顺序栈作业
于 2023-10-09 17:18:19 首次发布