日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性结构常规操作(四)

發(fā)布時間:2023/12/1 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性结构常规操作(四) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

定義存儲結(jié)構(gòu)(以單向鏈表為主)

對于鏈表的定義,通過結(jié)構(gòu)體進行定義,包括兩部分,一是數(shù)據(jù)域,另一個就是指針,用于指向下一個節(jié)點。

1,創(chuàng)建鏈表

定義鏈表:

struct nodesq{int data;//數(shù)據(jù)域,這里以int為例struct nodesq * netx;//指向自身類型的指針域 }

創(chuàng)建鏈表:棧式(往前/左走)、隊列式(往后/右走)
一般創(chuàng)建鏈表是通過循環(huán)創(chuàng)建的,這里為了方便理解才這樣創(chuàng)建的。

struct nodesq *p1,*p2,*p3; p1 = new nodesq; p1->date = a1; p2 = new nodesq; p2->date = a2; //p2->next = p1;//棧式,即后來的當head p1->next = p2;//隊列式

如圖所示:

2,鏈表的查詢(按序號、按數(shù)據(jù)元素)


例如:找數(shù)據(jù)域為a3的節(jié)點(按數(shù)據(jù)元素查找)
首先,有頭有尾成鏈才是鏈表;鏈表的查詢是建立在已創(chuàng)建鏈表的基礎(chǔ)上。
只需要查找p->data是不是a3即可,若不是,接著查找下一個,p=p->next;

head = p;//首先,將給定的head頭指針賦值給指針p while(p->data != a3){//若當前節(jié)點的數(shù)據(jù)域不是a3p = p->next;//進行下一個節(jié)點判斷 }

例如:找序號為4的節(jié)點(按序號查找)
也就是查詢4次即可。
首先,有頭有尾成鏈才是鏈表;鏈表的查詢是建立在已創(chuàng)建鏈表的基礎(chǔ)上。
這里只需要定義一個變量wsq用于存儲序號即可,通過自加操作,到達4,則停下即可。

head = p;//首先,將給定的head頭指針賦值給指針p int wsq=0; while(wsq != 4){//若當前節(jié)點的數(shù)據(jù)域不是a3p = p->next;//進行下一個節(jié)點判斷wsq++;//序號自加 }
3,鏈表的插入


例如:在a3之前插入數(shù)據(jù)域為a2‘的節(jié)點S
首先,有頭有尾成鏈才是鏈表;鏈表的查詢是建立在已創(chuàng)建鏈表的基礎(chǔ)上。
在a3之前插入a2’,這里關(guān)鍵點在于:①找到a3前的一個節(jié)點a2,將新插入的a2‘數(shù)據(jù)域?qū)?yīng)的節(jié)點S的next指向a3節(jié)點。②a2所在的節(jié)點的next指向a2’所在的節(jié)點S。

head = p;//首先,將給定的head頭指針賦值給指針p while(p->next->data != a3){//找a3前一個節(jié)點p = n->next;//沒找到,指針找下一個節(jié)點 }//當結(jié)束循環(huán)之后,p指向a3上一個節(jié)點位置 S->next = p->next;//p->next此時為a3所在節(jié)點,賦值給S節(jié)點的next,即S節(jié)點的next指向a3所在節(jié)點,此時a2所在節(jié)點和S節(jié)點的next都指向a3所在的節(jié)點 p->next = S;//將a2所在的節(jié)點原本指向a3所在節(jié)點,給改成指向S節(jié)點

最終實現(xiàn)效果圖如下:

4,鏈表的刪除


例如:刪除a3所在的節(jié)點
首先,有頭有尾成鏈才是鏈表;鏈表的查詢是建立在已創(chuàng)建鏈表的基礎(chǔ)上。
刪除a3所在的節(jié)點,需要找到a3所在的節(jié)點之前的一個節(jié)點,即a2所在的節(jié)點。然后,將a2所在的節(jié)點的next指向a3所在節(jié)點的下一個節(jié)點。

head = p;//首先,將給定的head頭指針賦值給指針p while(p->next->data != a3){//找a3前一個節(jié)點p = n->next;//沒找到,指針找下一個節(jié)點 }//當結(jié)束循環(huán)之后,p指向a3上一個節(jié)點位置,即a2所在的節(jié)點 p->next = p->next->next;//p->next->next即a3所在節(jié)點的下一個節(jié)點,也就是a4所在的節(jié)點位置 賦值給 p->next也就是a2所在的節(jié)點的next

之后a3需要進行回收一下即可
最后的效果圖如下:

5,鏈表的輸出
p = head; while(p != NULL){//全部挨個輸出printf("%d",p->data);p = p->next;//找下一個節(jié)點 } while(p->next != NULL){//最后一個節(jié)點不輸出printf("%d",p->data);p = p->next;//找下一個節(jié)點 }
6,循環(huán)鏈表

7,雙向鏈表

8,帶頭鏈表

9,無頭鏈表

總結(jié)

以上是生活随笔為你收集整理的线性结构常规操作(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。