ƵµÀÀ¸Ä¿
Ê×Ò³ > ³ÌÐò¿ª·¢ > Èí¼þ¿ª·¢ > C++ > ÕýÎÄ
¶ÓÁеÄÓ¦ÓãºË«¶Ë¶ÓÁÐ
2014-06-18 10:59:33      ¸öÆÀÂÛ    À´Ô´£º¶ÓÁеÄÓ¦ÓãºË«¶Ë¶ÓÁР 
Êղؠ  ÎÒҪͶ¸å

Ë«¶Ë¶ÓÁÐ(Deque:double ended queue)¾ÍÊÇÒ»¸öÁ½¶Ë¶¼ÊǽáβµÄ¶ÓÁС£¶ÓÁеÄÿһ¶Ë¶¼¿ÉÒÔ²åÈëÊý¾ÝÏîºÍÒÆ³ýÊý¾ÝÏî¡£Ïà¶ÔÓÚÆÕͨ¶ÓÁУ¬Ë«¶Ë¶ÓÁеÄÈë¶ÓºÍ³ö¶Ó²Ù×÷ÔÚÁ½¶Ë¶¼¿É½øÐС£

Ë«¶Ë¶ÓÁеÄʾÒâͼ£º

\

left£º×ó¶Ë right£ºÓÒ¶Ë

ÕâÀïÎÒÃÇʹÓÃ×î³£ÓõÄ˳Ðò½á¹¹À´´æ´¢Ë«¶Ë¶ÓÁУ¬ÎªÁ˽ÚÊ¡¿Õ¼ä£¬°ÑËüÊ×βÏàÁ¬£¬¹¹³ÉÑ­»·¶ÓÁС£²¢Çҹ涨leftÖ¸Ïò×ó¶ËµÄµÚÒ»¸öÔªËØ£¬rightÖ¸ÏòÓҶ˵ÄÏÂÒ»¸öλÖá£ÄÇô¶Ó¿ÕµÄÅжÏÔòÊÇleft==right£¬¶ÓÂúÊÇ(left-1+MAX)%MAX==right»òÕß(right-left+MAX)%MAX==MAX¡£<†·Ÿ"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+z+rPuM+4vdq/tLT6wuujujwvcD4KPHA+wOC2qNLlus3A4Mq1z9Y8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;">#include #include using namespace std; //¶ÓÁеÄ×î´ó´æ´¢¿Õ¼äΪMAX const int MAX = 10; typedef int ElemType; //Ë«¶Ë¶ÓÁÐÀà class Deque //double ended queue { private: int size; //¶ÓÁÐÖÐÔªËØ¸öÊý ElemType *base; int left, right; //0´ú±í×ó¶Ëleft£¬1´ú±íÓÒ¶Ëright public: //¹¹Ô캯Êý Deque(); //Îö¹¹ ~Deque() { delete[]base; } //»ñÈ¡´óС int getSize() { return size; } //¶Ó¿ÕÅÐ¶Ï bool empty() { return left == right; } //»òÕßsize==0 //¶ÓÂúÅÐ¶Ï bool full() { return (left - 1 + MAX) % MAX == right; } //»ñȡָ¶¨¶ËµÄÍ·ÔªËØ bool topAt(ElemType&, int); //ÔÚÖ¸¶¨¶Ë²åÈë(Èë¶Ó) bool pushAt(ElemType, int); //ÔÚÖ¸¶¨¶Ëɾ³ý(³ö¶Ó) bool popAt(int); //´ÓÖ¸¶¨¶Ë´òÓ¡¶ÓÁÐ void print(int); //Çë¿Õ¶ÓÁÐ void clear(); }; Deque::Deque() { base = new ElemType[MAX]; left = right = 0; size = 0; } bool Deque::topAt(ElemType& data, int end) { if (empty()) return false; if (end == 0) data = base[left]; else data = base[(right - 1 + MAX) % MAX]; return true; } bool Deque::pushAt(ElemType data, int end) { if (full()) return false; if (end == 0) { left = (left - 1 + MAX) % MAX; base[left] = data; } else { base[right] = data; right = (right + 1) % MAX; } return true; } bool Deque::popAt(int end) { if (empty()) return false; if (end == 0) left = (left + 1) % MAX; else right = (right - 1 + MAX) % MAX; return true; } void Deque::print(int end) { if (empty()) { cout << "¿Õ¶ÓÁУ¬ÎÞ·¨±éÀú£¡" << endl; return; } if (end == 0) { int i = left; while (i != right) { cout << setw(4) << base[i]; i = (i + 1) % MAX; } } else { int i = right; while (i != left) { i = (i - 1 + MAX) % MAX; cout << setw(4) << base[i]; } } cout << endl; } void Deque::clear() { left = right = 0; size = 0; }Ö÷º¯ÊýºÍÏà¹Ø·½·¨£º

