概述
队列一个先进先出的线性表
(环形队列 逆时针)
#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)
//{
//
//}
最后
以上就是斯文项链为你收集整理的队列(数组描述)的全部内容,希望文章能够帮你解决队列(数组描述)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复