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

实现要求

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

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

Guess you like

Origin blog.csdn.net/qq_47122804/article/details/121315205