void check(int& end)  //¶Ô¶ËºÅ½øÐмì²é
{
	while (cin >> end && !(end == 0 || end == 1))
	{
		cout << "¶ËºÅ²»¶Ô£¬ÖØÐÂÊäÈ룺";
	}
}
void input(Deque& deque)  //ÊäÈ뺯Êý
{
	int end;
	cout << "ÔÚÖ¸¶¨¶ËÈë¶Ó£¬0×ó¶Ë£¬1ÓÒ¶Ë£º";
	check(end);
	ElemType data;
	cout << "ÊäÈëÊý¾Ý£¬ÊäÈë0½áÊø" << endl;
	while (cin >> data && data)
	{
		deque.pushAt(data, end);
	}
}
void traverse(Deque& deque)   //´ÓÖ¸¶¨¶Ë±éÀú
{
	int end;
	cout << "´ÓÖ¸¶¨¶Ë±éÀú£º";
	check(end);
	deque.print(end);
}
int main()
{
	cout << "******Ë«¶Ë¶ÓÁÐÑÝÁ·******" << endl;
	Deque deque;
	cout << "н¨Ë«¶Ë¶ÓÁÐ" << endl;
	cout << "¶ÓÁÐÊÇ·ñΪ¿Õ£º";
	deque.empty() ? cout << "Yes!" << endl : cout << "No!" << endl;
	input(deque);
	traverse(deque);
	input(deque);
	traverse(deque);
	ElemType data;
	int end;
	cout << "»ñȡָ¶¨¶¨¶ËµÄÍ·ÔªËØ£º";
	check(end);
	deque.topAt(data, end) ? cout << data << endl : cout << "¶Ó¿Õ£¡" << endl;
	cout << "ɾ³ýÖ¸¶¨¶¨¶ËµÄÍ·ÔªËØ£º";
	check(end);
	deque.popAt(end) ? cout << "ɾ³ý³É¹¦" << endl : cout << "¶Ó¿Õ£¡" << endl;
	traverse(deque);
	cout << "Çå¿Õ¶ÓÁУ¬¶ÓÁÐÊÇ·ñΪ¿Õ£º";
	deque.clear();
	deque.empty() ? cout << "Yes!" << endl : cout << "No!" << endl;
	system("pause");
	return 0;
}

ÔËÐУº



ÈôÊÇÓÐËù°ïÖú£¬¶¥Ò»¸öŶ£¡

רÀ¸Ä¿Â¼£ºÊý¾Ý½á¹¹ÓëË㷨Ŀ¼



µã»÷¸´ÖÆÁ´½Ó ÓëºÃÓÑ·ÖÏí!»Ø±¾Õ¾Ê×Ò³
Ïà¹ØTAG±êÇ© ¶ÓÁÐ
ÉÏһƪ£ºC++Öд«Ëͺ¯ÊýÖ¸Õë
ÏÂһƪ£ºpoj 1201 Intervals£¨²î·ÖÔ¼Êø£©
Ïà¹ØÎÄÕÂ
ͼÎÄÍÆ¼ö
µã»÷ÅÅÐÐ

¹ØÓÚÎÒÃÇ | ÁªÏµÎÒÃÇ | ¹ã¸æ·þÎñ | Ͷ×ʺÏ×÷ | °æÈ¨ÉêÃ÷ | ÔÚÏß°ïÖú | ÍøÕ¾µØÍ¼ | ×÷Æ··¢²¼ | Vip¼¼ÊõÅàѵ | ¾Ù±¨ÖÐÐÄ

°æÈ¨ËùÓÐ: ºìºÚÁªÃË--ÖÂÁ¦ÓÚ×öʵÓõÄIT¼¼ÊõÑ§Ï°ÍøÕ¾