1. 程式人生 > >迴圈佇列的基礎操作(C++)

迴圈佇列的基礎操作(C++)

#include "iostream"
#include"LinkQueue.h"

using namespace std;

//===================佇列(先進先出)=============
/*只允許在隊尾進行插入操作,而在隊頭進行刪除操作的線性表*/

//==============迴圈佇列(頭尾相接)===========
/*佇列:陣列+兩個指標*/
const int MAXSIZE = 20;

struct SqQueue
{
	int val[MAXSIZE];
	int front;//頭指標
	int reat;//尾指標,若佇列不空,指向佇列尾元素的下一個位置
	struct SqQueue(int x) :front(x), reat(x){};
};

//判斷佇列長度
int QueueLength(const SqQueue *Q)
{
	return (Q->reat - Q->front + MAXSIZE) % MAXSIZE;
}

//佇列的遍歷
bool VisitQueue(const SqQueue *Q)
{
	if ((Q->reat + 1) % MAXSIZE == Q->front)
		return false;
	int i = Q->front;
	while (i != Q->reat)
	{
		cout << Q->val[i] << " ";
		i = (i + 1) % MAXSIZE;
	}
	cout << endl;
	return true;
}

//佇列的插入
bool QueueInsert(SqQueue *Q, int data)
{
	if ((Q->reat + 1) % MAXSIZE == Q->front)/* 佇列滿的判斷 */
	{
		cout << "滿隊!" << endl;
		return false;
	}
	else
	{
		Q->val[Q->reat] = data; /* 將data賦值給隊尾 */
		Q->reat = (Q->reat + 1) % MAXSIZE;/* rear指標向後移一位置,若到最後則轉到陣列頭部 */

		return true;
	}
}

//佇列的刪除
bool QueueDelete(SqQueue *Q)
{
	if ((Q->reat + 1) % MAXSIZE == Q->front)/* 佇列空的判斷 */
	{
		cout << "空隊" << endl;
		return false;
	}
	else
	{
		Q->front = (Q->front + 1) % MAXSIZE;/* front指標向後移一位置, 若到最後則轉到陣列頭部 */

		return true;
	}
}

//佇列清空
bool ClearQueue(SqQueue *Q)
{
	Q->front = Q->reat = 0;
	return true;
}

//判斷佇列是否為空
bool QueueEmpty(SqQueue *Q)
{
	if ((Q->reat + 1) % MAXSIZE == Q->front)
		return true;
	else
		return false;
}





int main()
{
	=========迴圈佇列=============
	SqQueue *Q = new SqQueue(0);
	int n;
	while (cin >> n)
		QueueInsert(Q, n);

	//QueueDelete(Q);
	VisitQueue(Q);


	system("pause");// 或者 getchar();

	return 0;
}