线性结构常规操作(四)
定義存儲結(jié)構(gòu)(以單向鏈表為主)
對于鏈表的定義,通過結(jié)構(gòu)體進(jìn)行定義,包括兩部分,一是數(shù)據(jù)域,另一個(gè)就是指針,用于指向下一個(gè)節(jié)點(diǎn)。
1,創(chuàng)建鏈表
定義鏈表:
struct nodesq{int data;//數(shù)據(jù)域,這里以int為例struct nodesq * netx;//指向自身類型的指針域 }創(chuàng)建鏈表:棧式(往前/左走)、隊(duì)列式(往后/右走)
一般創(chuàng)建鏈表是通過循環(huán)創(chuàng)建的,這里為了方便理解才這樣創(chuàng)建的。
如圖所示:
2,鏈表的查詢(按序號、按數(shù)據(jù)元素)
例如:找數(shù)據(jù)域?yàn)閍3的節(jié)點(diǎn)(按數(shù)據(jù)元素查找)
首先,有頭有尾成鏈才是鏈表;鏈表的查詢是建立在已創(chuàng)建鏈表的基礎(chǔ)上。
只需要查找p->data是不是a3即可,若不是,接著查找下一個(gè),p=p->next;
例如:找序號為4的節(jié)點(diǎn)(按序號查找)
也就是查詢4次即可。
首先,有頭有尾成鏈才是鏈表;鏈表的查詢是建立在已創(chuàng)建鏈表的基礎(chǔ)上。
這里只需要定義一個(gè)變量wsq用于存儲序號即可,通過自加操作,到達(dá)4,則停下即可。
3,鏈表的插入
例如:在a3之前插入數(shù)據(jù)域?yàn)閍2‘的節(jié)點(diǎn)S
首先,有頭有尾成鏈才是鏈表;鏈表的查詢是建立在已創(chuàng)建鏈表的基礎(chǔ)上。
在a3之前插入a2’,這里關(guān)鍵點(diǎn)在于:①找到a3前的一個(gè)節(jié)點(diǎn)a2,將新插入的a2‘?dāng)?shù)據(jù)域?qū)?yīng)的節(jié)點(diǎn)S的next指向a3節(jié)點(diǎn)。②a2所在的節(jié)點(diǎn)的next指向a2’所在的節(jié)點(diǎn)S。
最終實(shí)現(xiàn)效果圖如下:
4,鏈表的刪除
例如:刪除a3所在的節(jié)點(diǎn)
首先,有頭有尾成鏈才是鏈表;鏈表的查詢是建立在已創(chuàng)建鏈表的基礎(chǔ)上。
刪除a3所在的節(jié)點(diǎn),需要找到a3所在的節(jié)點(diǎn)之前的一個(gè)節(jié)點(diǎn),即a2所在的節(jié)點(diǎn)。然后,將a2所在的節(jié)點(diǎn)的next指向a3所在節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。
之后a3需要進(jìn)行回收一下即可
最后的效果圖如下:
5,鏈表的輸出
p = head; while(p != NULL){//全部挨個(gè)輸出printf("%d",p->data);p = p->next;//找下一個(gè)節(jié)點(diǎn) } while(p->next != NULL){//最后一個(gè)節(jié)點(diǎn)不輸出printf("%d",p->data);p = p->next;//找下一個(gè)節(jié)點(diǎn) }6,循環(huán)鏈表
7,雙向鏈表
8,帶頭鏈表
9,無頭鏈表
總結(jié)
以上是生活随笔為你收集整理的线性结构常规操作(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 驻马店治疗精子活率低最好的医院推荐
- 下一篇: 明明的随机数(快排)