什麼是鍊錶
鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。 相比於線性表順序結構,操作複雜。由於不必須按順序儲存,鍊錶在插入的時候可以達到o(1)的複雜度,比另一種線性表順序表快得多,但是查詢乙個節點或者訪問特定編號的節點則需要o(n)的時間,而線性表和順序表相應的時間複雜度分別是o(logn)和o(1)
單向動態鍊錶實現
①標頭檔案**
#pragma once
#include
#include
#include
typedef
struct linknode linknode;
typedef
struct linklist linklist;
//初始化鍊錶
linklist*
init_linklist()
;//在指定位置插入結點
void
insert_linklist
(linklist* list,
int pos,
int value)
;//刪除指定位置的結點
void
remove_linklist
(linklist* list,
int pos)
;//獲得鍊錶的長度
void
size_linklist
(linklist* list)
;//查詢鍊錶位置
void
find_linklist
(linklist* list,
int value)
;//列印鍊錶
void
printf_linklist
(linklist* list)
;//返回第乙個結點位置
void
*frist_linklist
(linklist* list)
;//釋放鍊錶記憶體
void
free_linklist
(linklist* list)
;
②函式檔案**
#include
"linklist.h"
//初始化
linklist*
init_linklist()
//在指定位置插入結點
void
insert_linklist
(linklist* list,
int pos,
int value)
if(pos<
0|| pos>list->size)
//建立新結點
linknode* newnode =
(linknode*
)malloc
(sizeof
(linknode));
newnode->value = value;
newnode->next =
null
;//找結點
//輔助指標變數
linknode* pcur = list->head;
for(
int i =
0; i < pos;
++i)
//插入結點
newnode->next = pcur->next;
pcur->next = newnode;
++list->size;
}//刪除指定位置的結點
void
remove_linklist
(linklist* list,
int pos)
if(pos <
0|| pos >= list->size)
//建立輔助指標,需要兩個輔助指標
linknode* pcur=list->head;
linknode* ppre = pcur;
//用來儲存上乙個結點的位置
for(
int i =
0; i < pos;
++i)
ppre->next = pcur->next;
free
(pcur)
;--list->size;
}//獲得鍊錶的長度
void
size_linklist
(linklist* list)
printf
("這個鏈表現在有%d個結點"
, list->size -1)
;}//查詢鍊錶位置
void
find_linklist
(linklist* list,
int value)
linknode* pcur = list->head;
pcur = pcur->next;
for(
int i =
0; i < list->size;
++i)
pcur = pcur->next;}}
//列印鍊錶
void
printf_linklist
(linklist* list)
linknode* pcur = list->head;
for(
int i =
0; i < list->size;
++i)
printf
("null\n");
}//返回第乙個結點位置
void
*frist_linklist
(linklist* list)
//釋放鍊錶記憶體
void
free_linklist
(linklist* list)
//輔助指標
linknode* pcur = list->head;
while
(pcur !=
null
)free
(list)
;}
③測試檔案**
#include
#include
#include
"linklist.h"
void
test01()
//列印結點
printf_linklist
(list)
;//刪除結點
remove_linklist
(list,5)
;printf_linklist
(list)
;//查詢
find_linklist
(list,10)
;//釋放記憶體
free_linklist
(list);}
intmain()
單向動態鍊錶
include include define ok 1 define error 0 define true 1 define false 0 typedef int status typedef int elemtype typedef struct lnode lnode,linklist 圖示...
鍊錶 1 之單向動態鍊錶
題目 多函式程式設計 struct word char c 20 struct word next 函式1 一輸入一串單詞字串,假設每個單詞長度不超過19個字元,用空格隔開,把每個單詞資料存在乙個單向動態鍊錶 簡稱單詞鍊錶 裡的乙個節點。struct word create word list 生成...
Python 實現單向動態鍊錶
鍊錶顧名思義就是 鏈 鍊錶是一種動態資料結構,他的特點是用一組任意的儲存單元存放資料元素。鍊錶中每乙個元素成為 結點 每乙個結點都是由資料域和指標域組成的。跟陣列不同鍊錶不用預先定義大小,而且硬體支援的話可以無限擴充套件。陣列需要預先定義大小,無法適應資料動態地增減,資料小於定義的長度會浪費記憶體,...