顺序栈的代码
前言
以下是顺序栈和链栈的代码,主要以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。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
下一篇文章是链栈的代码。