天天看點

C++隊列模闆實作

邏輯

隊列一種先進先出的資料結構

隻能在一端進行插入,在另一端進行删除

代碼

template <typename T>
class Queue
{
private:
    class Node
    {
    public:
        T item;
        Node* next;
        Node(){}
        Node(T item, Node* next) {
            this->item = item;
            this->next = next;
        }
        Node(Node& node){
            this->item = node.item;
            this->next = node.next;
        }
    };
    Node* head;
    Node* last;
    int num;
public:
    Queue(){
        head = new Node(0,nullptr);
        last = nullptr;
        num = 0;
    }
    ~Queue(){
        while(!isempty()){
            dequeue();
        }
        delete head;
    }
    //判斷隊列是否為空
    bool isempty(){
        if(num == 0) return true;
        else return false;
    }
    //擷取隊列中元素的個數
    int size(){
        return num;
    }
    //進隊列
    void enqueue(T t){
        //如果目前隊列為空
        if(last == nullptr){
            last = new Node(t, nullptr);
            head->next = last;
        }
        else{
            Node* oldlast = last;
            last = new Node(t, nullptr);
            oldlast->next = last;
        }
        num++;
    }
    //出隊列
    T dequeue(){
        if (isempty()){
            return NULL;
        }
        //将head結點的下一個結點删除
        Node* oldNode = head->next;
        T items = oldNode->item;
        head->next = oldNode->next;
        delete oldNode;
        num--;
        //如果删除的是最後一個元素,則将last指針置空
        if(isempty()){
            last = nullptr;
        }
        return items;
    }
};
           

繼續閱讀