C++数据结构 12链式栈

使用链表做的堆栈

先进后出

栈的主要三个操作

  1. Push
  2. Pop
  3. Top
  4. #ifndef __LinkStack_H__
    #define __LinkStack_H__
    #include <iostream>
    
    template <class T> class LinkStack;
    
    
    template <class T>
    class LinkNode
    {
    friend class LinkStack<T>;   //有元函数
    private:
        LinkNode(const T &thedata,LinkNode * n=0):data(thedata),link(n){}
        T data;               //节点数据
        LinkNode<T> *link;   //节点指针 指向下一个
    };
    
    template <class T>
    class LinkStack
    {
    private:
        LinkNode<T> *top;
    public:
          LinkStack():top(0){}           //构造函数
          ~LinkStack(){MakeEmpty();}   //析构函数
          bool IsEmpty() const;        //查看是否空
          void Push(const T& e);       //压栈
          void Pop();
          T& Top()const;      //返回栈顶的数据
          void MakeEmpty();
    
    };
    
    template<class T>
    void LinkStack<T>::MakeEmpty()
    {
      while(!(this->IsEmpty()))
            Pop();
    }
    
    template <class T>
    bool LinkStack<T>::IsEmpty()const
    {
        return top==0;
    }
    
    template<class T>
    void LinkStack<T>::Push(const T&e)
    {
       top=new LinkNode<T>(e,top);   //放入数据 ,并且top指向放入数据的那个数
    }
    
    template<class T>
    T& LinkStack<T>::Top() const  //查看栈顶的数据
    {
       if(this->IsEmpty())
            throw "Stack is Empty";
       return top->data;      //返回数据
    }
    template<class T>
    void LinkStack<T>::Pop()
    {
        if(this->IsEmpty())
            throw "Stack is Empty can not delete";
        LinkNode<T> *p=top;    //定义一个指针 保存top
        top=top->link;   //移动一个节点
        delete p;
    }
    
    
    #endif // __LinkStack_H__
    
    #include <iostream>
    #include "LinkStack.h"
    using namespace std;
    
    int main()
    {
        LinkStack<int> p;
    
    
        p.Push(10);
          cout<<p.Top()<<endl;
        p.Push(12);
          cout<<p.Top()<<endl;
        p.Push(13);
      //  cout << "Hello world!" << endl;
        cout<<p.Top()<<endl;
        p.Pop();
          cout<<p.Top()<<endl;
              p.Pop();
          cout<<p.Top()<<endl;
        return 0;
    }
    

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值