#include<iostream>
#include<iomanip>
#define MaxSize 50
#define ElemType int
using namespace std;
//栈的顺序存储类型描述
typedef struct{
ElemType data[MaxSize];
int top; //栈顶指针
}SqStack;
//初始化操作
void InitStack(SqStack &S)
{
S.top = -1; //初始化栈顶指针
}
//判断栈空
bool StackEmpty(SqStack &S)
{
if(S.top == -1)
{
return true;
}else
{
return false;
}
}
//进栈
bool Push(SqStack &S,ElemType x)
{
if(S.top==MaxSize-1)
{
cout<<"栈满!请先出栈!"<<endl;
return false;
}else
{
S.data[++S.top] = x; //也就是S.top = S.top+1;S.data[S.top] = x;
return true;
}
}
//出栈
bool Pop(SqStack &S,ElemType &x)
{
if(S.top==-1)
{
cout<<"栈空!请先入栈!"<<endl;
return false;
}else
{
S.data[S.top--] = x; //也就是S.data[S.top]=x;S.top = S.top-1;
return true;
}
}
//读栈顶元素
bool GetTop(SqStack &S,ElemType &x)
{
if(S.top==-1)
{
cout<<"栈空,请先入栈!"<<endl;
return false;
}else
{
x = S.data[S.top];
cout<<"栈顶元素为"<<x<<endl;
return true;
}
}
//栈内元素
void PrintStack(SqStack &S)
{
int i ;
if(StackEmpty(S))
{
cout<<"栈空,输出失败,请先入栈!"<<endl;
}else
{
cout<<"栈中元素从栈顶到栈底依次为:";
for(i= S.top;i>=0;i--)
{
cout<<S.data[i]<<" ";
}
}
}
//菜单
void ShowMenu()
{
cout<<"*********1.初始化*******"<<endl;
cout<<"*********2.入栈*********"<<endl;
cout<<"*********3.出栈*********"<<endl;
cout<<"*********4.读栈顶元素***"<<endl;
cout<<"*********5.读栈内元素***"<<endl;
cout<<"*********6.退出*********"<<endl;
}
int main()
{
SqStack S;
ElemType x;
int s;
while(true)
{
ShowMenu();
cout<<"请输入选项:";
cin>>s;
switch(s)
{
case 1:
{
InitStack(S);
cout<<"初始化成功!"<<endl;
system("pause");//请按任意键继续
system("cls");//清屏操作
break;
}
case 2:
{
cout<<"请输入入栈的数值:";
cin>>x;
if(Push(S,x))
{
cout<<"入栈成功!"<<endl;
PrintStack(S);
}else
{
cout<<"入栈失败!"<<endl;
}
system("pause");
system("cls");
break;
}
case 3:
{
if(Pop(S,x))
{
cout<<"出栈成功!"<<endl;
PrintStack(S);
}else
{
cout<<"出栈失败!"<<endl;
}
system("pause");
system("cls");
break;
}
case 4:
{
if(GetTop(S,x))
{
cout<<"读取成功!"<<endl;
}else
{
cout<<"读取失败!"<<endl;
}
system("pause");
system("cls");
break;
}
case 5:
{
PrintStack(S);
system("pause");
system("cls");
break;
}
case 6:
{
cout<<"欢迎下次使用"<<endl;
return 0;
}
}
}
return 0;
}
运行结果如下:

该代码实现了一个基于C++的顺序栈数据结构,包括初始化、判断栈空、进栈、出栈、读栈顶元素和打印栈内元素的功能。用户通过菜单选择操作,可以进行栈的操作并查看结果。
967

被折叠的 条评论
为什么被折叠?



