算法导论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;
}

posted @ 2010-11-12 21:42  hailong  阅读(229)  评论(0编辑  收藏  举报