上期講解了靜態(tài)鏈表的實(shí)例,但是靜態(tài)鏈表建立的節(jié)點(diǎn)數(shù)量有限,畢竟是手工建立,難免也會(huì)出問(wèn)題, 所以這期講講怎么使用動(dòng)態(tài)的方式建立鏈表,也就是 動(dòng)態(tài)鏈表 !
關(guān)鍵詞:動(dòng)態(tài)鏈表;
01建立鏈表
1.1、建立動(dòng)態(tài)鏈表
建立鏈表所需要的頭文件,代母如下:
#include
#include
#include
需要使用宏定義定義相關(guān)變量,代碼如下:
#define LEN sizeof(struct Student)//宏定義節(jié)點(diǎn)長(zhǎng)度得命名
#define TYPE struct Student //宏定義結(jié)構(gòu)體變量命名
需創(chuàng)建一個(gè)結(jié)構(gòu)體,代碼如下:
struct Student //定義一個(gè)學(xué)生類(lèi)型結(jié)構(gòu)體,包括學(xué)號(hào),分?jǐn)?shù)
{
long num;
float score;
struct Student* next; //next是指針變量,指向結(jié)構(gòu)體變量
};//指向結(jié)構(gòu)體對(duì)象得指針變量既可以指向結(jié)構(gòu)體變量,也可以指向結(jié)構(gòu)體數(shù)組中得元素
建立鏈表函數(shù),代碼如下:
TYPE* Creat(void) //定義函數(shù),此函數(shù)返回一個(gè)指向鏈表頭的指針
{
TYPE* head; //定義頭指針
TYPE* p1,*p2; //定義兩個(gè) 指針變量用來(lái)相互保存
number = 0; //開(kāi)始時(shí),結(jié)點(diǎn)清零
p1 = p2 = (TYPE*)malloc(LEN); //創(chuàng)建存儲(chǔ)空間
printf("請(qǐng)按格式輸入學(xué)生學(xué)號(hào),分?jǐn)?shù)\\n"); //輸出提示信息
printf("例如101,1 并以0,0結(jié)束\\n");
scanf("%ld,%f", &p1->num, &p1->score);//按格式輸入第一個(gè)結(jié)點(diǎn)的信息
head = NULL; //第一個(gè)結(jié)點(diǎn)頭指針賦空值
while (p1->num!=0) //循環(huán)直到輸入學(xué)生學(xué)號(hào)為0,就結(jié)束
{
number++; //結(jié)點(diǎn)自增
if (number == 1) //如果只有一個(gè)結(jié)點(diǎn),那么頭指針指向第一個(gè)輸入的結(jié)點(diǎn)
head = p1;
else
p2->next = p1;//如果大于1個(gè),那么要用next保存前一個(gè)結(jié)點(diǎn)的信息
p2 = p1; //保存前一個(gè)結(jié)點(diǎn)信息
p1 = (TYPE*)malloc(LEN);//開(kāi)辟新的結(jié)點(diǎn)
scanf("%ld,%f", &p1->num, &p1->score);//輸入下一個(gè)結(jié)點(diǎn)信息
}
p2->next = NULL; //循環(huán)結(jié)束,將指向信息賦空值
return (head); //返回首地址
}
需編寫(xiě)主函數(shù),代碼如下:
int main()
{
TYPE* pt; //定義一個(gè)結(jié)構(gòu)體指針變量
pt = Creat(); //函數(shù)返回鏈表第一個(gè)結(jié)點(diǎn)的地址
printf("\\nnum:%ld\\nscore:%5.lf\\n", pt->num,pt->score);
//輸出第一個(gè)結(jié)點(diǎn)的成員值
return 0;
}
運(yùn)行程序,最終結(jié)果顯示如圖1-1所示:
圖1-1 運(yùn)行結(jié)果界面
圖1-1中首先按給定的提示方法,輸入信息,并以0,0結(jié)束輸入,最終通過(guò)打印的方式顯示輸出第一個(gè)節(jié)點(diǎn)的信息!
文中最后結(jié)果顯示的是第一個(gè)結(jié)點(diǎn)的內(nèi)容,作為有強(qiáng)大功能的鏈表,對(duì)他的操作當(dāng)然有許多,比如:鏈表的創(chuàng)建,修改,刪除,插入,輸出,排序,反序,清空鏈表的元素,求鏈表的長(zhǎng)度等等!
02建立鏈表
2.1、鏈表的輸出
鏈表的的輸出可以使用循環(huán)打印就可以輸出整個(gè)鏈表的數(shù)據(jù),輸出函數(shù)的代碼如下:
void print(TYPE * head)
{
TYPE * p; //定義指針
printf("\\nNOW These %d records are:\\n");//輸出顯示信息
p = head; //使p指向第一個(gè)結(jié)點(diǎn)
if(head!=NULL) //輸出第一個(gè)結(jié)點(diǎn)后的信息
do {
printf("%ld %5.1f\\n",p->num,p->score);
p = p->next; //指向下個(gè)結(jié)點(diǎn)
} while (p != NULL);
}
主函數(shù)的代碼如下:
int main()
{
TYPE * pt; //定義一個(gè)結(jié)構(gòu)體指針變量
pt = Creat(); //函數(shù)返回鏈表第一個(gè)結(jié)點(diǎn)的地址
print(pt); //輸出調(diào)用
return 0;
}
鏈表的修改、刪除、插入有點(diǎn)理解費(fèi)勁,所以留給下期講解,要弄懂鏈表還是推薦邊寫(xiě)邊看,下期講解鏈表的修改、刪除、插入!
評(píng)論
查看更多