链队
链队列:用链表表示的队列简称为链队列
1.初始化队列
1.1数据结构
typedef struct LinkQueueNode{
ElemType data;
struct LinkQueueNode* next;
}LinkQueueNode;
typedef struct {
LinkQueueNode* front,*rear;//front 作为头指针 rear指向队列的最后一个结点
}LinkQueue;
1.2定义空队列
void InitLinkQueue(LinkQueue& Q)
{
Q.front = Q.rear = (LinkQueueNode*)malloc(sizeof(LinkQueueNode));
Q.front->next = NULL;
}
2.入队
2.1算法思想
-
申请一个空结点s 将e赋值给s的数据域 给s的指针域赋为空
-
将s插入队列的尾部 也就是Q.rear的后面
-
重新让Q.rear指向尾结点(即新建立的s结点)
2.2算法设计
void EnLinkQueue(LinkQueue &Q,int e)
{
LinkQueueNode* s = (LinkQueueNode*)malloc(sizeof(LinkQueueNode));
s->data = e;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
3.出队
3.1算法思想
-
判断队列是否为空,为空的条件为Q.front 等于Q.rear
-
新建一个指针q 让其指向首元结点
-
如果表中有且只有一个结点 则让Q.rear= Q.front
-
挂链 让头指针(Q.front)指向出队的下一个结点
-
释放 出队 的结点
3.2算法设计
bool DeLinkQueue(LinkQueue& Q)
{
if (Q.front == Q.rear)
{
return false;
}
LinkQueueNode* q = Q.front->next;
if (q == Q.rear)
{
Q.rear = Q.front;
}
Q.front->next = q->next;
free(q);
return true;
}
标签:结点,链队,LinkQueueNode,next,队列,front,rear From: https://www.cnblogs.com/wlb429/p/16770499.html