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