Queue--C++模板类

来源:互联网 发布:淘宝应用开发 编辑:程序博客网 时间:2024/06/16 16:24
#ifndef _QUEUE_H_#define _QUEUE_H_//链表实现namespace queue_in_list{    template<typename T>    class Queue    {    private:        struct Node        {            T data;            struct Node *next;        };        Node *front, *rear;    public:        void MakeNull();        bool Empty()const;        void EnQueue(T x);        void DeQueue();        T Front()const;    };    template<typename T>    T Queue<T>::Front()const    {        if (Empty())        {            cout << "EMPTY!\n";            return;        }        else            return front->next->data;    }    template<typename T>    void Queue<T>::DeQueue()    {        if (Empty())        {            cout << "EMPTY!\n";            return;        }        Node *p = front->next;        front->next = p->next;        if (p->next == NULL)            rear = front;        delete p;    }    template<typename T>    void Queue<T>::EnQueue(T x)    {        Node *p = new Node;        p->data = x;        p->next = NULL;        rear->next = p;        rear = p;    }    template<typename T>    bool Queue<T>::Empty()const    {        return front == rear;    }    template<typename T>    void Queue<T>::MakeNull()    {        front = new Node;        front->next = NULL;        rear = front;    }}//数组实现--循环队列namespace queue_in_array{    template<typename T>    class Queue    {    private:        enum { MAX = 100 };        T data[MAX];        int front;        int rear;    public:        void MakeNull();        bool Empty()const;        bool Full()const;        T Front()const;        void EnQueue(T x);        void DeQueue();    };    template<typename T>    void Queue<T>::DeQueue()    {        if (Empty())        {            cout << "EMPTY!\n";            return;        }        else            front = (front + 1) % MAX;    }    template<typename T>    void Queue<T>::EnQueue(T x)    {        if (Full())        {            cout << "FULL!\n";            return;        }        else        {            rear = (rear + 1) % MAX;            data[rear] = x;        }    }    template<typename T>    bool Queue<T>::Full()const    {        return (rear + 1) % MAX == front;    }    template<typename T>    T Queue<T>::Front()const    {        if (Empty())        {            cout << "EMPTY!\n";            return NULL;        }        else        {            int t = (front + 1) % MAX;            return data[t];        }    }    template <typename T>    bool Queue<T>::Empty()const    {        return front == rear;    }    template<typename T>    void Queue<T>::MakeNull()    {        front = rear = MAX - 1;    }}#endif
0 0
原创粉丝点击