在上篇《队列的C++实现》中已经介绍了一种假溢出的解决方案:当数据出队时,将数据整体向前移动,这样就会不会出现假溢出。
另一种方案是:将数组看成循环的,这样的话,即使尾端数据已经塞满,但是由于结构是循环的,可以继续将队头的空位当作队头插入数据,从而解决假溢出。
如何判断队列是空还是满?有俩种方法:1.设置标志位,当插入数据之后遇到top==end,标志队列是满,flag=1;如果删除数据遇到top==end,标志队列是空,flag=0。
2.少用一个元素空间,令top,end都指向这个位置,只要判断end==top就可以知道队列是否为空,插入数据或者删除数据要忽略这个位置点,因为这个数据点不能存放数据。
本文采用的是第二种:少用一个空间。
头文件:
#ifndef QUEUE_H
#define QUEUE_H
//为了判断队列是满还是空,利用第一个位置当作起点,即只有size-1个数据位
//关键点在于top,end的设置和数据的输出
#include<iostream>
template<class T>
class queue
{
public:
queue()
{
top = 0;
end = 0;
size = 0;
que = nullptr;
length = 0;
}
queue(int s) :size(s)
{
que = new T[size];
length = 0;
}
~qu