資料結構 鍊錶 單向鍊錶

2021-07-04 18:57:53 字數 1390 閱讀 9269

鍊錶(linked list)是由一連串的結構(稱為結點)組成的,其中每個結點都包含指向鏈中下乙個結點的指標。

鍊錶中的最後乙個結點包含乙個空指標。

鍊錶與陣列不同,陣列的線性序是由陣列的下標決定的,而鍊錶中的順序是由各結點的指標域所決定的。

鍊錶可以靈活地表示動態集合。採用鍊錶表示線性表,無論向表中插入或刪除元素,都不需要移動資料。

與順序表示法不同,鍊錶的結點不再是連續且等距離地存放在一塊儲存區域,相反,結點可以存放在儲存區的任何位置。

單向鍊錶中的結點至少有乙個指標域。其中結點的個數可以是0或多個,當結點個數為0時,稱為空鍊錶。如果鍊錶不為空,則第乙個結點指向第2個, 第2個結點指向第3個,,,,,構成線性表。鏈中最後乙個結點的指標域為0(表示null指標)。

宣告結點型別。為了建立鍊錶,首先需要乙個表示鍊錶中單個結點的結構、

//結點結構描述

struct node;

我們需要記錄鍊錶開始的位置,即需要有乙個始終指向鍊錶中第乙個結點的變數,我們把此變數命名為first:      node * first = null;

first = null, 表示不指向任何儲存區域,即這個鍊錶為空。

//判斷鍊錶為空的函式

bool is_empty(node *first)

在構建鍊錶時,需要逐個建立結點,並且把生成的每個結點加入到鍊錶中。建立結點包括三個步驟:

1、為結點分配記憶體單元;

2、把資料儲存到結點中;

3、把結點插入到鍊錶中。

為了建立結點,需要乙個變數臨時指向該結點,假設此變數為new_node:node *new_node = new node();

//在堆記憶體中分配乙個能夠存放該結構的記憶體區域,並返回獲得的記憶體區域的首位址,賦給new_node指標。

//例如

new_node->value = 25;

new_node->next = null;

在鍊錶的開始出插入結點。如果new_node指向要插入的結點,first指向鍊錶的首結點。為了把該結點插入鍊錶的首部,需要兩條語句。

首先,修改該結點的成員next,使其指向先前在鍊錶開始處的結點: new_node->next = first;

然後,使first指向新結點:  first = new_node;

在鍊錶的首部插入結點的函式add_to_list,有兩個形式引數: list(指向鍊錶中首結點的指標),n(需要儲存在新結點中的整數)。

node *add_to_list(node *list, int n)

//例如:first = add_to_list(first,20);

資料結構 鍊錶 單向鍊錶

單向鍊錶 插入刪除效率比陣列高 建立節點 node class node class list 追加節點 將值變為節點 let newnode new node element 判斷是否為空鍊錶 if this.head null else current.next newnode 長度必須加1 t...

資料結構 鍊錶 單向鍊錶

鍊錶 linked list 是由一連串的結構 稱為結點 組成的,其中每個結點都包含指向鏈中下乙個結點的指標。鍊錶中的最後乙個結點包含乙個空指標。鍊錶與陣列不同,陣列的線性序是由陣列的下標決定的,而鍊錶中的順序是由各結點的指標域所決定的。鍊錶可以靈活地表示動態集合。採用鍊錶表示線性表,無論向表中插入...

資料結構 單向鍊錶

鍊錶結構的資料格式儲存 include stdafx.h 把這行放在最開始。include includeusing namespace std typedef struct data typedef struct node 這裡與上面的不同是多了node,注意如果沒有這個node,下面的struc...