C語言使用非迴圈雙向鍊錶實現佇列

2021-07-10 09:39:45 字數 1107 閱讀 4395

在前面兩篇部落格中,我分別使用了靜態陣列和動態陣列來模擬迴圈佇列。但是線性表中和佇列最神似的莫過於鍊錶了。我在前面也使用了大量的篇幅來講述了鍊錶的各種操作。今天我們使用一種比較特殊的鍊錶——非迴圈雙向鍊錶來實現佇列。首先這裡的說明的是構建的是普通的佇列,而不是迴圈佇列。當我們使用陣列的時候建立迴圈佇列是為了節省儲存空間,而來到鍊錶中時,每乙個節點都是動態申請和釋放的,不會造成空間的浪費,所以就不需要採用迴圈佇列了。第二,大家在很多書上看到的是使用單鏈表實現佇列,我這裡將會使用帶頭結點尾結點的非迴圈雙鏈表實現,雖然多維護了兩個節點和指標域,但是在鍊錶頭尾進行插入刪除的時候不需要遍歷鍊錶了,佇列操作變得非常的方便。真正實現了只在頭尾操作。**上傳至 。

核心**如下:

(1)初始化佇列

//初始化帶頭結點和尾結點的非迴圈雙向鍊錶

void initialqueue(queue **phead,queue **ptail)else

}

(2)入隊,在尾結點插入元素

//入隊,也就是在鍊錶的尾部插入節點

void enqueue(queue *head,queue *tail,int x)

(3)出隊,在頭結點處刪除節點

//出隊,在佇列頭部刪除元素

void dequeue(queue *head,queue *tail)else

}

(4)列印所有節點

//列印出從佇列頭部到尾部的所有元素

void printqueue(queue *head,queue *tail)

printf("\n");

}

(5)判斷佇列是否為空

//判斷佇列是否為空,為空返回1,否則返回0

int isempty(queue *head,queue *tail)

return 0;

}

(6)測試**

int main(int argc, const char * argv)

雙向鍊錶(非迴圈)

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。1 標頭檔案 dilst.h pragma once 帶頭結點的雙向鍊錶 非迴圈 typedef struct dnode d...

C語言實現雙向迴圈鍊錶

list 雙向迴圈鍊錶,帶頭指標 struct list node 初始化頭指標 void list init head struct list node head 量表是否為空 是返回1,否返回0 int list is empty const struct list node head 鍊錶遍歷...

C語言實現雙向迴圈鍊錶

list 雙向迴圈鍊錶,帶頭指標 struct list node 初始化頭指標 void list init head struct list node head 量表是否為空 是返回1,否返回0 int list is empty const struct list node head 鍊錶遍歷...