C語言之單鏈表實現

2021-10-01 05:45:28 字數 3157 閱讀 3645

鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。 相比於線性表順序結構,操作複雜。由於不必須按順序儲存,鍊錶在插入的時候可以達到o(1)的複雜度,比另一種線性表順序表快得多,但是查詢乙個節點或者訪問特定編號的節點則需要o(n)的時間,而線性表和順序表相應的時間複雜度分別是o(logn)和o(1)。

以下是個人的理解:

將碎片化的記憶體關聯起來,形成(鏈式儲存)的線性關係。常用於高階的記憶體管理,如,c++記憶體分配器。

單鏈表**實現,以 int 整型示例

#include

#include

/*\ brief 節點宣告

*/typedef

struct node

node,

* nodeptr;

/*\ brief 鍊錶宣告

*/typedef

struct

linked,

* linkedptr;

/*\ brief 初始化鍊錶,在使用之前呼叫一次

\ param link 鍊錶容器指標

*/void

init

(linkedptr link)

/*\ brief 配置節點

\ param 節點元素

\ return 成功返回節點指標,失敗返回null

*/nodeptr allocator

(int element)

else

return node;}/*

\ brief 尾部插入節點

\ param link 鍊錶容器指標

\ param element 元素

*/void

pushback

(linkedptr link,

int element)

link->tailptr->next = node;

link->tailptr = node;

link->size++;}

/*\ brief 首節點插入

\ param link 鍊錶容器指標

\ param element 元素

*/void

pushfirst

(linkedptr link,

int element)

node->next = link->node.next;

link->node.next = node;

link->size++;}

/*\ brief 插入節點

\ param link 鍊錶容器指標

\ param pos 要插入的下標

\ param element 元素

*/void

insert

(linkedptr link, size_t pos,

int element)

node->next = tmpnode->next;

tmpnode->next = node;

link->size++;}

/*\ brief 刪除首節點

\ param link 鍊錶容器指標

*/void

popfirst

(linkedptr link)

/*\ brief 刪除鍊錶尾節點

\ param 鍊錶容器指標

*/void

popback

(linkedptr link)

nodeptr tmpnode = node->next;

node->next =

null

;free

(tmpnode)

; link->tailptr = node;

link->size--;}

/*\ brief 根據下標返回指定節點元素

\ param link 鍊錶容器指標

\ param pos 下標

\ return 返回下標的元素

*/int

findlinkelement

(linkedptr link, size_t pos)

return node->element;}/*

\ brief 根據元素返回鍊錶下標

\ param link 鍊錶容器指標

\ param element 要查詢的元素

\ return 成功返回下標,失敗返回-1

*/int

findlinkpos

(linkedptr link,

int element)

node = node->next;

}return-1

;}/*\ brief 刪除下標元素節點

\ param link 鍊錶容器指標

\ param pos 下標

*/void

poplinkpos

(linkedptr link, size_t pos)if(

!pos)

nodeptr node = link->node.next;

for(size_t i =

1; i < pos; i++

) nodeptr tmpnode = node->next;

node->next = tmpnode->next;

free

(tmpnode)

; link->size--;}

/*\ brief 清空鍊錶,銷毀前呼叫一次

\ param 鍊錶容器指標

*/void

clear

(linkedptr link)

link->size =0;

link->tailptr =

&link->node;}/*

\ brief 列印鍊錶

\ param link 鍊錶容器指標

*/void

printlink

(linkedptr link)

}int

main

(int argc,

char

* ar**)

文章時間2023年12月3日18:27:26

c語言之單鏈表簡單操作

建立鍊錶有倆種方式,一種是頭插法,一種是尾插法,倆種方法大同小異,在此我介紹尾插法。用圖示的方法很好理解。下面是用尾插法建立鍊錶的 struct student int n 記錄存放資料數目 struct student create p2 next null return head 建立過程結束 ...

資料結構C語言之單鏈表簡單實現

include stdafx.h include include 定義單鏈表 typedef struct lnodelnode,linklist int tmain int argc,tchar argv void createlinklist linklist l,int n 使頭結點還原到原始...

C語言之實現單鏈表的基本操作

目錄 1 鍊錶節點的定義 2 鍊錶基操function的宣告 3 鍊錶基操function的定義與實現 3.1 單鏈表的建立 頭插法 3.2 單鏈表的建立 尾插法 3.3 有序單鏈表的建立 3.4 單鏈表的遍歷 3.5 在單鏈表中查詢元素 3.6 在單鏈表中的指定位置後插入元素 3.7 在單鏈表中刪...