算法导论chapter10双端队列的实现
看起来比较麻烦,不过我写的实现比较简单,估计还有很多问题,哪位看出来了,帮忙指出来啊!3Q!
#include<iostream> using namespace std; const int MAX = 1000; struct my_deuqe { int data[MAX]; int head1, tail1; int head2,tail2; }; bool empty(my_deuqe q) { return q.head1 == q.tail1 && q.head2 == q.tail2; } void Lenque(my_deuqe &q, int value) { if(q.tail1 == q.tail2) { cerr << "The deque is overflow\n"; exit(1); } q.data[q.tail1] = value; q.tail1 = (q.tail1 + 1) % MAX; } void Renque(my_deuqe &q, int value) { if(q.tail2 == q.tail1) { cerr << "The deque is overflow\n"; exit(1); } q.data[q.tail2] = value; q.tail2 = (q.tail2 - 1) % MAX; } int Ldeuque(my_deuqe &q) { if(q.head1 == q.tail1) { cerr << "The left is empty"; exit(1); } int temp = q.data[q.head1]; q.head1++; return temp; } int Rdeuque(my_deuqe &q) { if(q.head2 == q.tail2) { cerr << "The left is empty"; exit(1); } int temp = q.data[q.head2]; q.head2--; return temp; } my_deuqe Init() { my_deuqe q; q.head1 = q.tail1 = 0; q.head2 = q.tail2 = MAX - 1; return q; } int main() { my_deuqe q = Init(); Lenque(q,10); cout << Ldeuque(q) << endl; }