佇列-鏈式儲存

小天秤發表於2018-09-23

佇列-鏈式儲存

佇列的鏈式儲存其實就是線性表的單連結串列,只不過它要遵循列隊的規則,只能尾進頭出,我們把它簡稱為鏈佇列。

首先,建立結構體和標頭檔案等
#include <stdio.h>
#include <stdlib.h>

typedef struct Queue{
    int data;
    struct Queue *next;//建立指標指向下一個結點
}Queue;

複製程式碼
初始化佇列
Queue *initQueue()
{
    Queue *queue = (Queue*)malloc(sizeof(Queue));//建立頭結點。
    queue->next = NULL;
    return queue;
}

複製程式碼
進佇列
Queue *enQueue(Queue * rear,int data)
{
    Queue *enElem = (Queue*)malloc(sizeof(Queue));//建立新的結點
    enElem->data = data;
    enElem->next = rear;
    rear->next = enElem;//從尾部插入
    rear = enElem;
    return rear;//返回尾部指標
}

複製程式碼
出佇列

void deQueue(Queue *front,Queue *rear)
{
    if (front->next == NULL) {
        printf("佇列為空");
        return ;
    }

    Queue *p = front->next;//首結點
    printf("%d", p->data);//出佇列
    front->next = p->next;//將頭結點指標,指向下一個結點地址
    if (rear == p) {//如果隊尾指標等於隊頭指標,將隊尾重新置為頭結點。也就是空佇列
        rear = front;
    }
    free(p);//釋放指標
}

複製程式碼
應用
int main()
{
    Queue *front,*rear;
    rear = front = initQueue();
    rear = enQueue(rear,1);
    rear = enQueue(rear, 2);
    rear = enQueue(rear, 3);
    rear = enQueue(rear, 4);

    deQueue(front, rear);
    deQueue(front, rear);
    deQueue(front, rear);
    deQueue(front, rear);
    
    return 0;
}

複製程式碼
執行結果

佇列-鏈式儲存

相關文章