最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言實(shí)現(xiàn)單鏈表反轉(zhuǎn)

 更新時(shí)間:2020年07月24日 16:29:44   作者:一碼&當(dāng)先  
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)單鏈表反轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、理解指針

看懂鏈表的結(jié)構(gòu)并不是很難,但是一旦把它和指針混在一起,就很容易讓人摸不著頭腦。所以,要想寫對(duì)鏈表代碼,首先就要理解好指針。

  有些語(yǔ)言有“指針”的概念,比如 C 語(yǔ)言;有些語(yǔ)言沒有指針,取而代之的是“引用”,比如 Java、Python。不管是“指針”還是“引用”,實(shí)際上,它們的意思都是一樣的,都是存儲(chǔ)所指對(duì)象的內(nèi)存地址。

  將某個(gè)變量賦值給指針,實(shí)際上就是將這個(gè)變量的地址賦值給指針,或者反過來(lái)說(shuō),指針中存儲(chǔ)了這個(gè)變量的內(nèi)存地址,指向了這個(gè)變量,通過指針就能找到這個(gè)變量。

  p->next=q。這行代碼是說(shuō),p 結(jié)點(diǎn)中的 next 指針存儲(chǔ)了 q 結(jié)點(diǎn)的內(nèi)存地址。p->next=p->next->next。這行代碼表示,p 結(jié)點(diǎn)的 next 指針存儲(chǔ)了 p 結(jié)點(diǎn)的下下一個(gè)結(jié)點(diǎn)的內(nèi)存地址。

C語(yǔ)言標(biāo)準(zhǔn)規(guī)定,對(duì)于一個(gè)符號(hào)的定義,編譯器總是從它的名字開始讀取,然后按照優(yōu)先級(jí)順序依次解析。對(duì),從名字開始,不是從開頭也不是從末尾,這是理解復(fù)雜指針的關(guān)鍵! 

 對(duì)于初學(xué)者,有幾種運(yùn)算符的優(yōu)先級(jí)非常容易混淆,它們的優(yōu)先級(jí)從高到低依次是:

定義中被括號(hào)( )括起來(lái)的那部分。后綴操作符:括號(hào)( )表示這是一個(gè)函數(shù),方括號(hào)[ ]表示這是一個(gè)數(shù)組。前綴操作符:星號(hào)*表示“指向xxx的指針”。

  在本章中我們最多只用到二級(jí)指針因此將對(duì)二級(jí)指針做下說(shuō)明。比如int **p,是什么意思?

首先看 *p 。 “*”表示P是一個(gè)指針。但是是指向什么的指針呢?

在看前面的int* ,int是一個(gè)整型類型后面加一個(gè)“*”表示整型類型的指針。

  *p就是指向整型類型指針的指針。p保存的是整型類型指針的地址。

二、警惕指針丟失和內(nèi)存泄漏

  不知道你有沒有這樣的感覺,寫鏈表代碼的時(shí)候,指針指來(lái)指去,一會(huì)兒就不知道指到哪里了。所以,我們?cè)趯懙臅r(shí)候,一定注意不要弄丟了指針。指針往往都是怎么弄丟的呢?我拿單鏈表的插入操作為例來(lái)給你分析一下。

  指針往往都是怎么弄丟的呢?我拿單鏈表的插入操作為例來(lái)給你分析一下。

  如圖所示,我們希望在結(jié)點(diǎn) a 和相鄰的結(jié)點(diǎn) b 之間插入結(jié)點(diǎn) x,假設(shè)當(dāng)前指針 p 指向結(jié)點(diǎn) a。如果我們將代碼實(shí)現(xiàn)變成下面這個(gè)樣子,就會(huì)發(fā)生指針丟失和內(nèi)存泄露。

p->next = x; // 將p的next指針指向x結(jié)點(diǎn);
x->next = p->next; // 將x的結(jié)點(diǎn)的next指針指向b結(jié)點(diǎn);

  初學(xué)者經(jīng)常會(huì)在這兒犯錯(cuò)。p->next 指針在完成第一步操作之后,已經(jīng)不再指向結(jié)點(diǎn) b 了,而是指向結(jié)點(diǎn) x。第 2 行代碼相當(dāng)于將 x 賦值給 x->next,自己指向自己。因此,整個(gè)鏈表也就斷成了兩半,從結(jié)點(diǎn) b 往后的所有結(jié)點(diǎn)都無(wú)法訪問到了。

  對(duì)于有些語(yǔ)言來(lái)說(shuō),比如 C 語(yǔ)言,內(nèi)存管理是由程序員負(fù)責(zé)的,如果沒有手動(dòng)釋放結(jié)點(diǎn)對(duì)應(yīng)的內(nèi)存空間,就會(huì)產(chǎn)生內(nèi)存泄露。所以,我們插入結(jié)點(diǎn)時(shí),一定要注意操作的順序,要先將結(jié)點(diǎn) x 的 next 指針指向結(jié)點(diǎn) b,再把結(jié)點(diǎn) a 的 next 指針指向結(jié)點(diǎn) x,這樣才不會(huì)丟失指針,導(dǎo)致內(nèi)存泄漏。所以,對(duì)于剛剛的插入代碼,我們只需要把第 1 行和第 2 行代碼的順序顛倒一下就可以了。同理,刪除鏈表結(jié)點(diǎn)時(shí),也一定要記得手動(dòng)釋放內(nèi)存空間,否則,也會(huì)出現(xiàn)內(nèi)存泄漏的問題。當(dāng)然,對(duì)于像 Java 這種虛擬機(jī)自動(dòng)管理內(nèi)存的編程語(yǔ)言來(lái)說(shuō),就不需要考慮這么多了。

