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.編寫函式,刪除所有資料值為奇數的節點。注意健壯性,奇數節點可...