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;
    }
  • 相关阅读:
    Hibernate save, saveOrUpdate, persist, merge, update 区别
    Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目
    Neo4j批量插入(Batch Insertion)
    嵌入式(Embedded)Neo4j数据库访问方法
    Neo4j 查询已经创建的索引与约束
    Neo4j 两种索引Legacy Index与Schema Index区别
    spring data jpa hibernate jpa 三者之间的关系
    maven web project打包为war包,目录结构的变化
    创建一个maven web project
    Linux下部署solrCloud
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/4824573.html
Copyright © 2011-2022 走看看