循环队列和以单链表的形式实现队列

来源:互联网 发布:淘宝卖家id 编辑:程序博客网 时间:2024/06/06 03:58

循环队列

template<class T,size_t N = 8>class queue{public:    queue()        :_rear(0)        , _front(0)        , _count(0)    {}    void push(const T data)    {        if (_count == N)            return;        _arr[_rear] = data;        _rear = (_rear + 1) % N;        ++_count;    }    void pop()    {        if (empty())            return;        _front = (_front + 1) % N;          --_count;    }    bool empty()    {        return _count == 0;    }    T GetFront()    {        return _arr[_front];    }    size_t size()    {        return _count;    }    void print()    {        if (!empty())        {            for (size_t i = 0; i < _count; ++i)            {                cout << _arr[i] << " ";            }            cout << endl;        }    }private:    T _rear;    T _front;    T _arr[N];    size_t _count;};int main(){    queue<int> q;    q.push(1);    q.push(2);    q.push(3);    q.print();    q.push(4);    q.push(5);    q.push(5);    q.push(5);    q.push(5);    q.push(5);    q.push(5);    q.print();    return 0;}

单链表的形式实现队列

template<class T>struct Node{public:    Node<T>(const T& data)        : pNext(NULL)        , elem(data)    {}    Node<T>* pNext;    T elem;};template<class T>class queue{public:    queue()        :_rear(NULL)        , _front(NULL)    {}    ~queue()    {        clear();    }    void push(const T data)    {        if (_rear == NULL && _front == NULL)        {            _rear = new Node<T>(data);            _front = _rear;        }        else        {            _rear->pNext = new Node<T>(data);            _rear = _rear->pNext;        }    }    void pop()    {        if (!empty())        {            if (_front == _rear)            {                delete _front;                _front = _rear = NULL;            }            else            {                Node<T>* pDel = _front;                _front = _front->pNext;                delete pDel;            }        }    }    bool empty()    {        return _front == NULL;    }    T GetFront()    {        return _front->elem;    }    T GetRear()    {        return _rear->elem;    }    int size()    {        Node<T>* pCur = _front;        int count = 0;        while (pCur != _rear)        {            ++count;            pCur = pCur->pNext;        }        return (++count);    }    void print()    {        Node<T>* pCur = _front;        while (pCur != _rear)        {            cout << pCur->elem << " ";            pCur = pCur->pNext;        }        cout << _rear->elem << endl;    }    void clear()    {        Node<T>* pCur = _front;        while (pCur != _rear)        {            Node<T>* pDel = pCur;            pCur = pCur->pNext;            delete pDel;                }        delete _rear;        _front = _rear = NULL;    }private:    Node<T>* _front;    Node<T>* _rear;};int main(){    queue<int> q;    q.push(1);    q.push(2);    q.push(3);    q.print();    q.push(4);    q.push(5);    q.push(5);    q.push(5);    q.push(5);    q.push(5);    q.push(5);    q.pop();    q.print();    cout << q.size() << endl;    cout << q.GetFront() << endl;    cout << q.GetRear() << endl;    q.clear();    return 0;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 五矿股票 五矿二十三 五矿二十三冶怎么样 五矿钢铁 五矿证券下载 五矿建设有限公司 阳煤五矿 五矿国际信托公司 五矿李世铭 五矿证券怎么样 五矿证券手机版下载 五矿23冶 五矿中学 五矿有色金属 600058股票 600058 第五人格许愿码大全 第五人格领取9999线索礼包码 2018第五人格免费领许愿码未用 第五人格许愿码免费领取 暴走大侠五个礼包兑换码 第五人格许愿码免费领取2019 第五人格愿望码免费领取 第五人格礼包码 第五人格兑换码 第五人格金皮许愿码 第五人格礼包码生成器2018 第五教堂抽奖兑换码 第五人格玫瑰手杖兑换码 第五人格兑换码大全 第五人格许愿码是多少 第五人格中的许愿码 第五人格往昔愿望码免费领取 第五人格许愿吗码怎么领 第五人格怎么获得许愿码 2019第五人格免费领许愿码未用 5码 中文字幕香蕉在线 中文字幕香蕉 暴走大侠礼包兑换码 新少林五祖