C語言 鍊錶及其相關應用

2021-10-05 14:20:33 字數 3390 閱讀 3480

2).鍊錶涉及的基本概念

3).**書寫

乙個普通鍊錶**

二.鍊錶的建立

三.鍊錶操作

一串連在一起的記憶體空間(鏈式記憶體)

解決記憶體不夠存放一串連續資料問題

ps:一般來說,陣列能解決大多數問題,但是陣列要求開闢一塊連續完整的記憶體空間,使其能夠連續存放,對記憶體空間要求苛刻。若記憶體不夠時,鍊錶的作用便體現出來

鍊錶能夠充分利用零碎空間

解決空間不足,但要連續儲存問題

將表無資料的判斷和表處理結束表尾的判斷 形式上做了統一。

指向(記錄)鏈式儲存中第1個節點位置(位址)的指標變數。簡稱為頭指標;

顧名思義,代表鏈式儲存中乙個特殊節點;領頭的節點,領隊節點;可以有,也可以沒有。

有頭節點的鍊錶,鍊錶存在表明至少頭節點是存在的;沒有頭節點的,那p的內容應該存在且有意義;若p為null則表明不存在;

是指鍊錶資料部分不存在。有頭節點的,鍊錶為空,表明鍊錶只有頭節點;無頭節點的,顯然p為null;

指煉表中最後乙個節點,稱為鍊錶的尾節點。

有頭指標和無頭指標的區別

單鏈表:只有後繼關係

雙鏈表:有後繼和前驅關係

迴圈鍊錶:尾節點又指向的第乙個節點

既然要連起來,那必然有乙個扣和乙個環,且環和扣得在一起,類似於火車車廂

因此,這裡的

int data;就是環

struct link *next;就是扣

q:怎麼連起來?

a:用指標

q:為什麼用結構體?

a:結構體能整合不同的資料型別

ps:個人見解,當程式執行到struct link *next;這一行時,就已經開闢了乙個和自己一樣的節點。

這是乙個套娃。

c語言支援指標的遞迴。

#include

#include

#include

struct link

;int

main()

q=p->next

while

(q!=

null

)return0;

}

當乙個資料輸入時,指標q[0]的next=頭指標的next,然後頭指標的next指向了q[0]的資料

下乙個資料輸入時,指標q[1]的next=頭指標的next,然後頭指標的next指向了q[1]的資料。

q:為什麼是倒序的

a:因為頭指標的next已經指向了q[0]的資料,當指標q[1]的next=頭指標的next時,頭指標的next已經記錄了q[0]的資料,所以指標q[1]的next=頭指標的next後,q[0]就接在了q[1]的後面

#include

#include

#include

struct link

;int

main()

q=p->next;

while

(q!=

null

)return0;

}

q:怎麼理解

a:新建乙個臨時節點,當陣列輸入時,讓r的next指向q,再讓r移動到其next,也就指向了q,所以r的next也就是q的next。當輸入下乙個時,r->next=q這裡的next是上乙個q 的next

q:頭指標沒用了嗎?

a:相當於,另起乙個串,這個串串好了,然後才連到頭指標上

以下以單向有頭鍊錶舉例

動態鍊錶為例

顧名思義,輸入的資料是接在頭指標的後面,每乙個都找頭指標對接(扣環)

解釋,見上。

輸入的資料是倒序的,見上。

struct link

;

頭插和尾插,見上

q=p->next;

while

(q!=

null

)

目的是找到要求的資料

查詢區間在[1,n]之間

找不到返回null,找到返回相應指標

struct link *

search

(struct link*p,

int n)

if(i!=n)

return

null

;else

return q;

}

給出要修改節點的位置,對應修改即可

這裡為了防止手誤修改,記錄了修改前的內容

struct link  modify

(struct link*p,

struct link y)

插入和刪除,都需要找到要插入或者刪除的前乙個節點,修改前乙個節點的next

插入的節點區間是[0,n+1]

刪除的節點區間是[1,n]

必須維護原有的關係,所以要記錄原有的關係,再進行插入

因為要找到前乙個節點的位置,所以區間是[0,n]

插入點的前驅節點不能為空

採用計數原理,找到要修改的位置

void

insert

(struct link *p,

struct link *q,

int i)

if(r!=

null

)//如果找到了

}

同插入

要找到前乙個節點的位置,所以區間是[0,n-1]

另外,待刪除的節點也不能為空

同樣,這裡為了防止手誤刪除,記錄了為刪除的資料

void

delete1

(struct link *p,

int i)

q=r->next;

//找到待刪除節點

if(q!=

null

)//如果待刪除節點不為空

free

(q);

//清除q

return t;

}

寫在最後,如果沒看懂的,建議動手畫一畫就明白了~

點讚呀~

c 鍊錶及其相關操作

僅供自己學習參考 鍊錶,線性表的鏈式儲存結構。前提 typedef struct lnode lnode,linklist 單鏈表的建立及其相關操作 void creatlist linklist l,int n 頭插法 建立鍊錶6 5 4 3 2 1,有頭結點 void creatlist2 li...

C語言鍊錶 應用總結

每次面試的時候,面試官都會問你,會鍊錶不 顯得很高逼格 掌握鍊錶的建立 插入 刪除 修改 清空。你會發現,其實鍊錶就那麼回事。1.建立鍊錶結構體 typedef struct linklist linklist 2.生成乙個鍊錶的頭指標,僅僅 just!是乙個位址 linklist list hea...

鍊錶建立及其相關功能

1.編寫函式,完成在第 n個節點的後增加節點的功能,n值由鍵盤輸入。注意健壯性,要求能夠對不同的 n值做出恰當的處理 2.編寫函式,完成在第 n個節點的後刪除節點的功能,n值由鍵盤輸入。注意健壯性,要求能夠對不同的 n值做出恰當的處理 3.編寫函式,刪除所有資料值為奇數的節點。注意健壯性,奇數節點可...