單向動態鍊錶

2021-09-19 23:22:34 字數 3577 閱讀 3750

什麼是鍊錶

鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。 相比於線性表順序結構,操作複雜。由於不必須按順序儲存,鍊錶在插入的時候可以達到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 實現單向動態鍊錶

鍊錶顧名思義就是 鏈 鍊錶是一種動態資料結構,他的特點是用一組任意的儲存單元存放資料元素。鍊錶中每乙個元素成為 結點 每乙個結點都是由資料域和指標域組成的。跟陣列不同鍊錶不用預先定義大小,而且硬體支援的話可以無限擴充套件。陣列需要預先定義大小,無法適應資料動態地增減,資料小於定義的長度會浪費記憶體,...