链栈的代码
前言
这个是基于上一篇文章数据结构后写的代码。
链栈的代码
/*************************************链栈***********************************************/
#include "iostream"
using namespace std;
typedef struct stacknode {
int data;
struct stacknode* next;
}stacknode,*linkstack;
linkstack s;
//栈的初始化
linkstack initstack(linkstack& s)
{
//构建一个空栈,栈顶指针置为空;
s = NULL;
return s;
}
//判断链栈是否为空
void stackempty(linkstack s)
{
if (s == NULL)
cout << "链栈为空" << endl;
else
cout << "链栈不为空" << endl;
}
//链栈的入栈
void push(linkstack& s)
{
cout << "请输入你要入栈的元素" << endl;
int e;
cin >> e;
linkstack p;
p = new stacknode;
p->data = e;//将新节点数据域置为e;
p->next = s;//将新节点插入栈顶
s = p; //修改栈顶指针;
}
//链栈的出栈
void pop(linkstack& s)
{
int e;
linkstack p;
if (s == NULL)
cout << "栈以为空无法出栈" << endl;
e = s->data;
p = s;
s = s->next;
delete p;
}
//取栈顶元素
void gettop(linkstack &s)
{
if (s != NULL)
cout << s->data << endl;
}
//创建栈
linkstack creatstack(linkstack &s)
{
cout << "请输入你要创建栈的元素个数" << endl;
int n;
cin >> n;
while (n > 0)
{
push(s);
n--;
}
return s;
}
//销毁栈
void destrystack(linkstack &s)
{
delete(s);
}
//遍历栈
void printstack(linkstack& s)
{
cout << "栈的元素为" << endl;
while (s != NULL)
{
cout << s->data << " ";
s = s->next;
}
cout << endl;
}
void meau()
{
cout << "********1、判断栈是否为空 2、入栈*********" << endl;
cout << "********3、出栈 4、取栈顶元素*********" << endl;
cout << "********5、销毁栈 6、遍历栈*********" << endl;
cout << "********7、退出 " << endl;
}
int main()
{
linkstack s;
initstack(s);
int choice;
cout << "创建栈" << endl;
creatstack(s);
while (1)
{
meau();
cout << "请输入菜单号" << endl;
cin >> choice;
if (choice == 7)
break;
switch (choice)
{
case 1:stackempty(s); break;
case 2: push( s); break;
case 3: pop(s); break;
case 4: gettop(s); break;
case 5: destrystack(s); break;
case 6: printstack(s); break;
default:cout << "输入错误" << endl; break;
}
}
return 0;
}
运行的结果
创建栈
请输入你要创建栈的元素个数
5
请输入你要入栈的元素
1
请输入你要入栈的元素
2
请输入你要入栈的元素
3
请输入你要入栈的元素
4
请输入你要入栈的元素
5
********1、判断栈是否为空 2、入栈*********
********3、出栈 4、取栈顶元素*********
********5、销毁栈 6、遍历栈*********
********7、退出
请输入菜单号
1
链栈不为空
********1、判断栈是否为空 2、入栈*********
********3、出栈 4、取栈顶元素*********
********5、销毁栈 6、遍历栈*********
********7、退出
请输入菜单号
2
请输入你要入栈的元素
8
********1、判断栈是否为空 2、入栈*********
********3、出栈 4、取栈顶元素*********
********5、销毁栈 6、遍历栈*********
********7、退出
请输入菜单号
4
8
********1、判断栈是否为空 2、入栈*********
********3、出栈 4、取栈顶元素*********
********5、销毁栈 6、遍历栈*********
********7、退出
请输入菜单号
6
栈的元素为
8 5 4 3 2 1
********1、判断栈是否为空 2、入栈*********
********3、出栈 4、取栈顶元素*********
********5、销毁栈 6、遍历栈*********
********7、退出
请输入菜单号
5
********1、判断栈是否为空 2、入栈*********
********3、出栈 4、取栈顶元素*********
********5、销毁栈 6、遍历栈*********
********7、退出
请输入菜单号
7
D:\c++\1\x64\Debug\1.exe (进程 23216)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
下一篇是关于队列的代码。