• 通过链表实现栈的基本操作


    要求:

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

    代码:

    /************************************************************************/
    /* 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;
    }
  • 相关阅读:
    一些数论公式
    一位ACMer过来人的心得
    hdu 2069 Coin Change (母函数)
    关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明
    upper_bound()与lower_bound()使用方法
    POJ 计算几何入门题目推荐
    图像识别C++读取bmp位图入门
    Centos7 上安装FastDFS
    java的IO包类分层结构
    ==和equels
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/4824573.html
Copyright © 2020-2023  润新知