您的位置:首页 > 其它

栈的链接存储——链栈

2016-05-16 23:46 267 查看
通常链栈用单链表表示,因此其结点结构与单链表的结点结构相同

因为只能在栈顶执行插入和删除操作,显然以单链表的头部做栈底是最方面的,而且没有必要像单链表那样为了运算方便附加一个头结点。

代码:

#include<iostream>

using namespace std;

#define null 0

struct Node
{
int data;
Node *next;
};

class LinkedStack
{
private:
Node *top;
int data[];
public:
LinkedStack(){top=null;}
LinkedStack(int a[],int n);
~LinkedStack(){}
void Push(int x);
int Pop();
int GetTop();
int Empty();
void PrintStack();
void Destroy();
};

LinkedStack::LinkedStack(int a[],int n)
{
top=null;
for(int i=0;i<n;i++)
{
Node *p=new Node;
p->data=a[i];
p->next=top;
top=p;
}
}
void LinkedStack::Push(int x)
{
Node *p=new Node;
p->data=x;
p->next=top;
top=p;
}
int LinkedStack::Pop()
{
if(top==null) throw "下溢";
int x=top->data;
Node *p=new Node;
p=top;
top=top->next;
delete p;
return x;
}
int LinkedStack::GetTop()
{
if(top==null) throw "下溢";
return top->data;
}
int LinkedStack::Empty()
{
if(top==null)
return 1;
else
return 0;
}
void LinkedStack::PrintStack()
{
Node *s=new Node;
s=top;
while(s!=null)
{
cout<<s->data<<" ";
s=s->next;
}
cout<<endl;
}
void LinkedStack::Destroy()
{
while(top!=null)
{
Node *p=new Node;
p=top;
top=top->next;
delete p;
}
}
int main()
{
int a[5]={3,9,4,8,5};
LinkedStack ls(a,5);
ls.Push(1);
ls.PrintStack();
cout<<ls.GetTop()<<endl;

ls.Push(2);
ls.PrintStack();
cout<<ls.GetTop()<<endl;

ls.Pop();
ls.PrintStack();
cout<<ls.Empty()<<endl;

ls.Pop();
ls.PrintStack();
cout<<ls.Empty()<<endl;

ls.Destroy();
cout<<ls.Empty()<<endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: