顺序栈和链栈的代码


顺序栈的代码


前言

以下是顺序栈和链栈的代码,主要以c++写的,C语言的类似;这是基于上一篇文章后写的代码。cout类似于C的printf,cin类似于scanf;


顺序栈


/***************************顺序栈****************************************/
#include "iostream"
using namespace std;
#define maxsize 100
typedef struct {
	int* base;
	int* top;
	int stacksize;//栈的可用最大容量
}sqstack;
sqstack s;
//顺序栈的初始化
sqstack initstack(sqstack &s)
{
	s.base = new int[100];
	if (!s.base)
	{
		cout << " 初始化失败" << endl;
	}
	s.top = s.base;
	s.stacksize = maxsize;
	return s;
}
//判断栈是否为空
void stackempty(sqstack &s)
{
	if (s.top == s.base)
		cout << "栈为空" << endl;
	else
		cout << "栈不为空" << endl;
}
//求顺序栈的长度
void  stacklength(sqstack &s)
{
	cout<<"栈的长度为 " << s.top - s.base << endl;
}
//清空顺序栈
void clearstack(sqstack &s)
{
	if (s.base)
		s.top = s.base;
}
//销毁顺序栈
void destrystack(sqstack &s)
{
	if (s.base)
	{
		delete s.base;
		s.stacksize = 0;
		s.base = s.top = NULL;
	}
}
//入栈
void   push(sqstack &s)
{
	int e,n;
	cout << "请输入你要将多少个元素入栈" << endl;
	cin >> n;
	for (int i = 1; i<=n; i++)
	{
		cout << "请输入元素的值" << endl;
		cin >> e;
		if (s.top - s.base ==maxsize)//栈满
		{
			cout << "栈已满无法执行此功能" << endl;
			return ;
		}
			
		*s.top++ = e;//*s.top=e;s.top++;
	}
}
//顺序栈出栈
void pop(sqstack &s)
{
	int e;
	if (s.top == s.base)//等价于 if(stackempty(s));
		cout << "已无元素出栈失败" << endl;
	e = *--s.top;//--s.top;e=*s.top;
}
//取栈顶元素
void getstack(sqstack &s)
{
	if (s.base != s.top)
		cout << *--s.top << endl;
}
//遍历输出栈
void printstack(sqstack &s)
{
	cout << "从栈底开始:"<<endl;
	int* p = s.base;
	while (p != s.top)
	{
		cout << *p << "  ";
		p++;
	}
	cout << endl;
	/*cout << "按出栈:" << endl;
	while (s.top != s.base)
	{
		cout<<*(--s.top)<<"  ";
	}
		cout << endl;*/
}
void meau()
{
	cout << "********1、判断栈是否为空       2、栈的长度*********" << endl;
	cout << "********3、清空顺序栈           4、销毁顺序栈*********" << endl;
	cout << "********5、入栈                 6、出栈*********" << endl;
	cout << "********7、输出                 8、退出*********" << endl;
}
int main()
{
	initstack(s);
	int choice;
	while (1)
	{
		meau();
		cout << "输入菜单号" << endl;
		cin >> choice;
		if (choice == 8)
			break;
		switch (choice)
		{
		case 1:stackempty(s); break;
		case 2:stacklength(s); break;
		case 3:clearstack(s); break;
		case 4:destrystack(s); break;
		case 5:push(s); break;
		case 6:pop(s); break;
		case 7:printstack(s); break;
		default:cout << "输入错误" << endl; break;
		}
	}
	return 0;
}

以下是运行的结果

********1、判断栈是否为空       2、栈的长度*********
********3、清空顺序栈           4、销毁顺序栈*********
********5、入栈                 6、出栈*********
********7、输出                 8、退出*********
输入菜单号
5
请输入你要将多少个元素入栈
6
请输入元素的值
1
请输入元素的值
2
请输入元素的值
3
请输入元素的值
4
请输入元素的值
5
请输入元素的值
6
********1、判断栈是否为空       2、栈的长度*********
********3、清空顺序栈           4、销毁顺序栈*********
********5、入栈                 6、出栈*********
********7、输出                 8、退出*********
输入菜单号
7
从栈底开始:
1  2  3  4  5  6
********1、判断栈是否为空       2、栈的长度*********
********3、清空顺序栈           4、销毁顺序栈*********
********5、入栈                 6、出栈*********
********7、输出                 8、退出*********
输入菜单号
6
********1、判断栈是否为空       2、栈的长度*********
********3、清空顺序栈           4、销毁顺序栈*********
********5、入栈                 6、出栈*********
********7、输出                 8、退出*********
输入菜单号
7
从栈底开始:
1  2  3  4  5
********1、判断栈是否为空       2、栈的长度*********
********3、清空顺序栈           4、销毁顺序栈*********
********5、入栈                 6、出栈*********
********7、输出                 8、退出*********
输入菜单号
3
********1、判断栈是否为空       2、栈的长度*********
********3、清空顺序栈           4、销毁顺序栈*********
********5、入栈                 6、出栈*********
********7、输出                 8、退出*********
输入菜单号
4
********1、判断栈是否为空       2、栈的长度*********
********3、清空顺序栈           4、销毁顺序栈*********
********5、入栈                 6、出栈*********
********7、输出                 8、退出*********
输入菜单号
7
从栈底开始:

********1、判断栈是否为空       2、栈的长度*********
********3、清空顺序栈           4、销毁顺序栈*********
********5、入栈                 6、出栈*********
********7、输出                 8、退出*********
输入菜单号
8

D:\c++\1\x64\Debug\1.exe (进程 35784)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

下一篇文章是链栈的代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值