zoukankan      html  css  js  c++  java
  • 通过链表实现栈的基本操作

    要求:

    利用链表实现栈的基本操作。

    代码:

    /************************************************************************/
    /* header.h                                                                     */
    /************************************************************************/
    #ifndef _STACK
    #define _STACK
    #include <iostream>
    using namespace std;
    
    //链表节点类
    template <class T>
    class Node
    {
    public:
        T data;
        Node <T> *next;
    
    };
    //栈的类声明
    template <class T>
    class myStack
    {
    public:
        myStack();
        ~myStack();
        T pop();
        T topNode();
        void push(const T&);
        bool isEmpty();//判断栈是不是空
    private:
        Node<T> *top; //栈顶指针    
    };
    //构造函数
    template <class T>
    myStack<T>::myStack()
    {
        top = NULL;
    }
    //析构函数
    template <class T>
    myStack<T>::~myStack()
    {
        //释放申请的内存,逐个释放内存
        while(top)
        {
            Node <T> *p;
            p = top;
            top = top->next;
            delete p;
        }
    }
    //判断栈是不是空
    template <class T>
    bool myStack<T>::isEmpty()
    {
        if(top)
            return false;
        return true;
    }
    //出栈
    template <class T>
    T myStack<T>::pop()
    {
        if(!isEmpty())
        {
            T tmp = top->data;
            Node<T> *p = top;
            top = top->next;
            delete p;
            return tmp;
        }
        else
        {
            cout << "myStack is empty!
    ";
    
        }
    }
    //入栈
    template <class T>
    void myStack<T>::push(const T & a)
    {
        //申请内存,存储新入栈节点
        Node<T> *p = new Node <T>;
    
        p->next = top;
        p->data = a;
        top = p;
    }
    //获取栈顶元素
    template <class T>
    T myStack<T>::topNode()
    {
        if(!isEmpty())
        {
            T tmp = top->data;
            return tmp;
        }
        else
        {
            cout << "myStack is empty!
    ";
            exit(0);
    
        }
    }
    #endif
    
    /************************************************************************/
    /*test.cpp                                                                      */
    /************************************************************************/
    #include "header.h"
    #include <iostream>
    using namespace std;
    int main()
    {
        myStack<int> myS;
        myS.push(12);
        cout << myS.top()<<endl;
        myS.pop();
        
    
        return 0;
    }
  • 相关阅读:
    osg 自定义图元
    osg model
    Qt 获取键盘输入
    TensorFlow Object Detection API —— 测试自己的模型
    labelimg data
    Qt 自定义信号SIGNAL
    qt ui
    QPixmap QImage 相互转化
    QString std::string 相互转 含中文
    ubuntu 安装百度云客户端
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/4824573.html
Copyright © 2011-2022 走看看