結構最複雜,一般用在單獨儲存資料。實際中使用的鍊錶資料結構,都是帶頭雙向迴圈鍊錶。另外這個結構雖然結構複雜,但是使用**實現以後會發現結構會帶來很多優勢.
#pragma once
#include #include #include #include typedef int ltdatatype;
typedef struct listnode
listnode;
typedef struct list
list;
void listinit(list* plist);
void listdestroy(list* plist);
void listpushback(list* plist, ltdatatype x);
void listpopback(list* plist);
void listpushfront(list* plist, ltdatatype x);
void listpopfront(list* plist);
listnode* listfind(list* plist, ltdatatype x);
//在pos之前進行插入
void listinsert(listnode* pos, ltdatatype x);
//刪除pos位置的節點
void listerase(listnode* pos);
void listprint(list* plist);
#include "list.h"
listnode* buylistnode(ltdatatype x)
void listinit(list* plist)
void listdestroy(list* plist)
free(plist->_head);
plist->_head = null;
}void listpushback(list* plist, ltdatatype x)
void listpopback(list* plist)
void listpushfront(list* plist, ltdatatype x)//頭插時,在head的後面插入
void listpopfront(list* plist)
listnode* listfind(list* plist, ltdatatype x)
cur = cur->_next;
} return null;
}void listinsert(listnode* pos, ltdatatype x)//在pos之前進行插入
void listerase(listnode* pos)//刪除pos位置的節點
void listprint(list* plist)
printf("<=>\n");
}
#include "list.h"
listtest()
int main()
順序表:一白遮白醜
白:空間連續、支援隨機訪問
醜: 1. 中間或前面部分的插入刪除時間複雜度o(n)
2.增容的代價比較大。
鍊錶:一胖毀所有
黑: 以節點為單位儲存,不支援隨機訪問
所有: 1.任意位置插入刪除時間複雜度為0(1)
2.沒有增容問題,插入乙個開闢乙個空間。
雙鏈表介面的簡單實現
雙向鍊錶相當於單鏈表來說,實現的幾個介面無疑是比較簡單的,在這一篇部落格中,我將會整理一下關於雙向鍊錶的幾個介面實現的過程,希望各位大佬多多指正。1.首先建立乙個帶有雙向鍊錶的節點 如下 typedef int ltdatatype typedef struct listnode listnode ...
資料結構 雙鏈表
typedef struct nodenode 雙鏈表的根節點的bwd指標指向雙鏈表的最後乙個節點,fwd指標指向雙鏈表的第乙個節點,雙鏈表的value欄位為空 以下程式是將乙個值插入到乙個有序的雙鏈表中,如果鍊錶中已經有和該值相同的節點則不插入 include include typedef st...
資料結構 雙鏈表
目標 掌握雙鏈表的資料結構 來看看什麼是雙鏈表吧 雙鏈表與單鏈表的區別,單鏈表是單項的 而雙鏈表是有左右的 題目acwing 827 實現乙個雙鏈表,雙鏈表初始為空,支援5種操作 1 在最左側插入乙個數 2 在最右側插入乙個數 3 將第k個插入的數刪除 4 在第k個插入的數左側插入乙個數 5 在第k...