首页 > 其他分享 >链队

链队

时间:2022-10-08 22:37:08浏览次数:42  
标签:结点 链队 LinkQueueNode next 队列 front rear

链队

链队列用链表表示的队列简称为链队列

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算法思想

  1. 申请一个空结点s 将e赋值给s的数据域 给s的指针域赋为空

  2. 将s插入队列的尾部 也就是Q.rear的后面

  3. 重新让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算法思想

  1. 判断队列是否为空,为空的条件为Q.front 等于Q.rear

  2. 新建一个指针q 让其指向首元结点

  3. 如果表中有且只有一个结点 则让Q.rear= Q.front

  4. 挂链 让头指针(Q.front)指向出队的下一个结点

  5. 释放 出队 的结点

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

相关文章