C++ 实现队列(链式)

#pragma once
#include "stdio.h"
namespace SF 
{
    template
    struct  QueueNode
    {
        T data;
        QueueNode *next;

        QueueNode() 
        {
            this->next = nullptr;
        }
    };
    //链队列
    template
    class Queue
    {
    public:
        Queue();
        ~Queue();
        void Enqueue(T val);
        QueueNode *Dequeue();
        int Size() { return this->count; };
        void Show();
        void Release() { this->ReleaseQueue(head); };
        bool IsEmtpy() { return this->count > 0; };
    private:
        int count;
        QueueNode *head;
        QueueNode *tail;
        void ReleaseQueue(QueueNode *node);
    };

    template
    Queue::Queue() 
    {
        this->count = 0;
        this->head = new QueueNode();
        this->tail = this->head;
    }

    template
    Queue::~Queue()
    {
        Release();
    }

    template
    void Queue::Enqueue(T val)
    {
        QueueNode *node = new QueueNode ();
        node->data = val;
        //尾巴进队
        if (!head->next) 
        {
            head->next = node;
            tail = node;
        }
        else
        {
            tail->next = node;
            tail = node;
        }
        this->count++;
    }

    template
    QueueNode* Queue::Dequeue()
    {
        //头部出队
        QueueNode *node = head->next;
        if (node)
        {
            head->next = node->next;
            this->count--;
        }
        return node;  //这里要返回就不使用delete 了  外部使用完毕需要释放
    }

    template
    void Queue::Show() 
    {
        this->tail = this->head->next;
        while (tail)
        {
            printf("%i\n", tail->data);
            tail = tail->next;
        }
    }

    template
    void Queue::ReleaseQueue(QueueNode *node) 
    {
        if (node) 
        {
            ReleaseQueue(node->next);
            delete node;
        }
    }






}



你可能感兴趣的:(C++ 实现队列(链式))