栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++实现顺序栈

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++实现顺序栈

c++实现顺序栈中的基本操作:

1、顺序栈的初始化
2、顺序栈的入栈
3、顺序栈的出栈
4、顺序栈的取值
5、顺序栈的判空
6、顺序栈的求长
7、顺序栈的清空
8、顺序栈的销毁
9、顺序栈的打印

注意:执行销毁顺序栈操作后,给栈分配的内存空间会被回收,无法再执行顺序栈的基本操作,所以在调用销毁顺序栈后面添加了“return0;”,停止运行程序。

代码实现:
#include
using namespace std;
#define SElemType int//SElemType类型可根据实际情况自行设定

//*******************************顺序栈的存储结构*******************************
#define Maxsize 100
typedef struct
{
	SElemType* base;//栈底指针
	SElemType* top;//栈顶指针
	int stacksize;//栈可用的最大容量
}SqStack;

//*****************************顺序表的基本操作函数*****************************

//顺序栈的初始化
int InitStack(SqStack& S)
{
	//构造一个空栈
	S.base = new SElemType[Maxsize];//为顺序栈动态分配一个最大容量为Maxsize的数组空间
	if (!S.base)
		exit(OVERFLOW);//存储分配失败
	S.top = S.base;//栈顶指针等于栈底指针
	S.stacksize = Maxsize;
	return 0;
}

//顺序栈的入栈
bool Push(SqStack& S, SElemType e)
{
	if (S.top - S.base == Maxsize)
		return false;//栈满
	*S.top++ = e;//相当于 S.top=e; top++;
	return true;
}

//顺序栈的出栈
bool Pop(SqStack& S,SElemType &e)
{
	if (S.top == S.base)
		return false;//栈空
	e = *--S.top;//相当于 --S.top; e=*S.top;
	return true;
}

//顺序栈的取值
bool GetTop(SqStack S, SElemType& e)
{
	if (S.top == S.base)
		return false;
	e = *(S.top - 1);
	return true;
}

//*********************************顺序表的基本功能函数******************************

//1、入栈
void PushSqStack(SqStack& S)
{
	SElemType e;
	bool flag;
	cout << "请输入入栈元素:" << endl;
	cin >> e;
	flag=Push(S, e);
	if (flag)
		cout << "入栈成功!" << endl;
	else
		cout << "栈满,入栈失败!" << endl;
}

//2、出栈
void PopSqStack(SqStack& S)
{
	SElemType e;
	bool flag;
	flag=Pop(S, e);
	if (flag)
		cout << "出栈元素为:" << e << endl;
	else
		cout << "栈空,出栈失败!" << endl;
}

//3、取值
void GetTopSqStack(SqStack S)
{
	SElemType e;
	bool flag;
	flag=GetTop(S, e);
	if (flag)
		cout << "取得的栈顶元素为:" << e << endl;
	else
		cout << "栈空,取栈顶元素失败!" << endl;
}

//4、判空
void StackEmpty(SqStack S)
{
	if (S.top == S.base)
		cout << "栈空!" << endl;
	else
		cout << "栈未空!" << endl;
}

//5、求长
void StackLength(SqStack S)
{
	cout << "顺序栈的长度为:" << S.top - S.base << endl;
}

//6、清空
void ClearStack(SqStack &S)
{
	if (S.base)
		S.top = S.base;
}

//7、销毁
void DestoryStack(SqStack& S)
{
	if (S.base)
	{
		delete[]S.base;
		S.stacksize = 0;
		S.top = S.base = NULL;
	}
}

//8、打印
void PrintStack(SqStack S)
{
	SElemType* p = S.base;
	for (int i = 1; i <= S.top - S.base; i++)
		cout << "第" << i << "个元素为:" << *p++ << endl;
}

//菜单
void menu()
{
	cout << "***************************************************************************" << endl;
	cout << "***********************************1、入栈*********************************" << endl;
	cout << "***********************************2、出栈*********************************" << endl;
	cout << "***********************************3、取值*********************************" << endl;
	cout << "***********************************4、判空*********************************" << endl;
	cout << "***********************************5、求长*********************************" << endl;
	cout << "***********************************6、清空*********************************" << endl;
	cout << "***********************************7、销毁*********************************" << endl;
	cout << "***********************************8、打印*********************************" << endl;
	cout << "***********************************0、退出*********************************" << endl;
	cout << "***************************************************************************" << endl;
}

int main()
{
	SqStack S;
	int select;
	InitStack(S);
	while (1)
	{
		system("CLS");//清屏操作
		menu();
		cout << "请输入菜单序号:" << endl;
		cin >> select;
		switch (select)
		{
		case 1://入栈
			PushSqStack(S);
			system("pause");//按任意键继续
			break;
		case 2://出栈
			PopSqStack(S);
			system("pause");
			break;
		case 3://取栈顶元素
			GetTopSqStack(S);
			system("pause");
			break;
		case 4://判定栈是否为空
			StackEmpty(S);
			system("pause");
			break;
		case 5://计算栈的长度
			StackLength(S);
			system("pause");
			break;
		case 6://清空栈
			ClearStack(S);
			system("pause");
			break;
		case 7://销毁栈,销毁后会自动退出
			DestoryStack(S);
			system("pause");
			return 0;
			break;
		case 8://从栈底到栈顶遍历栈并打印
			PrintStack(S);
			system("pause");
			break;
		case 0:
			cout << "欢迎下次使用!" << endl;//退出
			system("pause");
			return 0;
			break;
		default:
			cout << "菜单序号输入有误!" << endl;
			system("pause");
			break;
		}
	}
	system("pause");
	return 0;
}

参考资料:
《数据结构》(C语言版)严蔚敏
 数据结构与算法基础(青岛大学-王卓)_哔哩哔哩_bilibili

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511959.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号