栈的链接存储——链栈

本文介绍了一种使用单链表实现链栈的方法,并提供了完整的C++代码示例。通过该方法,可以高效地进行栈顶元素的插入和删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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


代码:

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值