資料結構學習記錄3 單鏈表

2021-10-25 06:13:49 字數 3283 閱讀 6933

二.**

因為順序表是一段固定的空間,所以會存在空間的時候率的一些問題。如果能通過某種方式,動態的將乙個又乙個的節點串接起來,那就可能會好很多,所以,在這種情況下,我們想出了單鏈表這種資料結構。

對於單鏈表,我們肯定還是需要有,增刪改查這幾種基礎函式。而且,除了節點的定義,我們除了儲存資料,應該還需要包括乙個能夠「感知」下乙個節點的資料結構,那麼我們可以用指標來代替。

我們可以建立乙個結構體,包含兩個部分:第乙個部分是我們的資料;第二個部分就存著我們指向下乙個節點的指標,並將*next預設初始化為null,後面只要檢測到他不為null,那麼說明他的後面就還存在節點。一旦某個節點指向了null,說明這個節點就到此結束了。

因為我們整個鍊錶的結構都是一樣的,所以我們可以直接拿乙個固定的節點,作為表頭

然後,根據習慣,我們將表頭指向的第乙個節點序號規定為0

因為我們的鍊錶都是由相同的節點組成,所以我們鍊錶的初始化就等於我們節點的初始化。所以我們只需要使用malloc生成乙個節點,並將*next指向null就可以了。

表的遍歷我們可以用while來進行,直到*next == null

對於銷毀表,我們可以邊遍歷,邊free,直到結束。

建立好要插入的節點資訊,記為thisnode,並將thisnode*next賦值為lastnode*next。這樣,我們插入的節點,就指向我們的下乙個節點了。

lastnode*next賦值為thisnode的位址。這樣,表就又完整了。

比如圖中的lastnode 是 0thisnode = index 是 1

讀取並儲存lastnode*next的位址,這就是我們要刪除的thisnode

我們把lastnode*next指向thisnode*next。此時,如果我們再遍歷列表的話,已經無法遍歷到thisnode了,它被跳過了

freethisnode因為它已經沒有意義了。這樣乙個節點的刪除了。

修改沒有什麼好說的,只是修改資料的話,並不會對鍊錶的結構進行改變,所以直接遍歷修改data就行。

查詢的話,也是遍歷即可。

自己修改主函式,實現效果

#include

#include

#define ok 1

#define error 0

// 定義資料型別

typedef

struct elemtype data;

//定義節點

typedef

struct node node;

node*

listinit

(void);

void

listshow

(node *list)

;int

listinsert

(node *list, data data_in,

int index)

;int

listdelect

(node *list,

int index)

;int

listmodify

(node *list, data data_in,

int index)

;int

listquery

(node *list, data data_in)

;int

main()

node*

listinit

(void

)else

}void

listshow

(node* list)

}int

listinsert

(node *list, data data_in,

int index)

while

(list->next !=

null

&& cont < index -1)

//遍歷 到插入的前乙個節點

thisnode->next = list->next;

//更新操作

list->next = thisnode;

return ok;

}int

listdelect

(node *list,

int index)

else

dnode = list->next;

list->next = dnode->next;

// 這樣就跳過了dnode

free

(dnode)

;//釋放掉刪除的node

return ok;}}

intlistmodify

(node *list, data data_in,

int index)

if(cont == index)

// 確定遍歷到了它

else

// 理論上來說是長度不夠 index比表長更長

}int

listquery

(node *list, data data_ck)

++cont;

}return-1

;}

資料結構學習筆記3 單鏈表

1.相對於順序表的線性儲存,順序表的鏈式儲存 單鏈表為例 最突出的優點 對元素的插入與刪除非常快 順序表的線性儲存插入和刪除需要移動大量的元素,操作速度緩慢 而獲取元素的速度相對而言比較快 單鏈表剛好和他相反,插入和刪除很快,獲取元素速度比不上線性表 2.單鏈表的形式 3.單鏈表的插入和刪除 4.除...

資料結構學習(六) 單鏈表

線性表中每個節點有唯一的前趨節點和後繼節點 設計鏈式儲存結構時,每個邏輯節點單獨儲存,為了表示邏輯關係,增加指標域 單鏈表 每個物理節點增加乙個指向後繼節點的指標域 雙鏈表 每個物理節點增加乙個指向後繼節點的指標域和乙個指向前趨節點的指標域 typedef struct lnode 定義單鏈表節點型...

資料結構學習筆記 單鏈表

陣列優勢在於快速定位元素,對於讀操作多,寫操作少的場景,陣列更合適 鍊錶優勢在於快速的插入和刪除操作,如果頻繁的在尾部刪除和插入元素,用鍊錶更好 package com.cc.node public class nodedemo1 private node head private node las...