我是靠谱客的博主 斯文项链,最近开发中收集的这篇文章主要介绍队列(数组描述),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

队列一个先进先出的线性表
(环形队列 逆时针)

#include<iostream>
#include"queue.h"
using namespace std;
template<class T>

class arrayQueue :public queue<T>
{
public:
    arrayQueue(int initialCapacity = 10);
    ~arrayQueue(){ delete[]queue; }
    bool empty()const { return queueFront == queueBack; }
    int size() const{ return (queueBack - queueFront + arrayLength) % arrayLength; }
    T & front()
    {
        if (queueFront == queueBack)
            cout << "the queue is Empty" << endl;
        return queue[(queueFront + 1) % arrayLength];
    }
    T & back()
    {
        if (queueBack == queueFront)
        {
            cout << "the queue is empty";
            //break;
        }
        return queue[queueBack];
    }
    void pop();
    void push(const T & theElement);
    //void addQueueLength(T *queue,int arrayLength);
private:
    int queueFront; //队首元素位置
    int queueBack; //队尾元素位置
    int arrayLength; //数组长度
    T *queue; //队列数组
};

template <class T>
arrayQueue<T>::arrayQueue(int initialCapacity)
{
    arrayLength = initialCapacity;
    queueBack = 0;
    queueFront = 0;
    queue = new T[arrayLength];
}

template<class T>
void arrayQueue<T>::pop()
{
    if (queueFront == queueBack)
    {
        cout << "Empty" << endl;
    }
    queueFront = (queueFront + 1) % arrayLength;
    queue[queueFront].~T();

}
template<class T>
void arrayQueue<T>::push(const T & theElement)
{
    if ((queueBack + 1) % arrayLength==queueFront)
    {
        int start = (queueFront + 1) % arrayLength;
        T *newQueue = new T[2 * arrayLength];
        if (start < 2)
        {//没有形成环型
            copy(queue + start, queue + start + arrayLength - 1, newQueue);
        }
        else
        {//队列成环形
            copy(queue + start, queue + arrayLength, newQueue);
            copy(queue, queue + queueBack, newQueue + arrayLength - start);
        }
        //设置新队列的首和尾元素
        queueFront = 2 * arrayLength - 1;
        queueBack = arrayLength - 2;
        arrayLength *= 2;
        delete[] queue;
        queue = newQueue;
    }
    queueBack = (queueBack + 1) % arrayLength;
    queue[queueBack] = theElement;
}

//template<class T>
//void arrayQueue<T>::addQueueLength(T *queue, int arrayLength)
//{
//  
//}

最后

以上就是斯文项链为你收集整理的队列(数组描述)的全部内容,希望文章能够帮你解决队列(数组描述)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部