データ構造-キューの順番待ち

1290 ワード

キューは、テーブルの先端のみで削除操作が可能であり、テーブルの後端に挿入操作が行われる特殊な線形表であり、スタックと同様に、キューは、動作が制限された線形表である.挿入操作を行う端を列尾といい、削除操作を行う端をチームヘッドといいます.キューに要素がない場合は、空のキューと呼びます.キューのデータ要素をキュー要素と呼びます.列に列の要素を挿入することを入隊といい、列から列の要素を削除することを出隊といいます.キューは端のみに挿入され、他端で削除されるので、最初にキューに入る要素だけが最初にキューから削除されます.したがって、キューは先進先出(FIFO-first in first out)線形表とも呼ばれます.
順番待ち行列とは、一連の記憶手段を割り当ててキューに格納する要素を指し、2つのポインタfrontとrearを付設してそれぞれの列の先頭要素と列の最後の要素の位置を示します.
列の頭の針は列の頭の元素を指して、列の尾の針は列の尾の元素の次の位置を指します.
//       

#include "stdafx.cpp"

#define ElementType int 
#define MaxSize 50
typedef struct {
	ElementType data[MaxSize]; //       
	int front, rear; //         
	int count;//      
}SeQueue;

/*
      
*/
void InitQueue(SeQueue &q) {
	q.front = q.rear = 0;
	q.count = 0;
}
/*
        
count==0 || q.front == q.rear ==0
*/
bool QueueEmpty(SeQueue q) {
	if (q.count <= 0) {
		return true;
	}
	return false;
}

/*
    
1.        
2.     ,    +1
*/
bool EnQueue(SeQueue &q,ElementType e) {
	//      :   -   
	if (q.count >= MaxSize) {
		return false;
	}
	q.data[q.rear] = e;
	q.rear++;
	q.count++;
	return true;
}

/*
    
1.        
2.      ,    +1
*/
ElementType DeQueue(SeQueue &q) {
	if (QueueEmpty(q)) {
		return NULL;
	}
	ElementType e = q.data[q.front];
	q.front++;
	q.count--;
	return e;
}