#include <iostream>
using namespace std;
#define MAXSIZE 100 //链式栈存储空间初始分配大小
#define OK 1 //链栈通常用单链表表示,节点结构与单链表相同。
#define ERROR 0
#define OVERFLOW -1
typedef struct StackNode //链栈结构
{
int data; //节点数据
struct StackNode *next; //节点指针,指向下一个节点
}StackNode,*LinkStack;
//初始化,构造一个空栈
int InitStack(LinkStack &s)
{
s=NULL; //栈顶指针置空
return 0;
}
//入栈操作
int PushStack(LinkStack &s,int e)
{
LinkStack p = new StackNode; //生成新节点
p->data = e; //将新节点数据域置为e
p->next=s; //将新节点插入栈顶
s=p; //修改栈顶指针为p
return 0;
}
//出栈操作
int PopStack(LinkStack &s)
{
LinkStack p = new StackNode;
if(s==NULL) //栈空
return -1;
p = s; //用p临时保存栈顶空间,以备释放
s = s->next; //修改栈顶指针
delete p; //释放原栈顶元素的空间
return 0;
}
//取栈顶元素
int GetTop(LinkStack s)
{
if(s!=NULL) //栈非空
return s->data; //栈顶指针不变,返回栈顶元素的值
}
//输出栈
void printstack(LinkStack s)
{
while(s!=NULL) //栈非空
{
cout << GetTop(s) << " ";
s=s->next; //不要写成popstack(s),不然输出一次后就栈就空了,没法第二次输出。
}
cout << endl;
}
int main()
{
LinkStack s;
InitStack(s);
for (int i = 0; i < 10; ++i)
{
PushStack(s, i);
}
int a, b;
cout << "1--print,2--pop,3--push,0--exit\n";
for(int i = 0; i < 4; ++i)
{
cin >> a;
if (a == 1)
{
printstack(s);
}
else if (a == 2)
{
cout << "元栈为:";
printstack(s);
PopStack(s);
cout << "pop后栈为:";
printstack(s);
}
else if (a == 3)
{
cout << "元栈为:";
printstack(s);
cout << "请输入要插入的数:";
cin >> b;
PushStack(s, b);
cout << "插入后栈为:";
printstack(s);
}
else if (a == 0)
{
return 0;
}
}
return 0;
}
数据结构期末复习(に)--链式栈的定义及使用
最新推荐文章于 2022-12-01 13:37:20 发布