实现要求
编写一个程序实现栈的各种操作,存储方式从顺序和链式中任选一种,并在此基本上设计一个主程序。完成如下功能:
1.初始化栈
2.元素入栈。入栈元素:2、14、8、6.
3.删除栈顶元素。
共运行3次出栈操作。每次完成出栈操作后,都输出出栈元素的值。
4.读取栈顶元素,并显示。
5.判断是否栈空。
完成第一次的判断栈空操作后,执行一次出栈操作,然后进行第二次的判断栈空操作。
6.在主程序中给出菜单,进行相应的操作。
效果图
初始化
入栈
删除
取栈顶元素
判断是否非空
遍历
详细代码实现
#include<iostream>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define Maxsize 15
typedef int Status;
typedef double Elemtype;
typedef struct
{
Elemtype *elem;
int top;
}sqstack;
void Menu();//菜单
Status Initstack(sqstack &S);//初始化栈
Status Inputstack(sqstack &S,Elemtype x);//元素入栈
Status Deletstack(sqstack &S);//删除栈顶元素
Status Serchstack(sqstack &S);//遍历栈
Status Showstack(sqstack &S,Elemtype &x);//取栈顶元素
bool Emptystack(sqstack &S);//判断是否栈空
using namespace std;
int main()
{
sqstack S;
Elemtype x;
int n,m,i;
while(1)
{
Menu();
cout<<"请输入选择项:"<<endl;
cin>>m;
if(m==0)
{
cout<<"谢谢您使用本系统,再见!"<<endl;
break;
}
if(m==1)
{
n=Initstack(S);
if(n==0)
cout<<"初始化失败!"<<endl;
else
cout<<"初始化成功!"<<endl;
system("pause");
system("cls");
}
if(m==2)
{
n=Inputstack(S,x);
if(n==-2)
cout<<"元素入栈失败,溢出!"<<endl;
else
cout<<"元素入栈成功!"<<endl;
system("pause");
system("cls");
}
if(m==3)
{
n=Deletstack(S);
if(n==0)
cout<<"删除栈顶元素失败!"<<endl;
else
cout<<"删除栈顶元素成功!"<<endl;
system("pause");
system("cls");
}
if(m==4)
{
n=Showstack(S,x);
if(n==0)
cout<<"空栈!"<<endl;
if(n==1)
cout<<"栈顶元素为:"<<x<<endl;
cout<<"取栈顶元素成功!"<<endl;
system("pause");
system("cls");
}
if(m==5)
{
n=Serchstack(S);
if(n==0)
cout<<"空栈!"<<endl;
else
cout<<"遍历栈成功!"<<endl;
system("pause");
system("cls");
}
if(m==6)
{
n=Emptystack(S);
if(n==0)
cout<<"栈空!";
if(n==1)
cout<<"栈非空!";
system("pause");
system("cls");
}
}
return 0;
}
void Menu()
{
cout<<"*******************************************"<<endl;
cout<<"1.初始化栈 2.元素入栈 3.删除栈顶元素 "<<endl;
cout<<"4.取栈顶元素 5.遍历栈 6.判断是否栈空 "<<endl;
cout<<"0.退出"<<endl;
cout<<"*******************************************"<<endl;
}
Status Initstack(sqstack &S)
{
S.elem=new Elemtype[Maxsize];
if(!S.elem)
return ERROR;
S.top=-1;
return OK;
}
Status Inputstack(sqstack &S,Elemtype x)
{
int n,i;
cout<<"请输入元素个数:";
cin>>n;
if(S.top==Maxsize-1)
return OVERFLOW;
cout<<"请依次输入元素:";
for(i=0;i<n;i++)
{
S.top++;
cin>>x;
S.elem[S.top]=x;
}
return OK;
}
Status Deletstack(sqstack &S)//删除栈顶元素
{
if(S.top==-1)
return ERROR;
S.top--;
return OK;
}
Status Serchstack(sqstack &S)
{
int i;
if(S.top==-1)
return ERROR;
for(i=0;i<=S.top;i++)
{
cout<<S.elem[i]<<" ";
}
return OK;
}
Status Showstack(sqstack &S,Elemtype &x)
{
if(S.top==-1)
return ERROR;
x=S.elem[S.top];
return OK;
}
bool Emptystack(sqstack &S)
{
if(S.top==-1)
return ERROR;
else
return OK;
}
本博客为本人较早实验的整理,如有问题,欢迎指出!!!