二、链队列
用链表表示的队列简称为链队列。
设置一个队头指针front和一个队尾指针rear,队头指针始终指向头结点,队尾指针指向最后一个元素。空的链队列的
队头指针和队尾指针均指向头结点。
链队列示意图
数据结构定义:
typedef struct node
{
QueueElementType data ;
struct node *next;
}LinkQueueNode;
typedef struct _LinkQueue
{
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
基本操作:
(1)初始化
int InitQueue(LinkQueue *Q)
{
Q->front = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(Q->front == NULL)
{
return FALSE;
}
Q->rear = Q->front;
Q->front->next = NULL;
return TRUE;
}
(2)入队
int EnterQueue(LinkQueue *Q,QueueElementType x)
{
LinkQueueNode *newNode;
newNode = (LinkQueueNode*)malloc(sizeof(LinkQueueNode));
if(newNode == NULL)
{
return FALSE;
}
newNode->data = x;
newNode->next = NULL;
Q->rear->next = newNode;
Q->rear = newNode;
return TRUE;
}
(3)出队
int DeleteQueue(LinkQueue *Q,QueueElementType *x)
{
LinkQueueNode *p;
if(Q->front == Q->rear)
{
return FALSE;
}
p = Q->front->next;
Q->front->next = p->next;
if(Q->rear == p) //如果队中只有一个元素p,则p出对后成为空队
{
Q->rear = Q->front;
}
*x = p->data;
free(p);
return TRUE;
}