C語(yǔ)言編程學(xué)習(xí):鏈表的來(lái)源分析

C語(yǔ)言是面向過(guò)程的,而C++是面向?qū)ο蟮?/p>

C和C++的區(qū)別:

C是一個(gè)結(jié)構(gòu)化語(yǔ)言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過(guò)一個(gè)過(guò)程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過(guò)程(事務(wù))控制)。

C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問(wèn)題域,這樣就可以通過(guò)獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過(guò)程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”。

C與C++的最大區(qū)別:在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語(yǔ)言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯(cuò)!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒(méi)有好的算法,一樣不行。而且,“C加上好的設(shè)計(jì)”也能寫(xiě)出非常好的東西。

C語(yǔ)言中的鏈表是重點(diǎn),也是難點(diǎn),而且意義非凡。對(duì)鏈表的的抽象和恐懼是源于對(duì)它的來(lái)龍去脈的不明白。所以很有必要對(duì)它的發(fā)展淵源做透徹分析。

鏈表的單位是節(jié)點(diǎn),而節(jié)點(diǎn)源于復(fù)合數(shù)據(jù)類型:結(jié)構(gòu)體;

節(jié)點(diǎn)和結(jié)構(gòu)體的區(qū)別就是看是否有指針域,目的就是想找到下一個(gè)節(jié)點(diǎn);

結(jié)構(gòu)體形如:

struct Ghost

{

char name[30];

int age;

int height;

char addr[30];

};

節(jié)點(diǎn)形如:

struct Ghost

{

char name[30];

int age;

int height;

char addr[30];

struct Ghost *next;

};

現(xiàn)在來(lái)看一下創(chuàng)建1個(gè)節(jié)點(diǎn)的情況:

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 七三零,一三零,二二一 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!

效果如下:

那么申請(qǐng)多個(gè)節(jié)點(diǎn)呢?如3個(gè)。

核心代碼如下:

//堆中申請(qǐng)變量

struct Ghost *g1 = (struct Ghost*)malloc(sizeof(struct Ghost));

struct Ghost *g2 = (struct Ghost*)malloc(sizeof(struct Ghost));

struct Ghost *g3 = (struct Ghost*)malloc(sizeof(struct Ghost));

//賦值

strcpy(g1->name, "聶小倩");

g1->age = 22;

g1->height = 165;

strcpy(g1->addr, "蘭若寺");

g1->next = NULL;

//賦值

strcpy(g2->name, "付清風(fēng)");

g2->age = 23;

g2->height = 166;

strcpy(g2->addr, "十里亭");

g2->next = NULL;

//賦值

strcpy(g3->name, "東方不敗");

g3->age = 24;

g3->height = 167;

strcpy(g3->addr, "黑木崖");

g3->next = NULL;

//遍歷

printf("姓名:%s ", g1->name);

printf("年齡:%d ", g1->age);

printf("身高:%d ", g1->height);

printf("地址:%s ", g1->addr);

//遍歷

printf("姓名:%s ", g2->name);

printf("年齡:%d ", g2->age);

printf("身高:%d ", g2->height);

printf("地址:%s ", g2->addr);

//遍歷

printf("姓名:%s ", g3->name);

printf("年齡:%d ", g3->age);

printf("身高:%d ", g3->height);

printf("地址:%s ", g3->addr);

效果圖:

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 七三零,一三零,二二一 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!

成功是成功了,但這很原始,可以改進(jìn)的:借助成員指針的力量自動(dòng)去找下一個(gè),讓鏈起來(lái)!

對(duì)賦值做改動(dòng):

那么遍歷就可以改進(jìn)了:

效果:

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 七三零,一三零,二二一 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!

這樣,我只要知道第1個(gè)節(jié)點(diǎn)的位置,后面的就可以一股腦的扯出來(lái)。這就是鏈表。

特點(diǎn):鏈表是一連串節(jié)點(diǎn)鏈起來(lái)的,是線性特點(diǎn)。只要拿第1個(gè)節(jié)點(diǎn),就可以把一堆的節(jié)點(diǎn)都找到。就像貪吃蛇一樣,蛇頭走到哪里,蛇身和蛇尾就跟到哪里。

和數(shù)組類似,數(shù)組的第1個(gè)元素的首地址就是數(shù)組的地址;鏈表的第1個(gè)節(jié)點(diǎn)的地址就是鏈表的首地址;

接下來(lái)就可以封裝出操作鏈表的函數(shù)了,如:遍歷鏈表,添加節(jié)點(diǎn),刪除節(jié)點(diǎn),統(tǒng)計(jì)節(jié)點(diǎn)。

這些是C/C++能做的

服務(wù)器開(kāi)發(fā)工程師、人工智能、云計(jì)算工程師、信息安全(黑客反黑客)、大數(shù)據(jù) 、數(shù)據(jù)平臺(tái)、嵌入式工程師、流媒體服務(wù)器、數(shù)據(jù)控解、圖像處理、音頻視頻開(kāi)發(fā)工程師、游戲服務(wù)器、分布式系統(tǒng)、游戲輔助等

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容