三、單鏈表反轉(zhuǎn)的C語(yǔ)言實(shí)現(xiàn)

  使用p指向第一個(gè)結(jié)點(diǎn),cur指向當(dāng)前結(jié)點(diǎn),每次把cur->next結(jié)點(diǎn)摘掉放在p節(jié)點(diǎn)前面。然后更新p結(jié)點(diǎn)指向頭結(jié)點(diǎn)。具體實(shí)現(xiàn)代碼如下所示

 void revers_list(list1 **l)
 {
   if(!(*l)||!l)
   {
     exit(-1);
   }
 
   list1 *start=*l;
   list1 *start_next=NULL;
 
   while (start->next)
   {
     // 獲取當(dāng)前節(jié)點(diǎn)的后繼節(jié)點(diǎn) 
     start_next = start->next; 
     // 將后繼節(jié)點(diǎn)摘鏈 72   
      start->next = start_next->next; 
     // 將后繼節(jié)點(diǎn)提到最前面 
     start_next->next = *l; 
     // 更新頭節(jié)點(diǎn) 
     *l = start_next;
   }
 }

到此這篇關(guān)于C語(yǔ)言實(shí)現(xiàn)單鏈表反轉(zhuǎn)的文章就介紹到這了,更多相關(guān)C語(yǔ)言 單鏈表反轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C/C++編程語(yǔ)言中的指針(pointer)你了解嗎

    C/C++編程語(yǔ)言中的指針(pointer)你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C/C++編程語(yǔ)言中的指針,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C語(yǔ)言中改變目錄的相關(guān)操作函數(shù)詳解

    C語(yǔ)言中改變目錄的相關(guān)操作函數(shù)詳解

    這篇文章主要介紹了C語(yǔ)言中改變目錄的相關(guān)操作函數(shù)詳解,分別是fchdir()函數(shù)和rewinddir()函數(shù)的使用方法,需要的朋友可以參考下
    2015-09-09
  • C++中based for循環(huán)的實(shí)現(xiàn)

    C++中based for循環(huán)的實(shí)現(xiàn)

    C++中的范圍for循環(huán)是一種簡(jiǎn)潔的遍歷容器的方法,本文主要介紹了C++中based for循環(huán)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • C++類的定義和對(duì)象的創(chuàng)建詳解

    C++類的定義和對(duì)象的創(chuàng)建詳解

    本篇文章重點(diǎn)講解了兩種創(chuàng)建對(duì)象的方式:一種是在棧上創(chuàng)建,形式和定義普通變量類似;另外一種是在堆上使用 new 關(guān)鍵字創(chuàng)建,必須要用一個(gè)指針指向它,下面和小編一起來(lái)學(xué)習(xí)下面為文章的內(nèi)容
    2021-09-09
  • C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理圖文詳解

    C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理圖文詳解

    在編寫程序時(shí),通常并不知道需要處理的數(shù)據(jù)量,或者難以評(píng)估所需處理數(shù)據(jù)量的變動(dòng)程度,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中動(dòng)態(tài)內(nèi)存管理的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 對(duì)一個(gè)數(shù)組進(jìn)行zig-zag重新排列

    對(duì)一個(gè)數(shù)組進(jìn)行zig-zag重新排列

    本文介紹了“對(duì)一個(gè)數(shù)組進(jìn)行zig-zag重新排列”,需要的朋友可以參考一下
    2013-03-03
  • C語(yǔ)言二叉樹與堆的概念與實(shí)現(xiàn)

    C語(yǔ)言二叉樹與堆的概念與實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言二叉樹與堆的相關(guān)資料,文章詳細(xì)記錄了他們的相關(guān)概念以及如何實(shí)現(xiàn)的,通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • c++實(shí)現(xiàn)reactor高并發(fā)服務(wù)器的詳細(xì)教程

    c++實(shí)現(xiàn)reactor高并發(fā)服務(wù)器的詳細(xì)教程

    這篇文章主要介紹了c++從零實(shí)現(xiàn)reactor高并發(fā)服務(wù)器,包括環(huán)境準(zhǔn)備和基礎(chǔ)知識(shí)介紹,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • C++索引越界的解決方法

    C++索引越界的解決方法

    本文主要介紹了C++索引越界的解決方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語(yǔ)言宏定義使用分析

    C語(yǔ)言宏定義使用分析

    在宏定義中,“宏名稱”和“宏字符串”是通過“空格”來(lái)區(qū)分的,某些朋友不要混淆了,接下來(lái)請(qǐng)祥看本文
    2012-12-12

最新評(píng)論

九龙坡区| 平顶山市| 视频| 弋阳县| 岳阳县| 红河县| 浦江县| 汽车| 彰武县| 崇州市| 嘉义市| 叙永县| 莎车县| 禹州市| 旬阳县| 馆陶县| 南平市| 沅江市| 民县| 静宁县| 新和县| 崇礼县| 新巴尔虎左旗| 阿坝县| 彭州市| 西平县| 胶南市| 灌阳县| 郎溪县| 涿州市| 丰顺县| 万载县| 银川市| 阳东县| 阿荣旗| 宣威市| 辽中县| 武宣县| 和政县| 新巴尔虎左旗| 和静县|