[例7.10]建立一個三個結(jié)點的鏈表,存放學(xué)生數(shù)據(jù)。 為簡單起見, 我們假定學(xué)生數(shù)據(jù)結(jié)構(gòu)中只有學(xué)號和年齡兩項。
可編寫一個建立鏈表的函數(shù)creat。程序如下:
#define NULL 0
#define TYPE struct stu
#define LEN sizeof (struct stu)
struct stu
{
int num;
int age;
struct stu *next;
};
TYPE *creat(int n)
{
struct stu *head,*pf,*pb;
int i;
for(i=0;i { pb=(TYPE*) malloc(LEN); printf("input Number and Age\n"); scanf("%d%d",&pb->num,&pb->age); if(i==0) pf=head=pb; else pf->next=pb; pb->next=NULL; pf=pb; } return(head); } 在函數(shù)外首先用宏定義對三個符號常量作了定義。這里用TYPE表示struct stu,用LEN表示sizeof(struct stu)主要的目的是為了在以下程序內(nèi)減少書寫并使閱讀更加方便。結(jié)構(gòu)stu定義為外部類型,程序中的各個函數(shù)均可使用該定義。 creat函數(shù)用于建立一個有n個結(jié)點的鏈表,它是一個指針函數(shù),它返回的指針指向stu結(jié)構(gòu)。在creat函數(shù)內(nèi)定義了三個stu結(jié)構(gòu)的指針變量。head為頭指針,pf 為指向兩相鄰結(jié)點的前一結(jié)點的指針變量。pb為后一結(jié)點的指針變量。在for語句內(nèi),用malloc函數(shù)建立長度與stu長度相等的空間作為一結(jié)點,首地址賦予pb。然后輸入結(jié)點數(shù)據(jù)。如果當(dāng)前結(jié)點為第一結(jié)點(i==0),則把pb值 (該結(jié)點指針)賦予head和pf。如非第一結(jié)點,則把pb值賦予pf 所指結(jié)點的指針域成員next。而pb所指結(jié)點為當(dāng)前的最后結(jié)點,其指針域賦NULL。 再把pb值賦予pf以作下一次循環(huán)準(zhǔn)備。
creat函數(shù)的形參n,表示所建鏈表的結(jié)點數(shù),作為for語句的循環(huán)次數(shù)。圖7.4表示了creat函數(shù)的執(zhí)行過程。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |