顺序栈的基本操作

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

运行结果如下:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值