




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、結(jié)構(gòu)體的概念結(jié)構(gòu)體的概念結(jié)構(gòu)體的定義和引用結(jié)構(gòu)體的定義和引用結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組 11.1 11.1 概述概述11.2 11.2 定義結(jié)構(gòu)體類型變量的方法定義結(jié)構(gòu)體類型變量的方法11.3 11.3 結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用11.4 11.4 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化11.5 11.5 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組 11.11.指向結(jié)構(gòu)體類型數(shù)據(jù)的指針指向結(jié)構(gòu)體類型數(shù)據(jù)的指針 11.7 11.7 用指針處理鏈表用指針處理鏈表11.8 11.8 共用體共用體 11.9 11.9 枚舉類型枚舉類型 11.10 11.10 用用typedeftypedef定義類型定義類型n問(wèn)題定義:?jiǎn)栴}定
2、義:n 有時(shí)需要將不同類型的數(shù)據(jù)組有時(shí)需要將不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)合成一個(gè)有機(jī)n的整體,以便于引用。如:的整體,以便于引用。如:n一個(gè)學(xué)生有學(xué)號(hào)一個(gè)學(xué)生有學(xué)號(hào)/ /姓名姓名/ /性別性別/ /年齡年齡/ /地地址等屬性址等屬性 int num; char int num; char name20;name20; char sex; char sex;n int age; int char int age; int char addr30;addr30;n n 應(yīng)當(dāng)把它們組織成一個(gè)組合項(xiàng),在一個(gè)組合項(xiàng)中包含若干個(gè)類型不同當(dāng)然也可以相同)的數(shù)據(jù)項(xiàng)。 圖11-1100101 Li Fun M
3、18 87.5 Beijing Num name sex age score addrn 聲明一個(gè)結(jié)構(gòu)體類型的一般形式為:聲明一個(gè)結(jié)構(gòu)體類型的一般形式為:n struct struct 結(jié)構(gòu)體名結(jié)構(gòu)體名n 成員表列;成員表列;n如:如:struct studentstruct studentn n int num;char int num;char name20;char sex;name20;char sex;n int age;float int age;float score;char addr30;score;char addr30;n n n 結(jié)構(gòu)體名類型名成員名n可以采取以下可以采
4、取以下3 3種方法定義結(jié)構(gòu)體類型變種方法定義結(jié)構(gòu)體類型變量:量:n(1)(1)先聲明結(jié)構(gòu)體類型再定義變量名先聲明結(jié)構(gòu)體類型再定義變量名n例如:例如:struct student struct student student1, student2;student1, student2;n | | | | | | n 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名 n定義了定義了student1student1和和student2student2為為struct struct studentstudent類型的變量,即它們具有類型的變量,即它們具有struct struct studentst
5、udent類型的結(jié)構(gòu)類型的結(jié)構(gòu). .n 圖11-2student1100101 ZhangXin M 19 90.5 Shanghai100102 WangLi F 20 98 Beijingstudent2 在定義了結(jié)構(gòu)體變量后,系統(tǒng)會(huì)為之分配內(nèi)存單元。 例如:student1和student2在內(nèi)存中各占59個(gè)字節(jié)2+20+1+2+4+30=59)。 的結(jié)構(gòu)體類型。的結(jié)構(gòu)體類型。(2)(2)在聲明類型的同時(shí)定義變量在聲明類型的同時(shí)定義變量 這種形式的定義的一般形式為這種形式的定義的一般形式為: : struct struct結(jié)構(gòu)體名結(jié)構(gòu)體名 成員表列成員表列 變量名表列;變量名表列; 例如
6、:例如:struct student int num; char name20; char sex; int age; float score; char addr30; student1,student2; 它的作用與第一它的作用與第一種方法相同,即種方法相同,即定義了兩個(gè)定義了兩個(gè)struct student 類型的變類型的變量量student1,student2 (3) (3) 直接定義結(jié)構(gòu)體類型變量直接定義結(jié)構(gòu)體類型變量其一般形式為其一般形式為: : struct struct 成員表列成員表列 變量名表列;變量名表列;即不出現(xiàn)結(jié)構(gòu)體名。即不出現(xiàn)結(jié)構(gòu)體名。 空間??臻g。同同, ,二者不
7、代表同一二者不代表同一對(duì)象。對(duì)象。例如:例如:struct date /struct date /* *聲明一個(gè)結(jié)構(gòu)體聲明一個(gè)結(jié)構(gòu)體類型類型* */ / int num int num; char name20 char name20; char sex char sex; int age int age; float score float score; struct date birthday struct date birthday; / /* *birthdaybirthday是是struct datestruct date類型類型* */ / char addr30 char add
8、r30; student1,student2;student1,student2;先聲明一個(gè)先聲明一個(gè)struct date類型,它代表類型,它代表“日期日期”,包括,包括3個(gè)成員:個(gè)成員:month月)、月)、day日)、日)、year年)。年)。然后在聲明然后在聲明struct student類型時(shí),將成類型時(shí),將成員員birthday指定為指定為struct date類型。類型。 圖11-3 birthday addrNum name sex age Month day yearn 在定義了結(jié)構(gòu)體變量以后,當(dāng)然可以引用這個(gè)變量。但應(yīng)遵守以下規(guī)則: n (1)不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整
9、體進(jìn)行輸入和輸出。n例如: 已定義student1和student2為結(jié)構(gòu)體變量并且它們已有值。nprintf(%d,%s,%c,%d,%f,%n,student1); n 引用結(jié)構(gòu)體變量中成員的方式為結(jié)構(gòu)體變量名.成員名例如, student1.num表示student1變量中的num成員,即student1的num(學(xué)號(hào))項(xiàng)??梢詫?duì)變量的成員賦值,例如:student1.num=10010;“.”是成員(分量)運(yùn)算符,它在所有的運(yùn)算符中優(yōu)先級(jí)最高,因此可以把student1.num作為一個(gè)整體來(lái)看待。上面賦值語(yǔ)句的作用是將整數(shù)10010賦給student1變量中的成員num。 (2) 如果
10、成員本身又屬一個(gè)結(jié)構(gòu)體類型,則要用若干個(gè)成員運(yùn)算符,一級(jí)一級(jí)地找到最低的一級(jí)的成員。只能對(duì)最低級(jí)的成員進(jìn)行賦值或存取以及運(yùn)算。例如: 對(duì)上面定義的結(jié)構(gòu)體變量student1, 可以這樣訪問(wèn)各成員: student1.num student1.birthday.month(3) 對(duì)結(jié)構(gòu)體變量的成員可以像普通變量一樣進(jìn)行各種運(yùn)算根據(jù)其類型決定可以進(jìn)行的運(yùn)算)。例如: student2.score=student1.score; sum=student1.score+student2.score; student1.age+; +student2.age;由于由于“”運(yùn)算符的優(yōu)運(yùn)算符的優(yōu)先級(jí)最高,因
11、此先級(jí)最高,因此是對(duì)是對(duì)進(jìn)進(jìn)行自加運(yùn)算,而不是行自加運(yùn)算,而不是先對(duì)進(jìn)行自加先對(duì)進(jìn)行自加運(yùn)算。運(yùn)算。(4) 可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址。例如: scanf(%d,&student1.num); (輸入student1.num的值) printf(%o,student1); (輸出student1的首地址)但不能用以下語(yǔ)句整體讀入結(jié)構(gòu)體變量,例如: scanf(%d,s,c,d,f,s,student1); 結(jié)構(gòu)體變量的地址主要用作函數(shù)參數(shù),傳遞結(jié)構(gòu)體變量的地址。 但不能用以下語(yǔ)句整體讀入結(jié)構(gòu)體變量,例如: scanf(%d,s,c,d,f,s,student1);
12、 結(jié)構(gòu)體變量的地址主要用作函數(shù)參數(shù),傳遞結(jié)構(gòu)體變量的地址。 例例11.1 對(duì)結(jié)構(gòu)體變量初始化對(duì)結(jié)構(gòu)體變量初始化.#include void main()() struct student long int num; char name20; char sex; char addr20; a=10101,LiLin,M,123 Beijing Road; /* 對(duì)結(jié)構(gòu)體變量對(duì)結(jié)構(gòu)體變量a賦初值賦初值*/printf(No.:%ldnname:%snsex:%cnaddress:%sn,a.num,,a.sex,a.addr); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:No.No.:1010110101n
13、amename:LiLinLiLinsexsex:addressaddress:123 Beijing 123 Beijing RoadRoad 一個(gè)結(jié)構(gòu)體變量中可以存放一組數(shù)據(jù)如一個(gè)學(xué)生的學(xué)號(hào)、姓名、成績(jī)等數(shù)據(jù))。如果有個(gè)學(xué)生的數(shù)據(jù)需要參加運(yùn)算,顯然應(yīng)該用數(shù)組,這就是結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組與以前介紹過(guò)的數(shù)值型數(shù)組不同之處在于每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù),它們都分別包括各個(gè)成員分量項(xiàng)。 11.5.1定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組 和定義結(jié)構(gòu)體變量的方法相仿,只需和定義結(jié)構(gòu)體變量的方法相仿,只需說(shuō)明其為數(shù)組即可。例如:說(shuō)明其為數(shù)組即可。例如:struct studentint num;ch
14、ar name20;char sex;int age; float score;char addr30; ;struct student3; 以上定義了一個(gè)數(shù)以上定義了一個(gè)數(shù)組組stu,數(shù)組有個(gè)元,數(shù)組有個(gè)元素,均為素,均為struct student類型數(shù)據(jù)。類型數(shù)據(jù)。也可以直接定義一個(gè)結(jié)構(gòu)體數(shù)組,例如: struct student int num; ;stu3;或: strcut student int num; ;stu3;圖11-411.5.2 11.5.2 結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的初始化 與其他類型的數(shù)組一樣,對(duì)結(jié)構(gòu)體數(shù)與其他類型的數(shù)組一樣,對(duì)結(jié)構(gòu)體數(shù)組可以初始化。例如:組可
15、以初始化。例如:struct studentstruct studentint num;char name20int num;char name20; char sex char sex; int age int age; float score; char float score; char addr30addr30; ;stu;stu2 21010110101,LiLinLiLin,MM,1818,87.587.5,103 103 BeijingRoadBeijingRoad,1010210102,Zhang FunZhang Fun,MM,1919,9999,130 Shanghai R
16、oad130 Shanghai Road; 圖11-5當(dāng)然,數(shù)組的初始化也可以用以下形式:struct student int num; ; struct studentstr,; 即先聲明結(jié)構(gòu)體類型,然后定義數(shù)組為該結(jié)構(gòu)體類型,在定義數(shù)組時(shí)初始化。 結(jié)構(gòu)體數(shù)組初始化的一般形結(jié)構(gòu)體數(shù)組初始化的一般形式是在定義數(shù)組的后面加上式是在定義數(shù)組的后面加上“初值表列;初值表列;”。11.5.3 11.5.3 結(jié)構(gòu)體數(shù)組應(yīng)用舉例結(jié)構(gòu)體數(shù)組應(yīng)用舉例例例11.2對(duì)候選人得票的統(tǒng)計(jì)程序。設(shè)有對(duì)候選人得票的統(tǒng)計(jì)程序。設(shè)有3個(gè)候選人,每個(gè)候選人,每次輸入一個(gè)得票的候選人的名字,要求最后輸出各人得次輸入一個(gè)得票的候選
17、人的名字,要求最后輸出各人得票結(jié)果。票結(jié)果。#include #include struct person char name20;in count; ;leader3=“Li”,0, “ Zhang”,0, “ Fun”,0例例11.2void main() int i,j; char leader_name20; for(i=1;i=10;i+) scanf(“%s”,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,)=0) leaderj.count+; printf(“n”); for(i=0;i3;i+)
18、printf(“%5s:%dn”,,leaderi.count);運(yùn)行結(jié)果:運(yùn)行結(jié)果: : : : : 程序定義一個(gè)全局的結(jié)構(gòu)體數(shù)組leader,它有個(gè)元素,每一個(gè)元素包含兩個(gè)成員name姓名和count票數(shù))。在定義數(shù)組時(shí)使之初始化,使3位候選人的票數(shù)都先置零。 在主函數(shù)中定義字符數(shù)組leader-name,它代表被選人的姓名,在10次循環(huán)中每次先輸入一個(gè)被選人的具體人名,然后把它與3個(gè)候選人姓名相比,看它和哪一個(gè)候選人的名字相同。在輸入和統(tǒng)計(jì)結(jié)束之后,將3人的名字和得票數(shù)輸出。 圖11-6Li 0Zhang 0Fun 0 name count 一個(gè)結(jié)構(gòu)體變量的指針就
19、是該變量所占據(jù)的內(nèi)存段的起始地址??梢栽O(shè)一個(gè)指針變量,用來(lái)指向一個(gè)結(jié)構(gòu)體變量,此時(shí)該指針變量的值是結(jié)構(gòu)體變量的起始地址。指針變量也可以用來(lái)指向結(jié)構(gòu)體數(shù)組中的元素。11.6.1 指向結(jié)構(gòu)體變量的指針 下面通過(guò)一個(gè)簡(jiǎn)單例子來(lái)說(shuō)明指向結(jié)構(gòu)體變量的指針變量的應(yīng)用。 例例1指向結(jié)構(gòu)體變量的指針的應(yīng)用指向結(jié)構(gòu)體變量的指針的應(yīng)用#include #include void main()struct studentlong num;char name20; char sex; float score; struct student stu_1; struct student* p; p=&stu_1; stu
20、_1.num=89101;strcpy(stu_1.name,”LiLin”); stu_1.sex=M;stu_1.score=89.5; printf(No.:%ldnname:%snsex:%cnscore:%fn,stu-1.num,,stu-1.sex,stu-1.score); printf(No.:%ldnname:%snsex:%cnscore:%fn,(*p).num,(*p).name,(*p).sex,(*p).score); 定義指針變量p,指向struct student 類型的數(shù)據(jù)指向的結(jié)構(gòu)體變量中的成員 運(yùn)行結(jié)果:運(yùn)行結(jié)果:8910189101
21、 namename:LiLin LiLin sexsex: scorescore:89.50000089.500000:8910189101 namename:LiLin LiLin sexsex: scorescore:89.50000089.500000程序分析: 在函數(shù)的執(zhí)行部分將結(jié)構(gòu)體變量-的起始地址賦給指針變量,也就是使指向-,然后對(duì)-的各成員賦值。第一個(gè)函數(shù)是輸出-的各個(gè)成員的值。用-表示-中的成員,依此類推。第二個(gè)函數(shù)也是用來(lái)輸出-各成員的值,但使用的是(*)這樣的形式。圖11-7以下以下3 3種形式等價(jià):種形式等價(jià): 結(jié)構(gòu)體變量成員名結(jié)構(gòu)體變量成員名(* *)成員名)成員名-成
22、員名成員名其中其中-稱為指向運(yùn)算符。稱為指向運(yùn)算符。 請(qǐng)分析以下幾種運(yùn)算:-得到指向的結(jié)構(gòu)體變量中的成員的值。-得到指向的結(jié)構(gòu)體變量中的成員的值,用完該值后使它加。-得到指向的結(jié)構(gòu)體變量中的成員的值加,然后再使用它。11.6.2 11.6.2 指向結(jié)構(gòu)體數(shù)組的指針指向結(jié)構(gòu)體數(shù)組的指針例例11.4 指向結(jié)構(gòu)體數(shù)組的指針的應(yīng)用指向結(jié)構(gòu)體數(shù)組的指針的應(yīng)用 #include struct studentint num;char name20;char sex;int age;struct student stu3=10101,Li Lin,M,18,10102,Zhang Fun,M,19,10104
23、,WangMing,F(xiàn),20;void main() struct student *p; printf( No. Name sex age);); for(str;str;p) printf(%5d %-20s %2c %4dn,p-num, p-name, p-sex, p-age); 運(yùn)行結(jié)果:運(yùn)行結(jié)果: LiLin LiLin 1818 Zhang Fun Zhang Fun 1919 WangMing WangMing 2020程序分析: 是指向struct student結(jié)構(gòu)體類型數(shù)據(jù)的指針變量。在for語(yǔ)句中先使的初值為stu,也就是數(shù)組stu第一個(gè)元素的起始地址。在第一次循環(huán)中
24、輸出stu0的各個(gè)成員值。然后執(zhí)行,使自加。加意味著p所增加的值為結(jié)構(gòu)體數(shù)組stu的一個(gè)元素所占的字節(jié)數(shù)。執(zhí)行+后p的值等于stu 1,指向stu1。在第二次循環(huán)中輸出stu1的各成員值。在執(zhí)行后,p的值等于stu+2,再輸出stu 2的各成員值。在執(zhí)行+后,的值變?yōu)閟tu +, 已不再小于stu+3了,不再執(zhí)行循環(huán)。 圖11-8注意: (1) 如果的初值為stu,即指向第一個(gè)元素,則加后p就指向下一個(gè)元素。例如: (+p)-num先使自加,然后得到它指向的元素中的num成員值即10102)。 (p+)-num先得到-num的值即10101),然后使自加,指向stu1。 請(qǐng)注意以上二者的不同。
25、 注意: (2) 程序已定義了是一個(gè)指向struct student類型數(shù)據(jù)的指針變量,它用來(lái)指向一個(gè)struct student類型的數(shù)據(jù),不應(yīng)用來(lái)指向stu數(shù)組元素中的某一成員。例如: 1a; 如果要將某一成員的地址賦給p,可以用強(qiáng)制類型轉(zhuǎn)換,先將成員的地址轉(zhuǎn)換成p的類型。例如:( *)0a; 11.6.3 11.6.3 用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的指針用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的指針 作函數(shù)參數(shù)作函數(shù)參數(shù) 將一個(gè)結(jié)構(gòu)體變量的值傳遞給另一個(gè)函將一個(gè)結(jié)構(gòu)體變量的值傳遞給另一個(gè)函數(shù),有數(shù),有3 3個(gè)方法個(gè)方法: :用結(jié)構(gòu)體變量的成員作參數(shù)。用結(jié)構(gòu)體變量的成員作參數(shù)。(2) (2) 用結(jié)構(gòu)體變量作實(shí)
26、參。用結(jié)構(gòu)體變量作實(shí)參。(3) (3) 用指向結(jié)構(gòu)體變量或數(shù)組的指針作用指向結(jié)構(gòu)體變量或數(shù)組的指針作實(shí)參,將結(jié)構(gòu)體變量或數(shù)組的地址實(shí)參,將結(jié)構(gòu)體變量或數(shù)組的地址傳給形參。傳給形參。 11.6.2 11.6.2 指向結(jié)構(gòu)體數(shù)組的指針指向結(jié)構(gòu)體數(shù)組的指針例11.5 有一個(gè)結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號(hào)、姓名和3門(mén)課程的成績(jī)。要求在main函數(shù)中賦予值,在另一函數(shù)print中將它們輸出。今用結(jié)構(gòu)體變量作函數(shù)參數(shù)。#include struct student int num; char name20; float score3;void main() void print(struct studen
27、t); struct student stu; stu.num=12345;strcpy(, LiLin;stu.score0=67.5;stu.score1=89;stu.score2 =78.6); print(stu);void print(struct student stu) printf(FORMAT,stu.num,, stu.score0, stu.score1,stu.score2);); printf(n););運(yùn)行結(jié)果運(yùn)行結(jié)果: 67.50000067.50000089.00000089.00000078.59999878.599998例例
28、11.6 將上題改用指向結(jié)構(gòu)體變量的指針作實(shí)參。將上題改用指向結(jié)構(gòu)體變量的指針作實(shí)參。 #include struct student int num; char name20; float score3;stu=12345, LiLi,67.5,89,78.6;void main()void print(struct student *); /*形參類型修改成指向結(jié)構(gòu)體的指針形參類型修改成指向結(jié)構(gòu)體的指針變量變量*/ print(&stu); /*實(shí)參改為實(shí)參改為stu的起始地址的起始地址*/void print(struct student *p) /*形參類型修改形參類型修改了了*/ p
29、rintf(FORMAT,p-num,p-name, p-score0,p-score1,p-score2);); /*用指針變量調(diào)用各成員用指針變量調(diào)用各成員的值的值*/ printf(););運(yùn)行結(jié)果運(yùn)行結(jié)果: 67.50000067.50000089.00000089.00000078.59999878.599998程序分析: 此程序改用在定義結(jié)構(gòu)體變量stu時(shí)賦初值,這樣程序可簡(jiǎn)化些。print函數(shù)中的形參被定義為指向struct student類型數(shù)據(jù)的指針變量。注意在調(diào)用print函數(shù)時(shí),用結(jié)構(gòu)體變量str的起始地址stu作實(shí)參。在調(diào)用函數(shù)時(shí)將該地址傳送給形參p(p是指針變量)。這
30、樣就指向stu。在print函數(shù)中輸出所指向的結(jié)構(gòu)體變量的各個(gè)成員值,它們也就是stu的成員值。main函數(shù)中的對(duì)各成員賦值也可以改用scanf函數(shù)輸入。圖11-911.7 11.7 用指針處理鏈表用指針處理鏈表 11.7.1 11.7.1 鏈表概述鏈表概述 鏈表是一種常見(jiàn)的重要的數(shù)據(jù)結(jié)構(gòu)鏈表是一種常見(jiàn)的重要的數(shù)據(jù)結(jié)構(gòu), ,是動(dòng)是動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配的一種結(jié)構(gòu)。態(tài)地進(jìn)行存儲(chǔ)分配的一種結(jié)構(gòu)。鏈表的組成:鏈表的組成:頭指針:存放一個(gè)地址,該地址指向一頭指針:存放一個(gè)地址,該地址指向一個(gè)元素個(gè)元素 結(jié)點(diǎn):用戶需要的實(shí)際數(shù)據(jù)和鏈接節(jié)點(diǎn)結(jié)點(diǎn):用戶需要的實(shí)際數(shù)據(jù)和鏈接節(jié)點(diǎn)的指針的指針圖11-1011.7 1
31、1.7 用指針處理鏈表用指針處理鏈表 用結(jié)構(gòu)體建立鏈表:struct student int num; float score; struct student *next ;; 其中成員num和score用來(lái)存放結(jié)點(diǎn)中的有用數(shù)據(jù)用戶需要用到的數(shù)據(jù)),next是指針類型的成員,它指向struct student類型數(shù)據(jù)這就是next所在的結(jié)構(gòu)體類型)圖11-1111.7.2 11.7.2 簡(jiǎn)單鏈表簡(jiǎn)單鏈表 #include #define NULL 0 struct student long num; float score; struct student *next; ; main() str
32、uct student a,b,c,*head,*p; a. num=99101; a.score=89.5; b. num=99103; b.score=90; c. num=99107; c.score=85; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do printf(%ld %5.1fn,p-num,p-score); p=p-next; while(p!=NULL); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:1010189.51010189.51010390.01010390.01010785.01010785.0程序分析: 開(kāi)始時(shí)使hea
33、d指向a結(jié)點(diǎn),a.next指向b結(jié)點(diǎn),b.next指向c結(jié)點(diǎn),這就構(gòu)成鏈表關(guān)系?!癱.next=NULL” 的作用是使c.next不指向任何有用的存儲(chǔ)單元。在輸出鏈表時(shí)要借助p,先使p指向a結(jié)點(diǎn),然后輸出a結(jié)點(diǎn)中的數(shù)據(jù),“p=p-next” 是為輸出下一個(gè)結(jié)點(diǎn)作準(zhǔn)備。p-next的值是b結(jié)點(diǎn)的地址,因此執(zhí)行“p=p-next后p就指向b結(jié)點(diǎn),所以在下一次循環(huán)時(shí)輸出的是b結(jié)點(diǎn)中的數(shù)據(jù)。11.7.311.7.3處理動(dòng)態(tài)鏈表所需的函數(shù)處理動(dòng)態(tài)鏈表所需的函數(shù) 庫(kù)函數(shù)提供動(dòng)態(tài)地開(kāi)辟和釋放存儲(chǔ)庫(kù)函數(shù)提供動(dòng)態(tài)地開(kāi)辟和釋放存儲(chǔ)單元的單元的有關(guān)函數(shù):有關(guān)函數(shù):mallocmalloc函數(shù)函數(shù)其函數(shù)原型為其函數(shù)原
34、型為void void * *malloc(unsigned malloc(unsigned int size);int size);其其作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為長(zhǎng)度為sizesize的連續(xù)空間。此函數(shù)的值即的連續(xù)空間。此函數(shù)的值即“返返回值回值”)是一個(gè)指向分配域起始地址的指針類是一個(gè)指向分配域起始地址的指針類型為型為voidvoid)。如果此函數(shù)未能成功地執(zhí)行)。如果此函數(shù)未能成功地執(zhí)行例如內(nèi)例如內(nèi)存空間不足),則返回空指針存空間不足),則返回空指針(NULL)(NULL)。 (2) calloc函數(shù) 其函數(shù)原型為void *callocu
35、nsigned ,unsigned size);其作用是在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配個(gè)長(zhǎng)度為size的連續(xù)空間。函數(shù)返回一個(gè)指向分配域起始地址的指針;如果分配不勝利,返回NULL。 用calloc函數(shù)可以為一維數(shù)組開(kāi)辟動(dòng)態(tài)存儲(chǔ)空間,n為數(shù)組元素個(gè)數(shù),每個(gè)元素長(zhǎng)度為Size。(3) free函數(shù) 其函數(shù)原型為void freevoid *p);其作用是釋放由指向的內(nèi)存區(qū),使這部分內(nèi)存區(qū)能被其他變量使用。是最近一次調(diào)用calloc或malloc函數(shù)時(shí)返回的值。free函數(shù)無(wú)返回值。 以前的版本提供的malloc和calloc函數(shù)得到的是指向字符型數(shù)據(jù)的指針。 ANSI 提供的malloc和calloc
36、函數(shù)規(guī)定為void類型。11.7.4 11.7.4 建立動(dòng)態(tài)鏈表建立動(dòng)態(tài)鏈表 所謂建立動(dòng)態(tài)鏈表是指在程序執(zhí)行過(guò)所謂建立動(dòng)態(tài)鏈表是指在程序執(zhí)行過(guò)程中從程中從無(wú)到有地建立起一個(gè)鏈表,即一個(gè)一個(gè)地?zé)o到有地建立起一個(gè)鏈表,即一個(gè)一個(gè)地開(kāi)辟結(jié)開(kāi)辟結(jié)點(diǎn)和輸入各結(jié)點(diǎn)數(shù)據(jù),并建立起前后相鏈點(diǎn)和輸入各結(jié)點(diǎn)數(shù)據(jù),并建立起前后相鏈的關(guān)系的關(guān)系例例11.5 11.5 寫(xiě)一函數(shù)建立一個(gè)有寫(xiě)一函數(shù)建立一個(gè)有3 3名學(xué)生數(shù)據(jù)名學(xué)生數(shù)據(jù)的單向動(dòng)的單向動(dòng)態(tài)鏈表。態(tài)鏈表。算法如圖算法如圖圖11-12算法的實(shí)現(xiàn): 我們約定學(xué)號(hào)不會(huì)為零,如果輸入的學(xué)號(hào)為,則表示建立鏈表的過(guò)程完成,該結(jié)點(diǎn)不應(yīng)連接到鏈表中。 如果輸入的p1-num不等
37、于,則輸入的是第一個(gè)結(jié)點(diǎn)數(shù)據(jù)n=1),令headp1,即把p1的值賦給head,也就是使head也指向新開(kāi)辟的結(jié)點(diǎn)p1所指向的新開(kāi)辟的結(jié)點(diǎn)就成為鏈表中第一個(gè)結(jié)點(diǎn)圖11-13算法的實(shí)現(xiàn): 再開(kāi)辟另一個(gè)結(jié)點(diǎn)并使p1指向它,接著輸入該結(jié)點(diǎn)的數(shù)據(jù).如果輸入的p1-num,則應(yīng)鏈入第個(gè)結(jié)點(diǎn)(n=2), 將新結(jié)點(diǎn)的地址賦給第一個(gè)結(jié)點(diǎn)的next成員.接著使,也就是使指向剛才建立的結(jié)點(diǎn)圖11-14算法的實(shí)現(xiàn):再開(kāi)辟一個(gè)結(jié)點(diǎn)并使p1指向它,并輸入該結(jié)點(diǎn)的數(shù)據(jù)。在第三次循環(huán)中,由于),又將的值賦給-,也就是將第個(gè)結(jié)點(diǎn)連接到第個(gè)結(jié)點(diǎn)之后,并使,使指向最后一個(gè)結(jié)點(diǎn).圖11-15算法的實(shí)現(xiàn): 再開(kāi)辟一個(gè)新結(jié)點(diǎn),并使p1
38、指向它,輸入該結(jié)點(diǎn)的數(shù)據(jù)。由于p1-num的值為,不再執(zhí)行循環(huán),此新結(jié)點(diǎn)不應(yīng)被連接到鏈表中.將NULL賦給p2-next.建立鏈表過(guò)程至此結(jié)束,p1最后所指的結(jié)點(diǎn)未鏈入鏈表中,第三個(gè)結(jié)點(diǎn)的next成員的值為NULL,它不指向任何結(jié)點(diǎn)。圖11-16建立鏈表的函數(shù)如下: #include #include #define NULL 0 /令NULL代表,用它表示“空地址#define LEN sizeof(struct student) /令LEN代表struct /student類型數(shù)據(jù)的長(zhǎng)度 struct student long num; float score; struct studen
39、t *next; ;int n; /n為全局變量,本文件模塊中各函數(shù)均可使用它struct student *creat() struct student *head; struct student *p1,*p2; n=0; p1=p2=( struct student*) malloc(LEN); scanf(%ld,%f,&p1-num,&p1-score); head=NULL; while(p1-num!=0) n=n+1; if(n=1)head=p1; else p2-next=p1; p2=p1; p1=(struct student*)malloc(LEN); scanf(%
40、ld,%f,&p1-num,&p1-score); p2-next=NULL; return(head);11.7.5 11.7.5 輸出鏈表輸出鏈表 首先要知道鏈表第一個(gè)結(jié)點(diǎn)的地址,也首先要知道鏈表第一個(gè)結(jié)點(diǎn)的地址,也就是就是要知道要知道headhead的值。然后設(shè)一個(gè)指針變量的值。然后設(shè)一個(gè)指針變量p,p,先先指向指向第一個(gè)結(jié)點(diǎn),輸出所指的結(jié)點(diǎn),然后使第一個(gè)結(jié)點(diǎn),輸出所指的結(jié)點(diǎn),然后使后移后移一個(gè)結(jié)點(diǎn),再輸出,直到鏈表的尾結(jié)點(diǎn)。一個(gè)結(jié)點(diǎn),再輸出,直到鏈表的尾結(jié)點(diǎn)。 圖11-17,11-18例例1 19 9 編寫(xiě)一個(gè)輸出鏈表的函數(shù)編寫(xiě)一個(gè)輸出鏈表的函數(shù)print. print. void p
41、rint(struct student void print(struct student * *head)head) struct student struct student * *p;p; printf(nNow,These %d records printf(nNow,These %d records are:n,n); p=head;are:n,n); p=head; if(head!=NULL) if(head!=NULL) do do printf(%ld %5.1fn,p-num,p- printf(%ld %5.1fn,p-num,p-score);score); p=p-n
42、ext; p=p-next; while(p!=NULL); while(p!=NULL); 11.7.6 對(duì)鏈表的刪除操作對(duì)鏈表的刪除操作 從一個(gè)動(dòng)態(tài)鏈表中刪去一個(gè)結(jié)點(diǎn),并不從一個(gè)動(dòng)態(tài)鏈表中刪去一個(gè)結(jié)點(diǎn),并不是真是真正從內(nèi)存中把它抹掉,而是把它從鏈表中分正從內(nèi)存中把它抹掉,而是把它從鏈表中分離開(kāi)離開(kāi)來(lái),只要撤銷原來(lái)的鏈接關(guān)系即可。來(lái),只要撤銷原來(lái)的鏈接關(guān)系即可。圖11-19例例11.1011.10寫(xiě)一函數(shù)以刪除動(dòng)態(tài)鏈表中指定的結(jié)點(diǎn)寫(xiě)一函數(shù)以刪除動(dòng)態(tài)鏈表中指定的結(jié)點(diǎn). . 解題思路解題思路: : 從從p p指向的第一個(gè)結(jié)點(diǎn)開(kāi)始,檢查該結(jié)點(diǎn)指向的第一個(gè)結(jié)點(diǎn)開(kāi)始,檢查該結(jié)點(diǎn)中的中的numnum值是
43、否等于輸入的要求刪除的那個(gè)學(xué)號(hào)。假如值是否等于輸入的要求刪除的那個(gè)學(xué)號(hào)。假如相等就將該結(jié)點(diǎn)刪除,如不相等,就將相等就將該結(jié)點(diǎn)刪除,如不相等,就將p p后移一個(gè)后移一個(gè)結(jié)點(diǎn),再如此進(jìn)行下去,直到遇到表尾為止。結(jié)點(diǎn),再如此進(jìn)行下去,直到遇到表尾為止。 可以設(shè)兩個(gè)指針變量p1和p2,先使p1指向第一個(gè)結(jié)點(diǎn) 。 如果要?jiǎng)h除的不是第一個(gè)結(jié)點(diǎn),則使p1后移指向下一個(gè)結(jié)點(diǎn)(將p1-next賦給p1),在此之前應(yīng)將p1的值賦給p2 ,使p2指向剛才檢查過(guò)的那個(gè)結(jié)點(diǎn) 。注意: 要?jiǎng)h的是第一個(gè)結(jié)點(diǎn)的值等于的值,如圖1-0那樣),則應(yīng)將-賦給。這時(shí)指向原來(lái)的第二個(gè)結(jié)點(diǎn)。第一個(gè)結(jié)點(diǎn)雖然仍存在,但它已與鏈表脫離,因?yàn)殒?/p>
44、表中沒(méi)有一個(gè)結(jié)點(diǎn)或頭指針指向它。雖然還指向它,它仍指向第二個(gè)結(jié)點(diǎn),但仍無(wú)濟(jì)于事,現(xiàn)在鏈表的第一個(gè)結(jié)點(diǎn)是原來(lái)的第二個(gè)結(jié)點(diǎn),原來(lái)第一個(gè)結(jié)點(diǎn)已“喪失” ,即不再是鏈表中的一部分了。注意: 如果要?jiǎng)h除的不是第一個(gè)結(jié)點(diǎn),則將-賦給-,見(jiàn)圖10)。-原來(lái)指向指向的結(jié)點(diǎn)圖中第二個(gè)結(jié)點(diǎn)),現(xiàn)在-改為指向-所指向的結(jié)點(diǎn)圖中第三個(gè)結(jié)點(diǎn))。所指向的結(jié)點(diǎn)不再是鏈表的一部分。還需要考慮鏈表是空表無(wú)結(jié)點(diǎn)和鏈表中找不到要?jiǎng)h除的結(jié)點(diǎn)的情況。圖11-20 算法:圖11-21 刪除結(jié)點(diǎn)的函數(shù)刪除結(jié)點(diǎn)的函數(shù)del:del:struct student struct student * *del(struct student del
45、(struct student * *head,long num)head,long num) struct student struct student * *p1,p1,* *p2;p2; if (head=NULL)printf(nlist if (head=NULL)printf(nlist null!n);goto end;null!n);goto end; p1=head; p1=head; while(num!=p1-num & p1-next!=NULL) while(num!=p1-num & p1-next!=NULL) p2=p1;p1=p1-next;p2=p1;p1=
46、p1-next;if(num=p1-num)if(num=p1-num) if(p1=head) head=p1-next; if(p1=head) head=p1-next; else p2-next=p1-next; else p2-next=p1-next; printf(delete:%ldn,num); printf(delete:%ldn,num); n=n-1;n=n-1; e l s e p r i n t f ( % l d n o t b e e n e l s e p r i n t f ( % l d n o t b e e n found!n,num);found!n
47、,num);end;return(head); end;return(head); 11.7.711.7.7對(duì)鏈表的插入操作對(duì)鏈表的插入操作 對(duì)鏈表的插入是指將一個(gè)結(jié)點(diǎn)插入到一對(duì)鏈表的插入是指將一個(gè)結(jié)點(diǎn)插入到一個(gè)已有的鏈表中。個(gè)已有的鏈表中。為了能做到正確插入,必須解決兩個(gè)問(wèn)題:為了能做到正確插入,必須解決兩個(gè)問(wèn)題: 怎樣找到插入的位置;怎樣找到插入的位置; 怎樣實(shí)現(xiàn)插入。怎樣實(shí)現(xiàn)插入。 先用指針變量p0指向待插入的結(jié)點(diǎn),p1指向第一個(gè)結(jié)點(diǎn)。將p0-num與p1-num相比較,如果p0-nump1- num ,則待插入的結(jié)點(diǎn)不應(yīng)插在p1所指的結(jié)點(diǎn)之前。此時(shí)將p1后移,并使p2指向剛才p1所指的
48、結(jié)點(diǎn)。 再將p1-num與p0-num比,如果仍然是p0-num大,則應(yīng)使p1繼續(xù)后移,直到p0-p1- num為止。這時(shí)將p0所指的結(jié)點(diǎn)插到p1所指結(jié)點(diǎn)之前。但是如果p1所指的已是表尾結(jié)點(diǎn),則p1就不應(yīng)后移了。如果p0- num比所有結(jié)點(diǎn)的num都大,則應(yīng)將p0所指的結(jié)點(diǎn)插到鏈表末尾。 如果插入的位置既不在第一個(gè)結(jié)點(diǎn)之前,又不在表尾結(jié)點(diǎn)之后,則將p0的值賦給p2-next,使p2-next指向待插入的結(jié)點(diǎn),然后將p1的值賦給p0-next,使得p0-next指向p1指向的變量。 11.7 11.7 用指針處理鏈表用指針處理鏈表 如果插入位置為第一個(gè)結(jié)點(diǎn)之前(即p1等于head時(shí)),則將p0賦
49、給head,將p1賦給p0-next如果要插到表尾之后,應(yīng)將p0賦給p1-next,NULL賦給p0-next圖11-22 算法:圖11-23 例例11.1111.11插入結(jié)點(diǎn)的函數(shù)插入結(jié)點(diǎn)的函數(shù)insertinsert如下。如下。 struct student struct student * *insert(struct student insert(struct student * *head, head, struct student struct student * *stud)stud)struct student struct student * *p0,p0,* *p1,p1,
50、* *p2;p2; p1=head;p0=stud; p1=head;p0=stud;if(head=NULL)if(head=NULL) head=p0; p0-next=NULL; head=p0; p0-next=NULL;elsewhile(p0-nump1-num) & (p1-elsewhile(p0-nump1-num) & (p1-next!=NULL)next!=NULL) p2=p1;p2=p1; p1=p1-next; p1=p1-next; if(p0-numnum) if(head=p1) if(p0-numnum) if(head=p1) head=p0;head=
51、p0; e l s e p 2 - n e x t = p 0 ; e l s e p 2 - n e x t = p 0 ;p 0 -p 0 -next=p1;next=p1; else p1-next=p0; p0-next=NULL; else p1-next=p0; p0-next=NULL; n=n+1; n=n+1; return(head); return(head); 11.7.8 11.7.8 對(duì)鏈表的綜合操作對(duì)鏈表的綜合操作 將以上建立、輸出、刪除、插入的函數(shù)組織將以上建立、輸出、刪除、插入的函數(shù)組織在一個(gè)在一個(gè)C C程序中,用函數(shù)作主調(diào)函數(shù)。程序中,用函數(shù)作主調(diào)函數(shù)。 v
52、oid main() struct student *head,stu;long del_num; prinf(intput records:n) ; head=creat();print(head);printf ( n intput the deleted number:n); scanf (%ld,&del_num) ;head=del(head,del_num);print(head);printf ( n intput the deleted number:n); scanf (%ld,&stu.num,&stu.score) ;head=insert(head,&stu);prin
53、t(head); 此程序運(yùn)行結(jié)果是正確的。它只刪除一個(gè)結(jié)此程序運(yùn)行結(jié)果是正確的。它只刪除一個(gè)結(jié)點(diǎn),插入一個(gè)結(jié)點(diǎn)。但如果想再插入一個(gè)結(jié)點(diǎn),點(diǎn),插入一個(gè)結(jié)點(diǎn)。但如果想再插入一個(gè)結(jié)點(diǎn),重復(fù)寫(xiě)上程序最后重復(fù)寫(xiě)上程序最后4 4行,共插入兩個(gè)結(jié)點(diǎn),運(yùn)行結(jié)行,共插入兩個(gè)結(jié)點(diǎn),運(yùn)行結(jié)果卻是錯(cuò)誤的。果卻是錯(cuò)誤的。Input recordsInput records:(建立鏈表):(建立鏈表)1010, 1010, 1010, , Now,these 3 records are:101010 intput the deleted number :10103(刪除):10Now,these 4 records ar
54、e:1010 input the inserted record (插入第一個(gè)結(jié)點(diǎn))10102,90Now,these 3 records are:101010input the inserted record (插入第二個(gè)結(jié)點(diǎn))10104,99Now,these 4 records are:10101010 出現(xiàn)以上結(jié)果的原因是:出現(xiàn)以上結(jié)果的原因是: stu stu是一個(gè)有固定地址的結(jié)構(gòu)體變量。第一次是一個(gè)有固定地址的結(jié)構(gòu)體變量。第一次把把stustu結(jié)點(diǎn)插入到鏈表中,第二次若再用它結(jié)點(diǎn)插入到鏈表中,第二次若再用它來(lái)插入第二個(gè)結(jié)點(diǎn),就把第一次結(jié)點(diǎn)的數(shù)據(jù)來(lái)插入第二個(gè)結(jié)點(diǎn),就把第一次結(jié)點(diǎn)的數(shù)據(jù)
55、沖掉了,實(shí)際上并沒(méi)有開(kāi)辟兩個(gè)結(jié)點(diǎn)。為了沖掉了,實(shí)際上并沒(méi)有開(kāi)辟兩個(gè)結(jié)點(diǎn)。為了解決這個(gè)問(wèn)題,必須在每插入一個(gè)結(jié)點(diǎn)時(shí)新解決這個(gè)問(wèn)題,必須在每插入一個(gè)結(jié)點(diǎn)時(shí)新開(kāi)辟一個(gè)內(nèi)存區(qū)。我們修改開(kāi)辟一個(gè)內(nèi)存區(qū)。我們修改mainmain函數(shù),使之函數(shù),使之能刪除多個(gè)結(jié)點(diǎn)直到輸入要?jiǎng)h的學(xué)號(hào)為能刪除多個(gè)結(jié)點(diǎn)直到輸入要?jiǎng)h的學(xué)號(hào)為0 0),能插入多個(gè)結(jié)點(diǎn)直到輸入要插入的學(xué)),能插入多個(gè)結(jié)點(diǎn)直到輸入要插入的學(xué)號(hào)為號(hào)為0 0)。)。 main() struct student *head,*stu; long del_num;printf(input records:n); head=creat(); print (head
56、); printf(ninput the deleted number:); scanf(%ld,&del_num); while (del_num!=0)head=del(head,del_num);print (head);printf (input the deleted number:);scanf(%ld,&del_num); printf(ninput the inserted record:);stu=(struct student *) malloc(LEN); scanf(%ld,%f,&stu-num,&stu-score); while(stu-num!=0)head=i
57、nsert(head,stu); printf(input the inserted record:);stu=(struct student *)malloc(LEN); scanf(%ld,%f,&stu-num,&stu-score); stu定義為指針變量,在需要插入時(shí)先用malloc函數(shù)開(kāi)辟一個(gè)內(nèi)存區(qū),將其起始地址經(jīng)強(qiáng)制類型轉(zhuǎn)換后賦給stu,然后輸入此結(jié)構(gòu)體變量中各成員的值。對(duì)不同的插入對(duì)象,stu的值是不同的,每次指向一個(gè)新的struct student變量。在調(diào)用insert函數(shù)時(shí),實(shí)參為head和stu,將已建立的鏈表起始地址傳給insert函數(shù)的形參,將stu(即新開(kāi)辟的單元
58、的地址傳給形參stud,返回的函數(shù)值是經(jīng)過(guò)插入之后的鏈表的頭指針地址)運(yùn)行結(jié)果:運(yùn)行結(jié)果: :10,10,10, :10 10 10 intput the deleted number 10103(刪除):10Now,these 4 records are10 910 intput the deleted number 10103(刪除):105Now,these 4 records are10 9 intput the deleted number:0input the inserted record 10104,87Now,these 3 records are10101 99.01010
59、4 87 input the inserted record 10106,65Now,these 3 records are10101 99.010104 8710106 65.0 11.8.1共用體的概念 使幾個(gè)不同的變量共占同一段內(nèi)存的結(jié)構(gòu)稱為 “共用體類型的結(jié)構(gòu)。定義共用體類型變量的一般形式為:union共用體名 成員表列 變量表列;圖11-24例如:例如:union data union union data union datadata int i int i; int i;int i; char ch char ch; 或或 char ch;char ch; float f flo
60、at f; float ffloat f;a,b,c; a,b,c; ;union data a,b,c;union data a,b,c;共用體和結(jié)構(gòu)體的比較:共用體和結(jié)構(gòu)體的比較: 結(jié)構(gòu)體變量所占內(nèi)存長(zhǎng)度是各成員占的內(nèi)結(jié)構(gòu)體變量所占內(nèi)存長(zhǎng)度是各成員占的內(nèi)存長(zhǎng)度之和。每個(gè)成員分別占有其自己的內(nèi)存長(zhǎng)度之和。每個(gè)成員分別占有其自己的內(nèi)存單元。存單元。 共用體變量所占的內(nèi)存長(zhǎng)度等于最長(zhǎng)的成員共用體變量所占的內(nèi)存長(zhǎng)度等于最長(zhǎng)的成員的長(zhǎng)度。的長(zhǎng)度。 共用體和結(jié)構(gòu)體的比較:共用體和結(jié)構(gòu)體的比較: 結(jié)構(gòu)體變量所占內(nèi)存長(zhǎng)度是各成員占的內(nèi)存長(zhǎng)度結(jié)構(gòu)體變量所占內(nèi)存長(zhǎng)度是各成員占的內(nèi)存長(zhǎng)度之和。每個(gè)成員分別占有其
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 7436:2024 EN Fasteners - Slotted set screws with cup point
- 2025年度二手房買(mǎi)賣(mài)交易合同(附帶房屋抵押權(quán)解除及貸款還款計(jì)劃)
- 2025年度新能源項(xiàng)目安全生產(chǎn)責(zé)任書(shū)匯編
- 2025年度科技創(chuàng)新項(xiàng)目資金擔(dān)保合同
- 2025年高科技車(chē)間承包服務(wù)協(xié)議
- 2025年度社區(qū)配套車(chē)位代理銷售服務(wù)合同
- 傳統(tǒng)藝術(shù)與現(xiàn)代美術(shù)課程融合計(jì)劃
- 如何進(jìn)行有效的課堂觀察計(jì)劃
- 提升自我管理能力的策略計(jì)劃
- 關(guān)注員工個(gè)人發(fā)展的措施計(jì)劃
- 2025年高考數(shù)學(xué)總復(fù)習(xí):集合與常用邏輯用語(yǔ)(教師卷)
- 肌力分級(jí)護(hù)理課件
- 第三章-自然語(yǔ)言的處理(共152張課件)
- 中學(xué)教學(xué)課件:下第課《認(rèn)識(shí)人工智能》課件
- 《烏有先生歷險(xiǎn)記》注釋版
- 2023版初中語(yǔ)文新課程標(biāo)準(zhǔn)
- 六年級(jí)口算訓(xùn)練每日100道
- 顳下頜關(guān)節(jié)功能障礙的評(píng)估新技術(shù)
- 專項(xiàng)債券在燃?xì)饣A(chǔ)設(shè)施建設(shè)中的融資作用
- 四川省瀘州市2024年中考地理試卷(附解析)
- GB/T 44255-2024土方機(jī)械純電動(dòng)液壓挖掘機(jī)能量消耗量試驗(yàn)方法
評(píng)論
0/150
提交評(píng)論