データ構造——キュー——初期化キュー、入行列、列の先頭要素の取得、列の最後の要素の取得、キューの有効要素の個数の取得、空判定、キューの廃棄

2082 ワード

キューの構造:

typedef QNode* QDataType;

//     :     
typedef struct QNode
{
	struct QNode* pNext;
	QDataType data;
}QNode;

//       
typedef struct Queue
{
	QNode *head;		//         
	QNode *last;		//          
}Queue;
関数の概要:
//       
void QueueInit(Queue* q); 

//       
void QueuePush(Queue* q, QDataType data); 

//       
void QueuePop(Queue* q); 

//          
QDataType QueueFront(Queue* q); 

//          
QDataType QueueBack(Queue* q); 

//             
int QueueSize(Queue* q); 

//         ,          ,      0 
int QueueEmpty(Queue* q); 

//      
void QueueDestroy(Queue* q); 
初期化キュー:
//     
void QueueInit(Queue* q)
{
	q->head = q->last = NULL;
}
 列の最後の列(列に入る):
//         //   
void QueuePush(Queue* q, QDataType data)
{
	QNode *node = (QNode *)malloc(sizeof(QNode));
	node->data = data;
	node->pNext = NULL;
	if (q->head == NULL)
	{
		q->head = node;
		q->last = node;
	}
	else
	{
		q->last->pNext = node;
		q->last = node;
	}
}
列の先頭から列を出す(列から出る):
//         //   
void QueuePop(Queue* q)
{
	QNode* node = (QNode*)malloc(sizeof(QNode));
	node = q->head;
	free(q->head);
	q->head = node;

	// last           
	if (q->head == NULL) {
		q->last = NULL;
	}
}
キューのヘッダ要素を取得:
//          
QDataType QueueFront(Queue* q)
{
	return q->head->data;
}
チームの最後の要素を取得:
//          
QDataType QueueBack(Queue* q)
{
	return q->last->data;
}
キューの有効要素の個数を取得します.
//             
int QueueSize(Queue* q)
{
	int size;
	for (QNode* c=q->head ; c !=NULL; c=c->pNext)
	{
		size++;
	}
	return size;
}
空の判定:
//         ,          ,      0 
int QueueEmpty(Queue* q)
{
	if (q->head == NULL)
		return 1;
	else
		return 0;
}
キューを廃棄する:
//      
void QueueDestroy(Queue* q)
{
	QNode* node;
	for ( node =q->head; node !=NULL; node=node->pNext)
	{
		free(node);
	}
	q->head = NULL;
	q->last = NULL;
}