• C++链式队列


    practice1.h

    #ifndef PRACTICE1_H_INCLUDED
    #define PRACTICE1_H_INCLUDED
    #include<iostream>
    
    template <class T>
    class Queue{
    public:
        Queue();//构造函数
        ~Queue();//析构函数
        bool isEmpty() const;//判断是否为空
        const T& getFront() const;//得到队首数据不删除
        void enqueue(const T& x);//进队列
        T dequeue();//删除队首数据 且得到队首数据
        void makeEmpty();//清空队列
    
    private:
    
        struct ListNode//结构体嵌套 也可以用友元类
        {
            T element;//数据域
            ListNode *next;//指针域
            ListNode(const T & theElement,ListNode *n=0)//构造函数
            :element(theElement),next(n) {}
    
        };
        ListNode *front;//对头指针
        ListNode *back;//队尾指针
    };
    template<class T>
    Queue<T>::Queue()
    {
        front=0;
        back=0;
    }
    template<class T>
    Queue<T>::~Queue()
    {
       makeEmpty();
    
    }
    template<class T>
    void Queue<T>::makeEmpty()
    {
      while(!isEmpty())
    
        dequeue();
    
    }
    template<class T>
    bool Queue<T>::isEmpty()const
    {
    
        return front==0;
    }
    template <class T>
    const T& Queue<T>::getFront() const
    {
    
        if(isEmpty())
        {
            throw "queue is empty";
        }
        return  front->element;
    }
    
    template<class T>
    void Queue<T> ::enqueue(const T & x)
    {
    
        if(isEmpty())
            back=front=new ListNode(x);
        else
            back=back->next=new ListNode(x);
    
    }
    
    template<class T>
    T  Queue<T>::dequeue()
    {
    
        T frontItem=getFront();
        ListNode *old=front;
        front=front->next;
        delete old;
        std::cout<<frontItem<<std::endl;
    }
    #endif // PRACTICE1_H_INCLUDED

    practice2.cpp

    #ifndef PRACTICE1_H_INCLUDED
    #define PRACTICE1_H_INCLUDED
    #include<iostream>
    
    template <class T>
    class Queue{
    public:
        Queue();//构造函数
        ~Queue();//析构函数
        bool isEmpty() const;//判断是否为空
        const T& getFront() const;//得到队首数据不删除
        void enqueue(const T& x);//进队列
        T dequeue();//删除队首数据 且得到队首数据
        void makeEmpty();//清空队列
    
    private:
    
        struct ListNode//结构体嵌套 也可以用友元类
        {
            T element;//数据域
            ListNode *next;//指针域
            ListNode(const T & theElement,ListNode *n=0)//构造函数
            :element(theElement),next(n) {}
    
        };
        ListNode *front;//对头指针
        ListNode *back;//队尾指针
    };
    template<class T>
    Queue<T>::Queue()
    {
        front=0;
        back=0;
    }
    template<class T>
    Queue<T>::~Queue()
    {
       makeEmpty();
    
    }
    template<class T>
    void Queue<T>::makeEmpty()
    {
      while(!isEmpty())
    
        dequeue();
    
    }
    template<class T>
    bool Queue<T>::isEmpty()const
    {
    
        return front==0;
    }
    template <class T>
    const T& Queue<T>::getFront() const
    {
    
        if(isEmpty())
        {
            throw "queue is empty";
        }
        return  front->element;
    }
    
    template<class T>
    void Queue<T> ::enqueue(const T & x)
    {
    
        if(isEmpty())
            back=front=new ListNode(x);
        else
            back=back->next=new ListNode(x);
    
    }
    
    template<class T>
    T  Queue<T>::dequeue()
    {
    
        T frontItem=getFront();
        ListNode *old=front;
        front=front->next;
        delete old;
        std::cout<<frontItem<<std::endl;
    }
    #endif // PRACTICE1_H_INCLUDED
  • 相关阅读:
    记录一次电话面试
    记录一次git合并
    HTML通用属性与常见标签
    位运算的应用
    HTML总结
    前端MVC
    常用软件
    docker常用命令
    composer install(update)时出现killed
    优化小技巧:该怎么识别百度蜘蛛呢
  • 原文地址:https://www.cnblogs.com/libin123/p/10420138.html
Copyright © 2020-2023  润新知