双端队列(Deque),就是可以在同一个空间的两个口同时实现数据的插入和返回。
当只调用一端的插入和返回时,此时相当于栈;当调用一端的插入和另一端的返回时,此时能实现队列的功能。
以下是简略版的代码实现,和一段验证基本功能的代码。
#include<string>
#include<iomanip>
#include<algorithm>
#include <iostream>
#include <iomanip>
#include<stdio.h>
#include<cmath>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<stdio.h>
#include<ctime>
#include <graphics.h>
#include <conio.h>
using namespace std;
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
typedef struct
{
int Data[MaxSize];
int front;
int rear;
int size;
int capaticy;
}Deque;
class test005
{
public:
bool initiDeque(Deque& D)
{
D.capaticy = MaxSize;
D.front = 0;
D.rear = MaxSize - 1;
D.size = 0;
return true;
}
public:
bool insertFR(Deque& D, int x)
{
if (D.capaticy == D.size)
{
return false;
}
D.Data[D.front] = x;
D.front = (++D.front) % D.capaticy;
D.size++;
return true;
}
public:
bool insertRE(Deque& D, int x)
{
if (D.capaticy == D.size)
{
return false;
}
D.Data[D.rear] = x;
D.rear = (--D.rear + D.capaticy) % D.capaticy;
D.size++;
return true;
}
public:
int popFR(Deque& D)
{
int x = 0;
int f = D.front;
if (D.size == 0)
{
cout << "队列为空" << endl;
}
x = D.Data[(--f + D.capaticy) % D.capaticy];
D.front = (--D.front + D.capaticy) % D.capaticy;
--D.size;
return x;
}
public:
int popRE(Deque& D)
{
int x = 0;
int r = D.rear;
if (D.size == 0)
{
cout << "队列为空" << endl;
}
x = D.Data[(++r) % D.capaticy];
D.rear = (++D.rear) % D.capaticy;
--D.size;
return x;
}
public:
bool emptyDEQUE(Deque D)
{
if (D.size == 0)
{
return true;
}
return false;
}
};
int main()
{
Deque DE;
test005 T;
T.initiDeque(DE);
for (int i = 1;i < 10;i++)
{
T.insertRE(DE, i);
}
for (int i = 1;i < 10;i++)
{
cout << T.popRE(DE);
}
return 0;
}