單向鍊錶的設計

2021-10-09 05:46:25 字數 2817 閱讀 6876

鍊錶是一種資料結構,你可以把它想象成一種動態的陣列,此陣列大小不固定,可以在需要時動態增加、刪除元素。它解決了使用陣列時大小固定不可更改的痛點。

如上圖所示,單向鍊錶主要由乙個乙個節點組成。每個節點包含乙個值value和乙個指標* next,值value用於儲存鍊錶中的數值,指標* next用於指向下乙個節點。

定義乙個指標* head用於指向煉表頭節點。

頭節點的作用:表示單向鍊錶的頭部(不存放具體資料)。

設定最後乙個節點的* next的位址為null,表示鍊錶末尾。

使用結構體定義鍊錶節點:

typedef

struct _node

node;

隨後,將整個鍊錶做一封裝:

typedef

struct _list list;

//list可以代表整個鍊錶

node*

createnode

(datatype value)

初始化部分,將煉表頭 *head 設定為 null。

void

initlist

(list* plist)

尾插,首先我們要建立乙個新節點,然後判斷鍊錶當前是否有節點,若沒有,則直接讓第乙個節點指向新節點,若有,找到最後乙個節點,讓他指向新節點。

void add_at_end (list* plist, datatype value)

last->next = pnewnode;

//找到原鍊錶末尾節點,讓其指向已申請的新節點

}else

}

在給定pos位置後插入值為value的節點,分兩步完成:首先找到pos位置的節點,然後再插入,所以要實現這乙個功能需要兩個函式來共同完成。

注意:應該先連線好新節點,再斷開原來的指標指向。

void

add_at_pos

(node* pos, datatype value)

pnewnode =

createnode

(value)

;

pnewnode->next = pos->next;

pos->next = pnewnode;

}

尾刪,首先判斷鍊錶中有沒有節點,若沒有,直接返回,若有乙個節點,直接讓第乙個節點指向null,若有多個節點,則需要記錄下倒數第二個節點,讓它指向null。

;}要分三種情況:鍊錶為空直接返回、要刪除的節點為第乙個節點、其它位置的節點。

void

del(list* plist, datatype value)

node* ppre =

null

; node* pcur = plist->head;

while

(pcur)

else

free

(pcur)

;return;}

else

}}

更改pos位置節點的value值。

void

changevalue

(node* pos, value)

根據指定的value值,找到對應的節點。

node*

findnode

(list* plist, datatype value)

pcur = pcur->next;

}return

null

;}

void

printlist

(list *plist)

printf

("\n");

}

void

destorylist

(list *plist)

while

(plist->head)

}

鍊錶 反轉單向鍊錶

思路 從第二個元素開始。1 刪除當前元素。2 把當前元素放到頭結點位置。其中需要宣告3個變數 headnode 頭結點 prenode 前乙個結點 currentnode 當前結點 具體步驟如圖所示 實現 反轉單鏈表方法實現類 created by liujinjin on 17 1 19.publ...

鍊錶1 單向鍊錶

鍊錶中最簡單的一種是單向鍊錶,它包含兩個域,乙個資料域和乙個指標域,指標域指向鍊錶中的下乙個節點,最後乙個節點的指標域指向乙個空值 鍊錶最基本的結構是在每個節點儲存資料和到下乙個節點的位址,在最後乙個節點儲存乙個特殊的結束標記,另外在乙個固定的位置儲存指向第乙個節點的指標,有的時候也會同時儲存指向最...

鍊錶 單向鍊錶

討論單鏈表之前,我們先來討論下面這個問題。順序表存在的一些問題 中間 頭部的插入刪除,時間複雜度為o n 增容需要申請新空間,拷貝資料,釋放舊空間。會有不小的消耗。增容一般是呈2倍的增長,勢必會有一定的空間浪費。例如當前容量為100,滿了以後增容到200,我們再繼續插入了5個資料,後面沒有資料插入了...