通常链栈用单链表表示,因此其结点结构与单链表的结点结构相同。
因为只能在栈顶执行插入和删除操作,显然以单链表的头部做栈底是最方面的,而且没有必要像单链表那样为了运算方便附加一个头结点。
代码:
#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;
}