在這么卷的時代,我覺得硬件工程師還是 要掌握基本的C語言編寫能力,鏈表在學(xué)生階段是一個比較難的知識點(diǎn),可能有些同學(xué)上完一個大學(xué)都不會鏈表的編寫,但是在未來工作中, 鏈表應(yīng)用不管在嵌入式行業(yè)還是互聯(lián)網(wǎng)行業(yè)都應(yīng)用的非常基礎(chǔ),所以這個知識點(diǎn)是有必要全面掌握的。 下面將手把手教你,用開發(fā)軟件寫一個簡單的靜態(tài)鏈表程序。
關(guān)鍵詞:靜態(tài)鏈表;
01什么是鏈表
1.1、通俗易懂的解釋
鏈表是一種常見的重要的數(shù)據(jù)結(jié)構(gòu),它是動態(tài)地進(jìn)行存儲分配的一種結(jié)構(gòu),鏈表和數(shù)組比較,不用事先確定存儲空間,而是根據(jù)需要開辟內(nèi)存單元。 圖1-1是最簡單的一種鏈表(單向鏈表)的結(jié)構(gòu):
圖1-1 單向鏈表結(jié)構(gòu)圖
圖1-1中,第0個結(jié)點(diǎn)稱為 頭結(jié)點(diǎn) ,它存放有第一個結(jié)點(diǎn)的首地址,它沒有數(shù)據(jù),只是一個 指針變量 。
以下的每個結(jié)點(diǎn)都分為兩個域,一個是 數(shù)據(jù)域 ,存放各種實際的數(shù)據(jù),如學(xué)號 num,姓名 name,性別 sex 和成績score 等。
另一個域為 指針域 ,存放下一結(jié)點(diǎn)的首地址。 鏈表中的每一個結(jié)點(diǎn)都是同一種結(jié)構(gòu)類型。
1.2、環(huán)境搭建
用的Visual Studio 2019軟件。
1.3、建立新項目(C語言)
首先,打開軟件,點(diǎn)擊【創(chuàng)建新項目】,如圖1-3所示:
圖1-3 創(chuàng)建新項目
然后在新項目中點(diǎn)擊【空項目】,如圖1-4所示:
圖1-4 點(diǎn)擊空項目
接著,配置【項目名稱】和【項目儲存位置】,如圖1-5所示:
圖1-5 配置項目
最后,在【源文件】中添加【C文件】,如圖1-6所示:
圖1-6 添加C文件
02建立鏈表
2.1、建立靜態(tài)鏈表
建立鏈表所需要的頭文件,代母如下:
#include
#include
需要使用宏定義定義相關(guān)變量,代碼如下:
#define LEN sizeof(struct Student)//宏定義節(jié)點(diǎn)長度得命名
#define TYPE struct Student //宏定義結(jié)構(gòu)體變量命名
需創(chuàng)建一個結(jié)構(gòu)體,代碼如下:
struct Student //定義一個學(xué)生類型結(jié)構(gòu)體,包括學(xué)號,分?jǐn)?shù)
{
長數(shù);
浮動分?jǐn)?shù);
struct Student* next; //next是指針變量,指向結(jié)構(gòu)體變量
};//指向結(jié)構(gòu)體對象得指針變量既可以指向結(jié)構(gòu)體變量,也可以指向結(jié)構(gòu)體數(shù)組中得元素
需編寫主函數(shù),代碼如下:
int main()
{
TYPE* head,*p; //定義頭指針
struct Student a,b,c; //定義三個結(jié)構(gòu)體變量
a.num = 101; a.score = 20; //分別對三個結(jié)點(diǎn)賦值
b.num = 102;b.分?jǐn)?shù) = 20;
c.num = 103;c.分?jǐn)?shù) = 20;
/*1、A.B則A為對象或者結(jié)構(gòu)體
2、A->B則A為指針,->是成員提取,A->B是提取A中的成員B,A只能是指向類、結(jié)構(gòu)、聯(lián)合的指針; */
頭 = &a;
a.next = &b;
b.下一個 = &c;
c.next = 空;
p = head; //把首地址給變量
的
{
printf("%ld %5.1f\\n",p->num,p->score);//輸出每個結(jié)點(diǎn)信息
p = p->next; //使P指向下一個結(jié)點(diǎn)
} while (p != NULL); //直到指針域指向空值
返回 0;
}
運(yùn)行程序,最終結(jié)果顯示如圖1-7所示:
圖1-7 運(yùn)行結(jié)果界面
圖1-7最終將鏈表各個成員的數(shù)據(jù)逐個輸出,表明建立的鏈表是正確的。
將第一個結(jié)點(diǎn)的起始地址賦值給頭指針head,將第二個結(jié)點(diǎn)的起始地址賦值給第一個結(jié)點(diǎn)的next成員,將第二個結(jié)點(diǎn)的起始地址賦給第一個結(jié)點(diǎn)的next… 第三個結(jié)點(diǎn)的next賦值為NULL,這就形成了簡單的鏈表。
但是這種是手動逐個建立的鏈表,簡稱【靜態(tài)鏈表】,這種對于成員數(shù)目一定的情況比較適用,但是對于成員數(shù)目很多的情況,就不能使用這種方法了,比較繁瑣,所以需要使用動態(tài)的方式添加鏈表,下期講解動態(tài)鏈表!
評論