# 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);  | |
} |