栈的链接存储——链栈

通常链栈用单链表表示,因此其结点结构与单链表的结点结构相同

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


代码:

#include

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;idata=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<data<<" ";
        s=s->next;
    }
    cout<next;
        delete p;
    }
}
int main()
{
    int a[5]={3,9,4,8,5};
    LinkedStack ls(a,5);
    ls.Push(1);
    ls.PrintStack();
    cout<


你可能感兴趣的:(数据结构)