堆栈的链式存储结构
源代码:
#include<iostream>
#include<malloc.h>
using namespace std;
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}node,*linklist;
//链接堆栈初始化
void init(linklist &top)
{
if(top==NULL)
cout<<"堆栈初始化成功"<<endl;
else
cout<<"堆栈初始化失败"<<endl;
}
//测试链接堆栈是否为空
void empty(linklist &top)
{
if(top==NULL)
cout<<"堆栈为空!"<<endl;
else
cout<<"堆栈非空!"<<endl;
}
//链接堆栈的插入
void push(linklist &top)
{
elemtype item;
linklist p;
while(cin>>item)
{
if(item==-1)
break;
else
{
p->data = item;
p->next = top;
top = p;
cout<<p->data<<" ";
}
}
cout<<endl;
}
//取当前栈顶的元素
void gettop(linklist top)
{
elemtype item;
if(top==NULL)
cout<<"堆栈为空!"<<endl;
else
{
item = top->data;
cout<<"栈顶元素为:"<<item<<endl;
}
}
void pop(linklist &top)
{
elemtype item;
linklist p;
if(top==NULL)
cout<<"堆栈为空!"<<endl;
else
{
p = top;
item = p->data;
top = top->next;
free(p);
cout<<item<<endl;
}
}
int main()
{
linklist top = NULL;
//链接堆栈初始化
cout<<"链接堆栈初始化!"<<endl;
init(top);
//测试链接堆栈是否为空
cout<<endl<<"测试堆栈是否为空!"<<endl;
empty(top);
//链接堆栈的插入
cout<<endl<<"堆栈的插入,以-1为插入结束标志!"<<endl<<"插入元素为:";
push(top);
//取当前栈顶的元素
cout<<endl<<"取当前栈顶的元素!"<<endl;
gettop(top);
//链接堆栈的删除
cout<<endl<<"链接堆栈的删除!"<<endl;
pop(top);
empty(top);
return 0;
}
运行结果: