版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第9章 用戶自己建立數(shù)據(jù)類型,9.1 定義和使用結(jié)構(gòu)體變量9.2 使用結(jié)構(gòu)體數(shù)組9.3 結(jié)構(gòu)體指針9.4 用指針處理鏈表9.5 共用體類型9.6 使用枚舉類型9.7 用typedef聲明新類型名,9.1 定義和使用結(jié)構(gòu)體變量,9.1.1 自己建立結(jié)構(gòu)體類型9.1.2 定義結(jié)構(gòu)體類型變量9.1.3 結(jié)構(gòu)體變量的初始化和引用,9.1.1 自己建立結(jié)構(gòu)體類型,用戶自己建立由不同類型數(shù)據(jù)組成的組合型的數(shù)據(jù)結(jié)構(gòu),它稱為結(jié)構(gòu)體例如
2、,一個學(xué)生的學(xué)號、姓名、性別、年齡、成績、家庭地址等項,是屬于同一個學(xué)生的,因此組成一個組合數(shù)據(jù),如student_1的變量,反映它們之間的內(nèi)在聯(lián)系,9.1.1 自己建立結(jié)構(gòu)體類型,struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; };,由程序設(shè)計者指定了一
3、個結(jié)構(gòu)體類型struct Student它包括num,name,sex,age,score,addr等不同類型的成員,9.1.1 自己建立結(jié)構(gòu)體類型,聲明一個結(jié)構(gòu)體類型的一般形式為: struct 結(jié)構(gòu)體名 { 成員表列 };,類型名 成員名;,9.1.1 自己建立結(jié)構(gòu)體類型,說明:結(jié)構(gòu)體類型的名字是由一個關(guān)鍵字struct和結(jié)構(gòu)體名組合而成的。結(jié)構(gòu)體名由用戶指定,又稱“結(jié)構(gòu)體標(biāo)記”。
4、花括號內(nèi)是該結(jié)構(gòu)體所包含的子項,稱為結(jié)構(gòu)體成員。“成員表列” 也稱為“域表” ,每個成員是結(jié)構(gòu)體的一個域,成員命名規(guī)則與變量名相同。,9.1.1 自己建立結(jié)構(gòu)體類型,說明:(1)結(jié)構(gòu)體類型并非只有一種,而是可以設(shè)計出許多種結(jié)構(gòu)體類型,例如struct Teacherstruct Workerstruct Date 等結(jié)構(gòu)體類型各自包含不同的成員,9.1.1 自己建立結(jié)構(gòu)體類型,說明:(2) 成員可以屬于另一個結(jié)構(gòu)體類型。
5、 struct Date { int month; int day; int year; }; struct Stu { int num;char name[20]; char sex;int age; struct Date birthday; char addr[30]; };,9.1.1 自己建立結(jié)構(gòu)體類
6、型,說明:(2) 成員可以屬于另一個結(jié)構(gòu)體類型。,9.1.2 定義結(jié)構(gòu)體類型變量,前面只是建立了一個結(jié)構(gòu)體類型,它相當(dāng)于一個模型,并沒有定義變量,其中并無具體數(shù)據(jù),系統(tǒng)對之也不分配存儲單元。相當(dāng)于設(shè)計好了圖紙,但并未建成具體的房屋。為了能在程序中使用結(jié)構(gòu)體類型的數(shù)據(jù),應(yīng)當(dāng)定義結(jié)構(gòu)體類型的變量,并在其中存放具體的數(shù)據(jù)。,9.1.2 定義結(jié)構(gòu)體類型變量,1. 先聲明結(jié)構(gòu)體類型,再定義該類型變量聲明結(jié)構(gòu)體類型struct Student
7、,可以用它來定義變量 struct Student student1,student2;,結(jié)構(gòu)體類型名,結(jié)構(gòu)體變量名,9.1.2 定義結(jié)構(gòu)體類型變量,1. 先聲明結(jié)構(gòu)體類型,再定義該類型變量聲明結(jié)構(gòu)體類型struct Student,可以用它來定義變量 struct Student student1,student2;,student1,student2,9.1.2 定義結(jié)構(gòu)體類型變量,2.在聲明類型的同時定義變量str
8、uct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; } student1,student2;,9.1.2 定義結(jié)構(gòu)體類型變量,3. 不指定類型名而直接定義結(jié)構(gòu)體類型變量其一般形式為: struct { 成員表列 } 變量名表列; 指定
9、了一個無名的結(jié)構(gòu)體類型 。,9.1.2 定義結(jié)構(gòu)體類型變量,(1) 結(jié)構(gòu)體類型與結(jié)構(gòu)體變量是不同的概念,不要混同。只能對變量賦值、訪問或運算,而不能對一個類型賦值、訪問或運算。在編譯時,對類型是不分配空間的,只對變量分配空間。,9.1.2 定義結(jié)構(gòu)體類型變量,(2) 結(jié)構(gòu)體類型中的成員名可以與程序中的變量名相同,但二者不代表同一對象。(3) 對結(jié)構(gòu)體變量中的成員(即“域”),可以單獨使用,它的作用與地位相當(dāng)于普通變量。(對成員的引用見
10、下例),例9.1 把一個學(xué)生的信息(包括學(xué)號、姓名、性別、住址)放在一個結(jié)構(gòu)體變量中,然后輸出這個學(xué)生的信息。解題思路:自己建立一個結(jié)構(gòu)體類型,包括有關(guān)學(xué)生信息的各成員(定義)用它定義結(jié)構(gòu)體變量,同時賦以初值(賦值)輸出該結(jié)構(gòu)體變量的各成員(輸出),9.1.3 結(jié)構(gòu)體變量的初始化和引用,#include int main(){struct Student { long int
11、num; char name[20]; char sex; char addr[20]; }a={10101,“Li Lin”,‘M’, “123 Beijing Road”}; printf("NO.:%ld\nname:%s\n sex:%c\naddress:%s\
12、n", a.num,a.name,a.sex,a.addr); return 0;} /* . 為成員運算符,在所有運算符中優(yōu)先級最高*/,,,,,#include int main(){struct Student { long int num; char name[20]; char sex;
13、 char addr[20]; }a={10101,“Li Lin”,‘M’, “123 Beijing Road”}; printf("NO.:%ld\nname:%s\n sex:%c\naddress:%s\n", a.num,a.name,a.sex,a.add
14、r); return 0;},{,},#include int main(){struct Student { long int num; char name[20]; char sex; char addr[20]; }a={10101,“Li Lin”,‘M’, “12
15、3 Beijing Road”}; ……},a.num=10010; 對,printf(“%s\n”,a); 不對,#include int main(){struct Student { long int num; char name[20]; char sex; char addr[20]; }a=
16、{10101,“Li Lin”,‘M’, “123 Beijing Road”}; ……},b=a; 對,struct Student b;,b.num++; 對,#include int main(){struct Student { long int num; char name[20];
17、 char sex; char addr[20]; }a={10101,“Li Lin”,‘M’, “123 Beijing Road”}; ……},scanf(″%ld″,&a.num); 對,printf(″%o″,&a); 對,scanf(“%ld,%s,%c,%s\n”,&a);
18、錯,#include int main(){ struct Date { int month; int day; int year; }; struct Stu { int num;char name[20]; char sex;int age; struct Date birthday; char addr[30]; }a,b;,a.birt
19、hday.month=12; 對,a.age=10; b.age=9; 對,sum=a.age+b.age; 對,例9.2 輸入兩個學(xué)生的學(xué)號、姓名和成績,輸出成績較高學(xué)生的學(xué)號、姓名和成績解題思路:(1)定義兩個屬于同一結(jié)構(gòu)體類型的結(jié)構(gòu)體變量student1和student2;(2)分別輸入兩個學(xué)生的學(xué)號、姓名和成績;(3)比較兩個學(xué)生的成績,如果學(xué)生1的成績高于學(xué)生2,就輸出學(xué)生1的全部信息,如果學(xué)生2的成績高于
20、學(xué)生1,就輸出學(xué)生2的全部信息。如果二者相等,輸出2個學(xué)生的全部信息,#include int main(){ struct Student { int num; char name[20]; float score; }student1,student2; scanf("%d%s%f",&student1.num, stud
21、ent1.name, &student1.score); scanf(“%d%s%f”,&student2.num, student2.name, &student2.score);,不能加&,printf("The higher score is:\n"); if (student1.score>student2.score) printf(
22、"%d %s %6.2f\n",student1.num, student1.name, student1.score); else if (student1.score<student2.score) printf("%d %s %6.2f\n",student2.num, student2.name, student2.sc
23、ore); else {printf("%d %s %6.2f\n",student1.num, student1.name, student1.score); printf("%d %s %6.2f\n",student2.num, student2.name, student2.score); } return 0;},程序
24、分析:(1) student1和student2是struct Student類型的變量,在3個成員中分別存放學(xué)號、姓名和成績;(2) 用scanf函數(shù)對結(jié)構(gòu)體變量賦值時,必須分別輸入它們成員的值,不能在scanf函數(shù)中使用結(jié)構(gòu)體變量名一攬子輸入全部成員的值;(3) 根據(jù)student1.score和student2.score的比較結(jié)果,輸出不同學(xué)生的信息。結(jié)構(gòu)體是“組合項”,各成員之間相互關(guān)聯(lián),是結(jié)構(gòu)體的特點。,9.2 使用結(jié)
25、構(gòu)體數(shù)組,9.2.1 定義結(jié)構(gòu)體數(shù)組9.2.2 結(jié)構(gòu)體數(shù)組的應(yīng)用舉例,9.2.1定義結(jié)構(gòu)體數(shù)組,例9.3 有3個候選人,每個選民只能投票選一人,要求編一個統(tǒng)計選票的程序,先后輸入被選人的名字,最后輸出各人得票結(jié)果。,9.2.1定義結(jié)構(gòu)體數(shù)組,解題思路:設(shè)一個結(jié)構(gòu)體數(shù)組,數(shù)組中包含3個元素每個元素中的信息應(yīng)包括候選人的姓名(字符型)和得票數(shù)(整型)依次輸入被選人的姓名,然后與數(shù)組元素中的“姓名”成員比較,如果相同,就給這個元素中
26、的“得票數(shù)”成員的值加1輸出所有元素的信息(每個人的得票數(shù)),#include #include struct Person { char name[20]; int count; }leader[3]={“Li”,0,“Zhang”,0,“Sun”,0};,全局的結(jié)構(gòu)體數(shù)組,name,count,leader[0],Li,0,Zhang,
27、0,Sun,0,int main(){ int i,j; char leader_name[20]; for (i=1;i<=10;i++){ scanf(“%s”,leader_name); for(j=0;j<3;j++) if(strcmp(leader_name, leader[j].name)==0)
28、 leader[j].count++; } for(i=0;i<3;i++) printf("%5s:%d\n“,leader[i].name, leader[i].count); return 0;},leader[j].count=leader[j].count+1;,,int main(){ int i,j; cha
29、r leader_name[20]; for (i=1;i<=10;i++){ scanf(“%s”,leader_name); for(j=0;j<3;j++) if(strcmp(leader_name, leader[j].name)==0) leader[j].count++; } for
30、(i=0;i<3;i++) printf("%5s:%d\n“,leader[i].name, leader[i].count); return 0;},,,說明:(1)定義結(jié)構(gòu)體數(shù)組一般形式是① struct 結(jié)構(gòu)體名 {成員表列} 數(shù)組名[數(shù)組長度];② 先聲明一個結(jié)構(gòu)體類型,然后再用此類型定義結(jié)構(gòu)體數(shù)組: 結(jié)構(gòu)體類型
31、 數(shù)組名[數(shù)組長度]; 如: struct Person leader[3];,說明:(2)對結(jié)構(gòu)體數(shù)組初始化的形式是在定義數(shù)組的后面加上:={初值表列}; 如:struct Person leader[3]= {"Li",0,"Zhang",0,"Fun",0};,9.2.2 結(jié)構(gòu)體數(shù)組的應(yīng)用舉例,例9.4 有n個學(xué)生的信息(包括學(xué)號、姓名、成績
32、),要求按照成績的高低順序輸出各學(xué)生的信息。解題思路:用結(jié)構(gòu)體數(shù)組存放n個學(xué)生信息,采用選擇法對各元素進(jìn)行排序(進(jìn)行比較的是各元素中的成績)。/*元素是結(jié)構(gòu)體類型數(shù)據(jù),成績是結(jié)構(gòu)體類型數(shù)據(jù)的一個成員值*/,#include struct Student{ int num; char name[20]; float score; }; int main(){ struct Student stu[5]={{10101,&
33、quot;Zhang",78 }, {10103,"Wang",98.5}, {10106,"Li", 86 }, {10108,“Ling”, 73.5}, {10110,“Fun”, 100 } }; str
34、uct Student temp; const int n = 5 ; int i,j,k;,常變量,若人數(shù)變?yōu)?0,30,#include struct Student{ int num; char name[20]; float score; }; int main(){ struct Student stu[5]={{10101,"Zhang",78 },
35、 {10103,"Wang",98.5}, {10106,"Li", 86 }, {10108,“Ling”, 73.5}, {10110,“Fun”, 100 } }; struct Student temp; const int n
36、= 5 ; int i,j,k;,#define N 5,注意temp的類型,printf("The order is:\n"); for(i=0;istu[k].score) k=j; temp=stu[k]; stu[k]=stu[i]; stu[i]=temp; } for(i=0;i<n;i++) printf("%6d %8s %6
37、.2f\n", stu[i].num,stu[i].name,stu[i].score); printf("\n"); return 0;},寫法上與普通變量一致,,程序分析:(1) 程序中定義了常變量n,在程序運行時不能改變。也可以用符號常量達(dá)到同樣的目的;(2) 在定義結(jié)構(gòu)體數(shù)組時進(jìn)行初始化,將每個學(xué)生的信息用一對花括號包起來,清晰易閱讀;(3)用于交換數(shù)據(jù)的臨時變量
38、temp也必須定義為struct Student類型,以達(dá)到整體互換的目的。,9.3 結(jié)構(gòu)體指針,9.3.1 指向結(jié)構(gòu)體變量的指針9.3.2 指向結(jié)構(gòu)體數(shù)組的指針9.3.3 用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù),9.3.1 指向結(jié)構(gòu)體變量的指針,結(jié)構(gòu)體指針變量既可以指向結(jié)構(gòu)體變量,也可以用來指向結(jié)構(gòu)體數(shù)組中的元素。指向一個結(jié)構(gòu)體變量的指針變量的基類型必須與該結(jié)構(gòu)體變量的類型相同。例如: struct Student *
39、pt;,9.3.1 指向結(jié)構(gòu)體變量的指針,例9.5 通過指向結(jié)構(gòu)體變量的指針變量輸出結(jié)構(gòu)體變量中成員值。解題思路:在已有的基礎(chǔ)上,本題要解決兩個問題:怎樣對結(jié)構(gòu)體變量成員賦值(不用初始化的方法);怎樣通過指向結(jié)構(gòu)體變量的指針訪問結(jié)構(gòu)體變量中成員。,#include #include int main(){ struct Student { long num; char name[20]; c
40、har sex; float score; };……,struct Student stu_1; struct Student * p; p=&stu_1; stu_1.num=10101; strcpy(stu_1.name,“Li Lin”); stu_1.sex='M‘; stu_1.score=89.5; printf(&quo
41、t;No.:%ld\n”,stu_1.num); printf("name:%s\n",stu_1.name); printf("sex:%c\n”,stu_1.sex); printf(”score:%5.1f\n”,stu_1.score); return 0;},stu_1,10101Li LinM89.5,p,struct Student stu_1; s
42、truct Student * p; p=&stu_1; stu_1.num=10101; strcpy(stu_1.name,“Li Lin”); stu_1.sex='M‘; stu_1.score=89.5; printf("No.:%ld\n”,stu_1.num); printf("name:%s\n",stu_1.na
43、me); printf("sex:%c\n”,stu_1.sex); printf(”score:%5.1f\n”,stu_1.score); return 0;},stu_1,10101Li LinM89.5,p,說明:為了使用方便和直觀,C語言允許把(*p).num用p->num來代替(*p).name等價于p->name如果p指向一個結(jié)構(gòu)體變量stu,以下等價:① stu
44、.成員名(如stu.num)② (*p).成員名(如(*p).num) p->成員名(如p->num)/* ->為指向運算符 */,9.3.2 指向結(jié)構(gòu)體數(shù)組的指針,例9.6 有3個學(xué)生的信息,放在結(jié)構(gòu)體數(shù)組中,要求用指向結(jié)構(gòu)體數(shù)組的指針的方法輸出全部學(xué)生的信息。/*注:在既可以用指針方法也可以用下標(biāo)法的時候,初學(xué)者盡量使用下標(biāo)法*/,解題思路:用指向結(jié)構(gòu)體變量的指針處理(1)聲明struct
45、Student,并定義結(jié)構(gòu)體數(shù)組、初始化(2)定義指向struct Student類型指針p(3)使p指向數(shù)組首元素,輸出元素中各成員信息(4)使p指向下一個元素,輸出元素中各成員信息(5)直到遍歷整個數(shù)組為止,#include struct Student { int num; char name[20]; char sex; int age;};struct Stud
46、ent stu[3]={ {10101,"Li Lin",'M',18}, {10102,"Zhang Fun",'M',19}, {10104,"Wang Min",'F',20} };,int main(){ struct Student *
47、p; printf(" No. Name sex age\n"); for(p=stu;pnum, p->name, p->sex, p->age); return 0;},,stu[0],stu[1],stu[2],int main(){ struct Student *p;
48、 printf(" No. Name sex age\n"); for(p=stu;pnum, p->name, p->sex, p->age); return 0;},p,,stu[0],stu[1],stu[2],int main(){ struct Student *p; prin
49、tf(" No. Name sex age\n"); for(p=stu;pnum, p->name, p->sex, p->age); return 0;},p,,stu[0],stu[1],stu[2],int main(){ struct Student *p; printf(&q
50、uot; No. Name sex age\n"); for(p=stu;pnum, p->name, p->sex, p->age); return 0;},p,,stu[0],stu[1],stu[2],9.3.3 用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù),將一個結(jié)構(gòu)體變量的值傳遞給另一個函數(shù),有3個方
51、法。,(1) 用結(jié)構(gòu)體變量的成員作參數(shù)。 例如,用stu[1].num或stu[2].name作函數(shù)實參,將實參值傳給形參。用法和用普通變量作實參是一樣的,屬于“值傳遞”方式。應(yīng)當(dāng)注意實參與形參的類型保持一致。,(2) 用結(jié)構(gòu)體變量作參數(shù)。用結(jié)構(gòu)體變量作實參時,將結(jié)構(gòu)體變量所占的內(nèi)存單元的內(nèi)容全部按順序傳遞給形參,形參也必須是同類型的結(jié)構(gòu)體變量在函數(shù)調(diào)用期間形參也要占用內(nèi)存單元。這種傳遞方式在空間和時間上開銷較大在被調(diào)用函
52、數(shù)期間改變形參(也是結(jié)構(gòu)體變量)的值,不能返回主調(diào)函數(shù),(3)用指向結(jié)構(gòu)體變量(或數(shù)組元素)的指針作實參,將結(jié)構(gòu)體變量(或結(jié)構(gòu)體數(shù)組元素)的地址傳給形參。,例9.7 有n個結(jié)構(gòu)體變量,內(nèi)含學(xué)生學(xué)號、姓名和3門課程的成績。要求輸出平均成績最高的學(xué)生的信息(包括學(xué)號、姓名、3門課程成績和平均成績)。,解題思路:將n個學(xué)生的數(shù)據(jù)表示為結(jié)構(gòu)體數(shù)組。按照功能函數(shù)化的思想,分別用3個函數(shù)來實現(xiàn)不同的功能:用input函數(shù)輸入數(shù)據(jù)和求各學(xué)生平均成績
53、用max函數(shù)找平均成績最高的學(xué)生用print函數(shù)輸出成績最高學(xué)生的信息在主函數(shù)中先后調(diào)用這3個函數(shù),最后得到結(jié)果。本程序假設(shè)n=3,#include #define N 3struct Student{ int num; char name[20]; float score[3]; float aver; };,4個成員,輸入前3個成員值,,計算最后一個成員的值,int
54、main(){ void input(struct Student stu[]); struct Student max(struct Student stu[]); void print(struct Student stu); struct Student stu[N],*p=stu; input(p); print(max(p)); return 0;
55、},void input(struct Student stu[]) { int i; printf("請輸入各學(xué)生的信息: 學(xué)號、姓名、三門課成績:\n"); for(i=0;i<N;i++) {scanf("%d %s %f %f %f", &stu[i].num,stu[i].nam
56、e, &stu[i].score[0],&stu[i].score[1], &stu[i].score[2]); stu[i].aver=(stu[i].score[0]+ stu[i].score[1]+stu[i].score[2])/3.0; }},輸入第1個成員值,輸入第2個成員值,stu[0]
57、,stu[1],stu[2],stu,10101,Li,78 89 98,88.33,i=0,void input(struct Student stu[]) { int i; printf("請輸入各學(xué)生的信息: 學(xué)號、姓名、三門課成績:\n"); for(i=0;i<N;i++) {scanf("%d %s %f %f %f
58、", &stu[i].num,stu[i].name, &stu[i].score[0],&stu[i].score[1], &stu[i].score[2]); stu[i].aver=(stu[i].score[0]+ stu[i].score[1]+stu
59、[i].score[2])/3.0; }},輸入第1個成員值,輸入第2個成員值,stu[0],stu[1],stu[2],stu,10101,Li,78 89 98,88.33,10103,Wang,98.5 87 69,84.83,i=1,void input(struct Student stu[]) { int i; printf("請輸入各學(xué)生的信息:
60、 學(xué)號、姓名、三門課成績:\n"); for(i=0;i<N;i++) {scanf("%d %s %f %f %f", &stu[i].num,stu[i].name, &stu[i].score[0],&stu[i].score[1], &am
61、p;stu[i].score[2]); stu[i].aver=(stu[i].score[0]+ stu[i].score[1]+stu[i].score[2])/3.0; }},輸入第1個成員值,輸入第2個成員值,stu[0],stu[1],stu[2],stu,10101,Li,78 89 98,88.33,10103,Wang,98.5 87 69,8
62、4.83,10106,Sun,88 76.5 89,84.5,i=2,struct Student max(struct Student stu[]) {int i,m=0; for(i=1;istu[m].aver) m=i; return stu[m]; },stu[0],stu[1],stu[2],stu,10101,Li,78 89 98,88.33,10103,Wan
63、g,98.5 87 69,84.83,10106,Sun,88 76.5 89,84.5,最大,,返回,void print(struct Student stud) { printf("\n成績最高的學(xué)生是:\n");printf("學(xué)號:%d\n姓名:%s\n 三門課成績:%5.1f,%5.1f,%5.1f\n 平均成績:%6.
64、2f\n”, stud.num, stud.name,stud.score[0], stud.score[1],stud.score[2],stud.aver); },stud,10101,Li,78 89 98,88.33,10103,Wang,98.5 87 69,84.83,10106,Sun,88 76.5 89,84.5,,num,name,scor
65、e,,aver,stu[0],stu[1],stu[2],以上3個函數(shù)的調(diào)用,情況各不相同:調(diào)用input函數(shù)時,實參是指針變量,形參是結(jié)構(gòu)體數(shù)組,傳遞的是結(jié)構(gòu)體元素的地址,函數(shù)無返回值。調(diào)用max函數(shù)時,實參是指針變量,形參是結(jié)構(gòu)體數(shù)組,傳遞的是結(jié)構(gòu)體元素的地址,函數(shù)的返回值是結(jié)構(gòu)體類型數(shù)據(jù)。調(diào)用print函數(shù)時,實參是結(jié)構(gòu)體變量,形參是結(jié)構(gòu)體變量,傳遞的是結(jié)構(gòu)體變量中各成員的值,函數(shù)無返回值。,9.4 用指針處理鏈表,9.4.
66、1 什么是鏈表9.4.2 建立簡單的靜態(tài)鏈表9.4.3 建立動態(tài)鏈表9.4.4 輸出鏈表,9.4.1 什么是鏈表,鏈表是一種常見的重要的數(shù)據(jù)結(jié)構(gòu)它是動態(tài)地進(jìn)行存儲分配的一種結(jié)構(gòu),,head,1249,1249,A,1356,1356,1475,B,1475,C,1021,1021,D,\0,頭指針,各結(jié)點地址不連續(xù),各結(jié)點含有兩個部分,表尾,9.4.1 什么是鏈表,鏈表是一種常見的重要的數(shù)據(jù)結(jié)構(gòu)它是動態(tài)地進(jìn)行存儲分配的一種結(jié)構(gòu)
67、鏈表必須利用指針變量才能實現(xiàn),struct Student{ int num; float score; struct Student *next; }a,b,c;,a結(jié)點,b結(jié)點,c結(jié)點,a.next=&b;,b.next=&c;,num,score,next,9.4.2 建立簡單的靜態(tài)鏈表,例9.8 建立一個如圖所示的簡單鏈表,它由3個學(xué)生數(shù)據(jù)的結(jié)點組成,要求輸出各結(jié)點中的數(shù)據(jù)。,a結(jié)點,b結(jié)點,c
68、結(jié)點,num,score,next,9.4.2 建立簡單的靜態(tài)鏈表,解題思路:,a結(jié)點,b結(jié)點,c結(jié)點,num,score,next,head,head=&a;,a.next=&b;,b.next=&c;,NULL,c.next=NULL;,#include struct Student{ int num; float score; struct Student *next;};,int m
69、ain(){ struct Student a,b,c,*head,*p; a. num=10101; a.score=89.5; b. num=10103; b.score=90; c. num=10107; c.score=85; head=&a; a.next=&b; b.next=&c; c.
70、next=NULL; p=head; do {printf(“%ld%5.1f\n”,p->num,p->score); p=p->next; }while(p!=NULL); return 0;} /*可以改進(jìn)*/,p=head; do {printf(“%ld%5.1f\n”,p->num,p-&
71、gt;score); p=p->next; }while(p!=NULL); return 0;},a結(jié)點,b結(jié)點,c結(jié)點,num,score,next,head,NULL,p,相當(dāng)于p=&b;,p=head; do {printf(“%ld%5.1f\n”,p->num,p->score); p=p->next; }
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 用戶自己建立數(shù)據(jù)類型
- 第2章 數(shù)據(jù)類型
- 第3章 數(shù)據(jù)類型和變量
- 數(shù)據(jù)類型整合
- shape數(shù)據(jù)類型
- windows數(shù)據(jù)類型
- 第2章 數(shù)據(jù)類型、運算符和表達(dá)式
- javascript數(shù)據(jù)類型介紹-
- access數(shù)據(jù)類型大全
- 第2章 c語言的基本數(shù)據(jù)類型與表達(dá)式
- 構(gòu)造數(shù)據(jù)類型及其應(yīng)用
- sql server 常用數(shù)據(jù)類型
- 第9章 類型系統(tǒng)
- oracle數(shù)據(jù)類型及存儲方式
- 基本數(shù)據(jù)類型和數(shù)組
- java-數(shù)據(jù)類型及其運算
- c語言概述與數(shù)據(jù)類型
- c數(shù)據(jù)類型轉(zhuǎn)換及操作
- c語言自定義數(shù)據(jù)類型
- 是結(jié)構(gòu)化的數(shù)據(jù)類型
評論
0/150
提交評論