栈的存储和基本操作的实现

实现要求

编写一个程序实现栈的各种操作,存储方式从顺序和链式中任选一种,并在此基本上设计一个主程序。完成如下功能:
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;
}

本博客为本人较早实验的整理,如有问题,欢迎指出!!!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Desire..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值