佇列-鏈式儲存
佇列的鏈式儲存其實就是線性表的單連結串列,只不過它要遵循列隊的規則,只能尾進頭出,我們把它簡稱為鏈佇列。
首先,建立結構體和標頭檔案等
#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;
}
複製程式碼