帶頭迴圈雙向鍊錶以及順序表和煉表的區別和聯絡

2021-10-21 18:03:33 字數 1458 閱讀 4495

區別:1. 無頭單向非迴圈鍊錶:結構簡單,一般不會單獨用來存資料。實際中更多是作為其他資料結構的子結

構,如雜湊桶、圖的鄰接表等等。另外這種結構在筆試面試**現很多。

2. 帶頭雙向迴圈鍊錶:結構最複雜,一般用在單獨儲存資料。實際中使用的鍊錶資料結構,都是帶頭雙向

迴圈鍊錶。另外這個結構雖然結構複雜,但是使用**實現以後會發現結構會帶來很多優勢,實現反而簡單

順序表:

空間連續,支援連續訪問

中間或前面部分的插入刪除時間複雜度為o(n);並且增容的代價比較大

鍊錶:

以節點為位元組儲存,不支援隨機訪問

任意位置插入刪除時間複雜度都為o(1);插入乙個開闢乙個空間

**的實現

#include#includetypedef int ldatatype;

//雙向節點

typedef struct listnode

listnode;

//雙向帶頭迴圈鍊錶

typedef struct list

list;

void initlist(list* lst)

struct listnode* creatnode(ldatatype val)

//尾節點:head->_prev

//尾插(o(1))

void listpushback(list* lst, ldatatype val)

//尾刪(o(1))

void listpopback(list* lst)

void printlist(list* lst)

printf("\n");

}void listpushfront(list* lst, ldatatype val)

//頭刪

void listpopfront(list* lst)

//頭插:insert(head->next,val)

//尾插:insert(head,val)

//新的資料放在當前節點的前面

void listinsert(listnode* node, ldatatype val)

void listerase(listnode* node)

void listdestroy(list* lst)

free(lst->_head);

lst->_head=null;

}void listfind(list* lst, ldatatype x)

lst->_head = lst->_head->_next; }}

void test()

int main()

帶頭雙向迴圈鍊錶

首先,我們來看一下帶頭雙向迴圈鍊錶的結構 目錄 帶頭雙向迴圈鍊錶結點的定義 相關操作介面 1 初始化 獲取乙個結點 2 銷毀鍊錶 3 尾插 4 頭插 5 指定元素查詢 6 任意位置插入 7 尾刪 8 頭刪 9 任意位置刪除 10 列印鍊錶 附上完整 typedef int datatype type...

帶頭雙向迴圈鍊錶

帶頭雙向迴圈鍊錶的增刪查改實現 帶頭 雙向 迴圈鍊錶增刪查改實現 typedef int ltdatatype typedef struct listnode listnode 建立乙個新節點 listnode buylistnode ltdatatype x 建立返回鍊錶的頭節點 listnode...

帶頭雙向鍊錶

ifndef list h define list h include stdio.h include assert.h include malloc.h include string.h typedef int datatype typedef struct listnode list,plist...