C++数据结构之链式栈

本文介绍了C++中链式栈的概念,它基于链表实现,遵循先进后出的原则。讨论了Push、Pop和Top等操作,Push是从下向上存入数据,Pop则是从上向下删除数据。
摘要由CSDN通过智能技术生成

1.链式栈:用链表做的堆栈
先进后出
Pop,Push,Top
2.栈:是限定仅在表尾进行插入和删除操作的线性表
在这里插入图片描述
链式栈:push,从下向上存入数据,pop从上向下删除数据


```cpp
#ifndef LINKEDSTACK_H_INCLUDED
#define LINKEDSTACK_H_INCLUDED

template <class T>
class LinkedStack;

template <class T>
class ChainNode//节点
{
    friend class LinkedStack<T>;
private:
    ChainNode(const T& theDate,ChainNode *n=0):data(theDate),next(n){}
    T data;
    ChainNode<T> *next;
};

template <class T>
class LinkedStack//链式栈
{
public:
    LinkedStack():top(0) {}
    ~LinkedStack(){MakeEmpty();}
    bool IsEmpty() const;
    T& Top() const;
    void Push(const T& e);
    void Pop();//从栈顶删除数据
    void MakeEmpty();

private:
    ChainNode<T> *top;//栈顶

};

template <class T>
bool LinkedStack<T>::IsEmpty()const
{
    return top==0;
}

template <class T>
void LinkedStack<T>::Push(const T&e)
{
    top = new ChainNode<T>(e,top);//top永远指向新放进来的节点
}

template <class T>
T& LinkedStack<T>::Top() const//返回栈顶数据
{
    if(this->IsEmpty())
        throw "Stack is empty";
    return top->data;
}

template <class T>
void LinkedStack<T>::Pop()
{
    if(this->IsEmpty())
        throw "Stack is empty";
    ChainNode<T> *delNode = top;
    top = top->next;
    delete delNode;
}

template <class T>
void LinkedStack<T>::MakeEmpty()
{
    while (!IsEmpty())
        Pop();
}
#endif // LINKEDSTACK_H_INCLUDED


```cpp
#include <iostream>
#include "LinkedStack.h"
using namespace std;


//链式栈:先进后出push,pop,Top
int main()
{
    LinkedStack<int> s;
    s.Push(10);
    cout << s.Top()<<endl;
    s.Push(20);
    cout << s.Top()<<endl;
    s.Push(30);
    cout << s.Top()<<endl;
    s.Push(40);
    cout << s.Top()<<endl;

    s.Pop();
    cout << s.Top()<<endl;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值