要理解循环双端队列,必须将这个名词分开来理解。
首先是循环队列,循环对列的top指针指向第一个插入队列的元素,rear指针指向后面插入的元素。并且为了避免“假溢出”,top指针一般指向当前元素的下一个元素,而rear指针则指向当前插入的元素。
然后是双端队列,双端队列是在队列的基础之上,头尾都可以进行操作的线性表,也就是说可以在头尾进行删除和插入操作。
最后再把这两个概念结合起来,你就能理解了。
下面是实现一个循环双端队列的代码:
// DoubleQueue.cpp : 定义控制台应用程序的入口点。
//
//因为循环队列为了避免出现“假溢出”所以,top指针总是指向一个空元素(即:当前位置的前一个位置),而rear指向当前位置。
#include "stdafx.h"
#include <iostream>
#include <assert.h>
#include <iomanip>
using namespace std;
template <typename T>
class DoubleQueue
{
private:
int end1,end2; //end1,end2为两个端点,end1相当于队列中的rear,end2相当于top。
T *data; //队列的值
int size;//队列的大小
public:
DoubleQueue(int sz = 10);
~DoubleQueue(){delete[] data;}
void EnQueue(T item,int end); //从队列中插入元素
void DelQueue(int end); //从队列中删除元素
bool IsEmpty(){ return end1 == end2;}
bool IsFul