# 4. 链队列

1) 定义

typedef struct Node
{
     QueueElementType data; /* 数据域 */
     struct Node *next; /* 指针域 */
}LinkQueueNode;
typedef struct
{
	 LinkQueueNode * front;
	 LinkQueueNode * rear;
}LinkQueue;

2) 初始化

int InitQueue(LinkQueue * Q)
{ /* 将 Q 初始化为一个空的链队列 */
	 Q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
	 if(Q->front!=NULL){
		Q->rear=Q->front;
		Q->front->next=NULL;
		return(TRUE);
	}else return(FALSE); /* 溢出!*/
}

3) 入队

链队列入队操作算法
int EnterQueue(LinkQueue *Q, QueueElementType x)
{ /* 将数据元素 x 插入到队列 Q 中 */
	LinkQueueNode * NewNode;
	NewNode=(LinkQueueNode * )malloc(sizeof(LinkQueueNode));
	if(NewNode!=NULL){
		NewNode->data=x;
		NewNode->next=NULL;
		Q->rear->next=NewNode;
		Q->rear=NewNode;
		return(TRUE);
	}else return(FALSE); /* 溢出!*/
}

4) 出队

int DeleteQueue(LinkQueue * Q, QueueElementType *x)
{ /* 将队列 Q 的队头元素出队,并存放到 x 所指的存储空间中 */
	LinkQueueNode * p;
	if(Q->front==Q->rear)return(FALSE);
	p=Q->front->next;
	Q->front->next=p->next; /* 队头元素 p 出队 */
    /* 如果队中只有一个元素 p,则 p 出队后成为空队 */
	if(Q->rear==p) Q->rear=Q->front;
	*x=p->data;
	free(p); /* 释放存储空间 */
	return(TRUE);
}
-->