/*
双端队列
*/
#include <iostream>
using namespace std;
const int maxsize=100;
template<typename T>
class DouQueue
{
private:
T data[maxsize];
int front,rear;
public:
DouQueue();
~DouQueue();
void EnQueueHead(T x);
void EnQueueTail(T x);
T DeQueueHead();
T DeQueueTail();
T GetHead();
T GetTail();
int Empty();
};
template<typename T>
DouQueue<T>::DouQueue()
{
rear=front=maxsize-1;
}
template<typename T>
DouQueue<T>::~DouQueue()
{
}
template<typename T>
void DouQueue<T>::EnQueueHead(T x)
{
if((rear+1)%maxsize==front)throw "上溢";
data[front]=x;
front=(front-1)%maxsize;
}
template<typename T>
void DouQueue<T>::EnQueueTail(T x)
{
if((rear+1)%maxsize==front)throw "上溢";
rear=(rear+1)%maxsize;
data[rear]=x;
}
template<typename T>
T DouQueue<T>::DeQueueHead()
{
if(rear==front)throw "下溢";
front=(front+1)%maxsize;
return data[front];
}
template<typename T>
T DouQueue<T>::DeQueueTail()
{
if(rear==front)throw "下溢";
T x=data[rear];
rear=(rear-1)%maxsize;
return x;
}
template<typename T>
T DouQueue<T>::GetHead()
{
if(rear==front)throw "队列为空";
return data[(front+1)%maxsize];
}
template<typename T>
T DouQueue<T>::GetTail()
{
if(rear==front)throw "队列为空";
return data[rear];
}
template<typename T>
int DouQueue<T>::Empty()
{
if(rear==front)
return 1;
else
return 0;
}
int main()
{
DouQueue<int> L;
L.EnQueueHead(1);
L.EnQueueTail(2);
L.EnQueueHead(3);
L.EnQueueHead(4);
cout<<L.DeQueueHead()<<endl;
cout<<L.DeQueueHead()<<endl;
cout<<L.DeQueueHead()<<endl;
cout<<L.DeQueueHead()<<endl;
if(L.Empty())
cout<<"kong"<<endl;
else
cout<<"fei kong"<<endl;
L.EnQueueHead(6);
L.EnQueueTail(7);
cout<<L.GetHead()<<endl;
cout<<L.GetTail()<<endl;
if(L.Empty())
cout<<"kong"<<endl;
else
cout<<"fei kong"<<endl;
return 0;
}
C++ 数据结构——双端队列
最新推荐文章于 2021-09-20 16:41:39 发布