




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Chapter 8結(jié)構(gòu)體和共用體結(jié)構(gòu)體和共用體8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型由不同數(shù)據(jù)類型的數(shù)據(jù)組成。組成結(jié)構(gòu)體類型的結(jié)構(gòu)體類型由不同數(shù)據(jù)類型的數(shù)據(jù)組成。組成結(jié)構(gòu)體類型的每個(gè)數(shù)據(jù)稱為該結(jié)構(gòu)體類型的成員項(xiàng),簡(jiǎn)稱成員。在程序中使用每個(gè)數(shù)據(jù)稱為該結(jié)構(gòu)體類型的成員項(xiàng),簡(jiǎn)稱成員。在程序中使用結(jié)構(gòu)體類型時(shí),首先要對(duì)結(jié)構(gòu)體類型的組成進(jìn)行描述,稱為結(jié)構(gòu)結(jié)構(gòu)體類型時(shí),首先要對(duì)結(jié)構(gòu)體類型的組成進(jìn)行描述,稱為結(jié)構(gòu)體類型的聲明。結(jié)構(gòu)體類型聲明的一般格式如下:體類型的聲明。結(jié)構(gòu)體類型聲明的一般格式如下:8.1.1 結(jié)構(gòu)體類型聲明8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體
2、類型聲明和結(jié)構(gòu)體變量定義struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名1; 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名2; 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名n;8.1.1 結(jié)構(gòu)體類型聲明8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義其中,其中,struct是關(guān)鍵字,其后是聲明的結(jié)構(gòu)體類型名,這兩是關(guān)鍵字,其后是聲明的結(jié)構(gòu)體類型名,這兩者組成了結(jié)構(gòu)體數(shù)據(jù)類型的標(biāo)識(shí)符。在者組成了結(jié)構(gòu)體數(shù)據(jù)類型的標(biāo)識(shí)符。在“結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名”下面的下面的大括號(hào)內(nèi)是該結(jié)構(gòu)體類型的各個(gè)成員,由這些成員組成一個(gè)結(jié)構(gòu)大括號(hào)內(nèi)是該結(jié)構(gòu)體類型的各個(gè)成員,由這些成員組成一個(gè)結(jié)構(gòu)體。體。8.
3、1.1 結(jié)構(gòu)體類型聲明8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義每個(gè)結(jié)構(gòu)體類型可以含有多個(gè)相同數(shù)據(jù)類型的成員名,這樣每個(gè)結(jié)構(gòu)體類型可以含有多個(gè)相同數(shù)據(jù)類型的成員名,這樣可以像聲明多個(gè)相同數(shù)據(jù)類型的普通變量一樣進(jìn)行聲明,這些成可以像聲明多個(gè)相同數(shù)據(jù)類型的普通變量一樣進(jìn)行聲明,這些成員名之間以逗號(hào)分隔。結(jié)構(gòu)體類型中的成員名可以和程序中的其員名之間以逗號(hào)分隔。結(jié)構(gòu)體類型中的成員名可以和程序中的其他變量同名;不同結(jié)構(gòu)體類型中的成員也可以同名。他變量同名;不同結(jié)構(gòu)體類型中的成員也可以同名。8.1.1 結(jié)構(gòu)體類型聲明8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量
4、定義結(jié)構(gòu)體類型的聲明描述了該結(jié)構(gòu)體類型的組織形式。在程序結(jié)構(gòu)體類型的聲明描述了該結(jié)構(gòu)體類型的組織形式。在程序執(zhí)行時(shí),結(jié)構(gòu)體類型聲明并不引起系統(tǒng)為該結(jié)構(gòu)體分配空間。結(jié)執(zhí)行時(shí),結(jié)構(gòu)體類型聲明并不引起系統(tǒng)為該結(jié)構(gòu)體分配空間。結(jié)構(gòu)體類型聲明僅僅是聲明了一種特定的構(gòu)造數(shù)據(jù)類型,并制定了構(gòu)體類型聲明僅僅是聲明了一種特定的構(gòu)造數(shù)據(jù)類型,并制定了這種數(shù)據(jù)構(gòu)造使用內(nèi)存的模式,編譯程序并沒有因此而分配任何這種數(shù)據(jù)構(gòu)造使用內(nèi)存的模式,編譯程序并沒有因此而分配任何存儲(chǔ)空間。真正占有存儲(chǔ)空間的是程序中定義的結(jié)構(gòu)體類型變量。存儲(chǔ)空間。真正占有存儲(chǔ)空間的是程序中定義的結(jié)構(gòu)體類型變量。8.1.1 結(jié)構(gòu)體類型聲明8.1 結(jié)構(gòu)體
5、類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義例如,以下語句聲明了一個(gè)員工情況結(jié)構(gòu)體例如,以下語句聲明了一個(gè)員工情況結(jié)構(gòu)體employee。struct employee char name12;/*姓名姓名*/ char sex;/*性別性別*/ int age;/*年齡年齡*/ int salary; /*薪水薪水*/;8.1.1 結(jié)構(gòu)體類型聲明8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義當(dāng)一個(gè)結(jié)構(gòu)體類型的成員項(xiàng)又是另一個(gè)結(jié)構(gòu)體類型的變量時(shí),當(dāng)一個(gè)結(jié)構(gòu)體類型的成員項(xiàng)又是另一個(gè)結(jié)構(gòu)體類型的變量時(shí),就形成了結(jié)構(gòu)體嵌套。在數(shù)據(jù)處理中,有時(shí)要使用結(jié)構(gòu)體嵌套處就形成了
6、結(jié)構(gòu)體嵌套。在數(shù)據(jù)處理中,有時(shí)要使用結(jié)構(gòu)體嵌套處理組織結(jié)構(gòu)比較復(fù)雜的數(shù)據(jù)集合。理組織結(jié)構(gòu)比較復(fù)雜的數(shù)據(jù)集合。8.1.1 結(jié)構(gòu)體類型聲明8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義當(dāng)結(jié)構(gòu)體類型聲明之后,就可以指明使用該結(jié)構(gòu)體類型的具當(dāng)結(jié)構(gòu)體類型聲明之后,就可以指明使用該結(jié)構(gòu)體類型的具體對(duì)象,即定義結(jié)構(gòu)體類型的變量,簡(jiǎn)稱結(jié)構(gòu)體變量??梢允褂皿w對(duì)象,即定義結(jié)構(gòu)體類型的變量,簡(jiǎn)稱結(jié)構(gòu)體變量。可以使用以下以下3種方式定義結(jié)構(gòu)體變量。種方式定義結(jié)構(gòu)體變量。8.1.2 結(jié)構(gòu)體變量的定義8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義1. 先定義結(jié)構(gòu)體類型再定義結(jié)構(gòu)
7、體變量先定義結(jié)構(gòu)體類型再定義結(jié)構(gòu)體變量在定義好結(jié)構(gòu)體類型之后,再定義結(jié)構(gòu)體變量的一般格式如在定義好結(jié)構(gòu)體類型之后,再定義結(jié)構(gòu)體變量的一般格式如下:下:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 結(jié)構(gòu)體變量名表結(jié)構(gòu)體變量名表;其中,其中,“結(jié)構(gòu)體變量名表結(jié)構(gòu)體變量名表”是由一個(gè)或多個(gè)結(jié)構(gòu)體變量名組是由一個(gè)或多個(gè)結(jié)構(gòu)體變量名組成,當(dāng)多于一個(gè)結(jié)構(gòu)體變量名時(shí),這些變量名之間用逗號(hào)分隔。成,當(dāng)多于一個(gè)結(jié)構(gòu)體變量名時(shí),這些變量名之間用逗號(hào)分隔。8.1.2 結(jié)構(gòu)體變量的定義8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義2. 在定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量在定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量在
8、定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量的一般格式如下:在定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量的一般格式如下:struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 結(jié)構(gòu)體成員表結(jié)構(gòu)體成員表; 結(jié)構(gòu)體變量名表結(jié)構(gòu)體變量名表;8.1.2 結(jié)構(gòu)體變量的定義8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義3. 直接定義結(jié)構(gòu)體類型變量直接定義結(jié)構(gòu)體類型變量直接定義結(jié)構(gòu)體類型變量的方式不需要給出結(jié)構(gòu)體類型名,直接定義結(jié)構(gòu)體類型變量的方式不需要給出結(jié)構(gòu)體類型名,直接給出結(jié)構(gòu)體類型并定義結(jié)構(gòu)體變量,其一般格式如下:直接給出結(jié)構(gòu)體類型并定義結(jié)構(gòu)體變量,其一般格式如下:struct 結(jié)構(gòu)體成員表結(jié)構(gòu)體成員表; 結(jié)構(gòu)
9、體變量名表結(jié)構(gòu)體變量名表;8.1.2 結(jié)構(gòu)體變量的定義8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量在程序中有獨(dú)特的使用方式。在結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量在程序中有獨(dú)特的使用方式。在結(jié)構(gòu)體變量定義的同時(shí),可以給各個(gè)成員項(xiàng)賦初值,即結(jié)構(gòu)體變量的初始化。的同時(shí),可以給各個(gè)成員項(xiàng)賦初值,即結(jié)構(gòu)體變量的初始化。8.1.3 結(jié)構(gòu)體變量的引用和初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義1. 結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用結(jié)構(gòu)體類型是由不同數(shù)據(jù)類型的若干數(shù)據(jù)集合而成。在程序結(jié)構(gòu)體類型是由不同數(shù)據(jù)類型的若干數(shù)據(jù)集合而成。在程序中使用結(jié)構(gòu)體變量時(shí),
10、一般不允許把結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)中使用結(jié)構(gòu)體變量時(shí),一般不允許把結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行操作處理,而應(yīng)當(dāng)通過對(duì)結(jié)構(gòu)體變量的各個(gè)成員項(xiàng)的引用來實(shí)行操作處理,而應(yīng)當(dāng)通過對(duì)結(jié)構(gòu)體變量的各個(gè)成員項(xiàng)的引用來實(shí)現(xiàn)各種運(yùn)算和操作?,F(xiàn)各種運(yùn)算和操作。8.1.3 結(jié)構(gòu)體變量的引用和初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義(1)引用結(jié)構(gòu)體變量中的一個(gè)成員)引用結(jié)構(gòu)體變量中的一個(gè)成員引用結(jié)構(gòu)體變量中的一個(gè)成員的一般方式如下:引用結(jié)構(gòu)體變量中的一個(gè)成員的一般方式如下:結(jié)構(gòu)體變量結(jié)構(gòu)體變量.成員名成員名結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量-成員名成員名第一種方式是在普通結(jié)構(gòu)體變量的情況下
11、使用,第二種方式第一種方式是在普通結(jié)構(gòu)體變量的情況下使用,第二種方式是在結(jié)構(gòu)體指針變量的情況下使用。是在結(jié)構(gòu)體指針變量的情況下使用。8.1.3 結(jié)構(gòu)體變量的引用和初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義(2)結(jié)構(gòu)體類型變量的整體引用)結(jié)構(gòu)體類型變量的整體引用可以將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體賦給另一個(gè)同類型的結(jié)可以將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體賦給另一個(gè)同類型的結(jié)構(gòu)體變量。例如:構(gòu)體變量。例如:struct Student st1, st2;st1=st2;8.1.3 結(jié)構(gòu)體變量的引用和初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義執(zhí)行
12、該賦值語句時(shí),將執(zhí)行該賦值語句時(shí),將st2變量中各成員項(xiàng)依次賦給變量中各成員項(xiàng)依次賦給st1中相中相應(yīng)的各成員。這種賦值的前提條件是兩個(gè)結(jié)構(gòu)體變量必須具有完應(yīng)的各成員。這種賦值的前提條件是兩個(gè)結(jié)構(gòu)體變量必須具有完全相同的數(shù)據(jù)類型。全相同的數(shù)據(jù)類型。8.1.3 結(jié)構(gòu)體變量的引用和初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義2. 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體類型是數(shù)組類型的擴(kuò)充,只是其成員項(xiàng)可以具有不同結(jié)構(gòu)體類型是數(shù)組類型的擴(kuò)充,只是其成員項(xiàng)可以具有不同的數(shù)據(jù)類型,因而像數(shù)組類型一樣,也可以在定義結(jié)構(gòu)體變量的的數(shù)據(jù)類型,因而像數(shù)組類型一樣,也可以在定義結(jié)
13、構(gòu)體變量的同時(shí),對(duì)其每個(gè)成員賦初值,稱為結(jié)構(gòu)體變量的初始化。結(jié)構(gòu)體同時(shí),對(duì)其每個(gè)成員賦初值,稱為結(jié)構(gòu)體變量的初始化。結(jié)構(gòu)體變量初始化的一般格式如下:變量初始化的一般格式如下:struct 結(jié)構(gòu)體類型結(jié)構(gòu)體類型 變量變量=初始數(shù)據(jù)初始數(shù)據(jù);8.1.3 結(jié)構(gòu)體變量的引用和初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義例如,以下語句是對(duì)例如,以下語句是對(duì)Student結(jié)構(gòu)體的變量結(jié)構(gòu)體的變量stud進(jìn)行初始化。進(jìn)行初始化。struct Student stud=李明李明,M,20,88,98101;在進(jìn)行初始化后,在進(jìn)行初始化后,stud結(jié)構(gòu)體變量的內(nèi)存分配如圖結(jié)構(gòu)體變量
14、的內(nèi)存分配如圖8.1所示。所示。從圖中可以看出,結(jié)構(gòu)體變量占用的存儲(chǔ)空間長(zhǎng)度等于所有成員從圖中可以看出,結(jié)構(gòu)體變量占用的存儲(chǔ)空間長(zhǎng)度等于所有成員項(xiàng)所占存儲(chǔ)空間長(zhǎng)度之和。項(xiàng)所占存儲(chǔ)空間長(zhǎng)度之和。8.1.3 結(jié)構(gòu)體變量的引用和初始化 name sex age score class 李明 M 20 88 98101 圖 8.1 stud 結(jié)構(gòu)體變量的內(nèi)存分配 8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義在在C語言中,結(jié)構(gòu)體成員以其被聲明的次序進(jìn)行存儲(chǔ),第一語言中,結(jié)構(gòu)體成員以其被聲明的次序進(jìn)行存儲(chǔ),第一個(gè)成員具有最低的內(nèi)存地址,最后一個(gè)成員具有最高的內(nèi)存地址。個(gè)成員具有最低
15、的內(nèi)存地址,最后一個(gè)成員具有最高的內(nèi)存地址。例如:例如:struct int n; char c; float f; st;8.1.3 結(jié)構(gòu)體變量的引用和初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義首先,成員首先,成員n占占4個(gè)字節(jié),成員個(gè)字節(jié),成員c占占1個(gè)字節(jié),成員個(gè)字節(jié),成員f占占4個(gè)字個(gè)字符,因此符,因此st變量占用變量占用9個(gè)字節(jié)的內(nèi)存空間。但因?yàn)榫幾g時(shí)需要進(jìn)個(gè)字節(jié)的內(nèi)存空間。但因?yàn)榫幾g時(shí)需要進(jìn)行內(nèi)存對(duì)齊,成員行內(nèi)存對(duì)齊,成員c仍然占用仍然占用4個(gè)字節(jié),所以結(jié)構(gòu)體在內(nèi)存中占用個(gè)字節(jié),所以結(jié)構(gòu)體在內(nèi)存中占用12個(gè)字節(jié)。個(gè)字節(jié)。8.1.3 結(jié)構(gòu)體變量的引用和
16、初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義如果一個(gè)結(jié)構(gòu)體類型內(nèi)又嵌套另一個(gè)結(jié)構(gòu)體類型變量,則對(duì)如果一個(gè)結(jié)構(gòu)體類型內(nèi)又嵌套另一個(gè)結(jié)構(gòu)體類型變量,則對(duì)該結(jié)構(gòu)體變量初始化時(shí),仍按順序?qū)懗龈鱾€(gè)初始值。該結(jié)構(gòu)體變量初始化時(shí),仍按順序?qū)懗龈鱾€(gè)初始值。例如,以下語句定義一個(gè)在例如,以下語句定義一個(gè)在8.1.1小節(jié)中聲明的小節(jié)中聲明的Teacher類類型的變量,并對(duì)該變量進(jìn)行初始化。型的變量,并對(duì)該變量進(jìn)行初始化。struct Teacher tech=張強(qiáng)張強(qiáng),1958,8,20,計(jì)算機(jī)系計(jì)算機(jī)系; 8.1.3 結(jié)構(gòu)體變量的引用和初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)
17、構(gòu)體類型聲明和結(jié)構(gòu)體變量定義【例例8.1】分析以下程序的執(zhí)行結(jié)果。分析以下程序的執(zhí)行結(jié)果。/*文件名:文件名:lx8_1.cpp*/#include main()struct Sample int n;char c10;float f; s;8.1.3 結(jié)構(gòu)體變量的引用和初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義printf(%d,%d,%dn,sizeof(s.n),sizeof(s.c),sizeof(s.f);printf(%dn,sizeof(s);【解解】程序執(zhí)行結(jié)果如下:程序執(zhí)行結(jié)果如下:4,10,420上述程序中,上述程序中,sizeof()函數(shù)返
18、回指定數(shù)據(jù)對(duì)應(yīng)數(shù)據(jù)類型占用存儲(chǔ)空函數(shù)返回指定數(shù)據(jù)對(duì)應(yīng)數(shù)據(jù)類型占用存儲(chǔ)空間的長(zhǎng)度。結(jié)構(gòu)體變量間的長(zhǎng)度。結(jié)構(gòu)體變量s的的3個(gè)成員占用存儲(chǔ)空間的長(zhǎng)度分別為個(gè)成員占用存儲(chǔ)空間的長(zhǎng)度分別為4、10、4,而,而s占用存儲(chǔ)空間的長(zhǎng)度為占用存儲(chǔ)空間的長(zhǎng)度為20。8.1.3 結(jié)構(gòu)體變量的引用和初始化8.1 結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型聲明和結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量可以整體作為函數(shù)參數(shù)。在結(jié)構(gòu)體變量作為參數(shù)結(jié)構(gòu)體變量可以整體作為函數(shù)參數(shù)。在結(jié)構(gòu)體變量作為參數(shù)時(shí),傳遞給函數(shù)對(duì)應(yīng)形參的是其值,此時(shí)采用傳值調(diào)用方式。函時(shí),傳遞給函數(shù)對(duì)應(yīng)形參的是其值,此時(shí)采用傳值調(diào)用方式。函數(shù)體內(nèi)對(duì)形參結(jié)構(gòu)體變量中任何成員的
19、操作,都不會(huì)影響實(shí)參中數(shù)體內(nèi)對(duì)形參結(jié)構(gòu)體變量中任何成員的操作,都不會(huì)影響實(shí)參中成員的值。成員的值。8.1.4 結(jié)構(gòu)體變量作為函數(shù)參數(shù)8.2 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組在在C語言中,具有相同數(shù)據(jù)類型的數(shù)據(jù)可以組成數(shù)組,指向語言中,具有相同數(shù)據(jù)類型的數(shù)據(jù)可以組成數(shù)組,指向相同數(shù)據(jù)類型的指針可以組成指針數(shù)組。根據(jù)同樣的原則,具有相同數(shù)據(jù)類型的指針可以組成指針數(shù)組。根據(jù)同樣的原則,具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量也可以組成數(shù)組,稱為結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)相同結(jié)構(gòu)的結(jié)構(gòu)體變量也可以組成數(shù)組,稱為結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組的每一個(gè)元素都是結(jié)構(gòu)體變量。體數(shù)組的每一個(gè)元素都是結(jié)構(gòu)體變量。8.2 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的定義格
20、式如下:結(jié)構(gòu)體數(shù)組的定義格式如下:struct 結(jié)構(gòu)體類型結(jié)構(gòu)體類型 結(jié)構(gòu)體數(shù)組名結(jié)構(gòu)體數(shù)組名元素個(gè)數(shù)元素個(gè)數(shù);例如,以下語句定義例如,以下語句定義Student結(jié)構(gòu)體的一個(gè)包含結(jié)構(gòu)體的一個(gè)包含10個(gè)元素的個(gè)元素的結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組st。struct Student st10;8.2.1 結(jié)構(gòu)體數(shù)組的定義8.2 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組與定義結(jié)構(gòu)體一樣,結(jié)構(gòu)體數(shù)組的定義也有與定義結(jié)構(gòu)體一樣,結(jié)構(gòu)體數(shù)組的定義也有3種方式,即先種方式,即先進(jìn)行結(jié)構(gòu)體類型定義后再定義結(jié)構(gòu)體數(shù)組;同時(shí)進(jìn)行結(jié)構(gòu)體類型進(jìn)行結(jié)構(gòu)體類型定義后再定義結(jié)構(gòu)體數(shù)組;同時(shí)進(jìn)行結(jié)構(gòu)體類型和結(jié)構(gòu)體數(shù)組的定義;直接定義結(jié)構(gòu)體數(shù)組而不需要定義
21、結(jié)構(gòu)體和結(jié)構(gòu)體數(shù)組的定義;直接定義結(jié)構(gòu)體數(shù)組而不需要定義結(jié)構(gòu)體類型名。類型名。8.2.1 結(jié)構(gòu)體數(shù)組的定義8.2 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組對(duì)于結(jié)構(gòu)體數(shù)組的引用,就是指對(duì)結(jié)構(gòu)體數(shù)組元素的引用。對(duì)于結(jié)構(gòu)體數(shù)組的引用,就是指對(duì)結(jié)構(gòu)體數(shù)組元素的引用。由于每個(gè)結(jié)構(gòu)體數(shù)組元素都是一個(gè)結(jié)構(gòu)體變量,因此前面討論的由于每個(gè)結(jié)構(gòu)體數(shù)組元素都是一個(gè)結(jié)構(gòu)體變量,因此前面討論的關(guān)于引用結(jié)構(gòu)體變量的方法也同樣適用于結(jié)構(gòu)體數(shù)組元素。關(guān)于引用結(jié)構(gòu)體變量的方法也同樣適用于結(jié)構(gòu)體數(shù)組元素。8.2.2 結(jié)構(gòu)體數(shù)組的引用8.2 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組1. 結(jié)構(gòu)體數(shù)組元素中某一成員的引用結(jié)構(gòu)體數(shù)組元素中某一成員的引用例如,在前面的例如,在前
22、面的st結(jié)構(gòu)體數(shù)組定義后,結(jié)構(gòu)體數(shù)組定義后,st0.age表示表示st的的第一個(gè)元素的第一個(gè)元素的age成員項(xiàng);成員項(xiàng);表示表示st的第的第6個(gè)元素的個(gè)元素的name成員項(xiàng)。成員項(xiàng)。8.2.2 結(jié)構(gòu)體數(shù)組的引用8.2 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組2. 結(jié)構(gòu)體數(shù)組元素的賦值結(jié)構(gòu)體數(shù)組元素的賦值可以將一個(gè)結(jié)構(gòu)體數(shù)組元素賦給同一結(jié)構(gòu)體數(shù)組中的另一個(gè)可以將一個(gè)結(jié)構(gòu)體數(shù)組元素賦給同一結(jié)構(gòu)體數(shù)組中的另一個(gè)元素,或者賦給同一類型的變量。例如,在前面的元素,或者賦給同一類型的變量。例如,在前面的st結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組定義后,以下賦值語句都是合法的。定義后,以下賦值語句都是合法的。st1=st2;st
23、3=st4;8.2.2 結(jié)構(gòu)體數(shù)組的引用8.2 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組給結(jié)構(gòu)體數(shù)組賦初值的方式與數(shù)組賦初值的方式相同。只是給結(jié)構(gòu)體數(shù)組賦初值的方式與數(shù)組賦初值的方式相同。只是由于數(shù)組中的每個(gè)元素都是一個(gè)結(jié)構(gòu)體變量,因此要將其成員的由于數(shù)組中的每個(gè)元素都是一個(gè)結(jié)構(gòu)體變量,因此要將其成員的值依次放在一對(duì)大括號(hào)中,以便區(qū)分各個(gè)元素。值依次放在一對(duì)大括號(hào)中,以便區(qū)分各個(gè)元素。例如,以下代碼對(duì)一個(gè)結(jié)構(gòu)體數(shù)組進(jìn)行初始化。例如,以下代碼對(duì)一個(gè)結(jié)構(gòu)體數(shù)組進(jìn)行初始化。8.2.3 結(jié)構(gòu)體數(shù)組的初始化8.2 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組struct Depart int no;/*部門號(hào)部門號(hào)*/ char dname;/*
24、部門部門*/ dp3= 3,人事處人事處,15,財(cái)務(wù)處財(cái)務(wù)處,8,科技處科技處 ;8.2.3 結(jié)構(gòu)體數(shù)組的初始化8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量也是一個(gè)指針變量,用來指向一個(gè)結(jié)構(gòu)體變結(jié)構(gòu)體指針變量也是一個(gè)指針變量,用來指向一個(gè)結(jié)構(gòu)體變量,即為指向該變量所分配的存儲(chǔ)區(qū)域的首地址。結(jié)構(gòu)體指針變量,即為指向該變量所分配的存儲(chǔ)區(qū)域的首地址。結(jié)構(gòu)體指針變量還可以用來指向結(jié)構(gòu)體數(shù)組中的元素。量還可以用來指向結(jié)構(gòu)體數(shù)組中的元素。8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量是指向一個(gè)結(jié)構(gòu)體變量的指針。結(jié)構(gòu)體指針結(jié)構(gòu)體指針變量是指向一個(gè)結(jié)構(gòu)體變量的指針。結(jié)構(gòu)體指針變量的一般定義格式如下:
25、變量的一般定義格式如下:struct 結(jié)構(gòu)體類型結(jié)構(gòu)體類型 *結(jié)構(gòu)體指針結(jié)構(gòu)體指針;例如,以下語句定義了例如,以下語句定義了Student結(jié)構(gòu)體指針變量。結(jié)構(gòu)體指針變量。struct Student stud,*ps=&stud;8.3.1 結(jié)構(gòu)體指針變量的定義8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量其中,其中,ps是一個(gè)是一個(gè)Student結(jié)構(gòu)體指針變量,而不是結(jié)構(gòu)體變結(jié)構(gòu)體指針變量,而不是結(jié)構(gòu)體變量,因此不能寫成量,因此不能寫成ps.age,必須加上圓括號(hào)寫成,必須加上圓括號(hào)寫成(*ps).age。為。為此,此,C語言中引入了一個(gè)指向運(yùn)算符語言中引入了一個(gè)指向運(yùn)算符“-”來連接指針變量
26、與其來連接指針變量與其指向的結(jié)構(gòu)體變量的成員,如指向的結(jié)構(gòu)體變量的成員,如(*ps).age 改寫為改寫為ps-age。8.3.1 結(jié)構(gòu)體指針變量的定義8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量ps只能指向一個(gè)結(jié)構(gòu)體變量,例如:只能指向一個(gè)結(jié)構(gòu)體變量,例如:ps=&stud;指向運(yùn)算符指向運(yùn)算符“-”的優(yōu)先級(jí)最高,例如:的優(yōu)先級(jí)最高,例如:ps-age+1相當(dāng)于相當(dāng)于(ps-age)+1,即返回,即返回ps-age的值加的值加1的結(jié)果。的結(jié)果。ps-age+相當(dāng)于相當(dāng)于(ps-age)+,即將,即將p所指向所指向的結(jié)構(gòu)體的的結(jié)構(gòu)體的age成員值自增成員值自增1。8.3.1 結(jié)構(gòu)體指針變量的定
27、義8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量一個(gè)指針變量可以指向結(jié)構(gòu)體數(shù)組,即將該數(shù)組的起始地址一個(gè)指針變量可以指向結(jié)構(gòu)體數(shù)組,即將該數(shù)組的起始地址賦值給該指針變量。這種指針就是結(jié)構(gòu)體數(shù)組指針。賦值給該指針變量。這種指針就是結(jié)構(gòu)體數(shù)組指針。例如,以下語句定義了例如,以下語句定義了Student結(jié)構(gòu)體的一個(gè)數(shù)組和該數(shù)組結(jié)構(gòu)體的一個(gè)數(shù)組和該數(shù)組的指針。的指針。struct Student stud40,*ps=&stud;8.3.2 結(jié)構(gòu)體數(shù)組指針8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量其中,其中,ps便是便是Student結(jié)構(gòu)體數(shù)組指針。從定義上看,該指結(jié)構(gòu)體數(shù)組指針。從定義上看,該指針與結(jié)構(gòu)體指
28、針沒有區(qū)別,只不過是指向結(jié)構(gòu)體數(shù)組。針與結(jié)構(gòu)體指針沒有區(qū)別,只不過是指向結(jié)構(gòu)體數(shù)組。當(dāng)執(zhí)行當(dāng)執(zhí)行ps=&stud語句后,指針語句后,指針ps指向指向stud數(shù)組的數(shù)組的0號(hào)元素;號(hào)元素;當(dāng)進(jìn)行當(dāng)進(jìn)行ps+后,表示指針后,表示指針ps指向下一個(gè)元素的起始地址。注意指向下一個(gè)元素的起始地址。注意下面兩種操作的不同之處。下面兩種操作的不同之處。8.3.2 結(jié)構(gòu)體數(shù)組指針8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量n(+ps)-age表達(dá)式:先將表達(dá)式:先將ps自增自增1,然后取得,然后取得ps指向的指向的元素中的成員元素中的成員age的值。若的值。若ps原來指向原來指向stud0,則該表達(dá)式返,則該
29、表達(dá)式返回回stud1.age的值,之后的值,之后ps指向指向stud1。8.3.2 結(jié)構(gòu)體數(shù)組指針8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量n(ps+)-age表達(dá)式:先取得表達(dá)式:先取得ps-age的值,然后再進(jìn)行的值,然后再進(jìn)行ps自增自增1。若。若ps原來指向原來指向stud0,則該表達(dá)式返回,則該表達(dá)式返回stud0.age的值,之后的值,之后ps指向指向stud1。8.3.2 結(jié)構(gòu)體數(shù)組指針8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量ps只能指向該結(jié)構(gòu)體數(shù)組的一個(gè)元素,然后用指向運(yùn)算符只能指向該結(jié)構(gòu)體數(shù)組的一個(gè)元素,然后用指向運(yùn)算符“-”取其成員的值,而不能直接指向一個(gè)成員。取其成員的值,而不能
30、直接指向一個(gè)成員。8.3.2 結(jié)構(gòu)體數(shù)組指針8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量C語言允許將結(jié)構(gòu)體指針變量的地址作為實(shí)參傳遞,這時(shí)形語言允許將結(jié)構(gòu)體指針變量的地址作為實(shí)參傳遞,這時(shí)形參應(yīng)該是一個(gè)基類型相同的結(jié)構(gòu)體類型的指針變量,系統(tǒng)只需為參應(yīng)該是一個(gè)基類型相同的結(jié)構(gòu)體類型的指針變量,系統(tǒng)只需為形參指針開辟一個(gè)存儲(chǔ)單元存放實(shí)參結(jié)構(gòu)體變量的地址值,而不形參指針開辟一個(gè)存儲(chǔ)單元存放實(shí)參結(jié)構(gòu)體變量的地址值,而不必另行建立一個(gè)結(jié)構(gòu)體變量,即采用函數(shù)傳地址調(diào)用方式,這樣必另行建立一個(gè)結(jié)構(gòu)體變量,即采用函數(shù)傳地址調(diào)用方式,這樣既可以減少系統(tǒng)操作所需要的時(shí)間,提高程序的執(zhí)行效率,又可既可以減少系統(tǒng)操作所需要的
31、時(shí)間,提高程序的執(zhí)行效率,又可以通過函數(shù)調(diào)用,有效地修改結(jié)構(gòu)體變量中成員的值。以通過函數(shù)調(diào)用,有效地修改結(jié)構(gòu)體變量中成員的值。8.3.3 結(jié)構(gòu)體指針變量作為函數(shù)參數(shù)8.3 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量當(dāng)需要把多個(gè)結(jié)構(gòu)體作為一個(gè)參數(shù)向函數(shù)傳遞時(shí),應(yīng)該把這當(dāng)需要把多個(gè)結(jié)構(gòu)體作為一個(gè)參數(shù)向函數(shù)傳遞時(shí),應(yīng)該把這些結(jié)構(gòu)體組織成結(jié)構(gòu)體數(shù)組。函數(shù)間傳遞結(jié)構(gòu)體數(shù)組時(shí),總是采些結(jié)構(gòu)體組織成結(jié)構(gòu)體數(shù)組。函數(shù)間傳遞結(jié)構(gòu)體數(shù)組時(shí),總是采用傳地址調(diào)用方式,即把結(jié)構(gòu)體數(shù)組的存儲(chǔ)首地址作為實(shí)參傳遞用傳地址調(diào)用方式,即把結(jié)構(gòu)體數(shù)組的存儲(chǔ)首地址作為實(shí)參傳遞給形參。在調(diào)用的函數(shù)中,用同樣結(jié)構(gòu)體類型的結(jié)構(gòu)體指針作為給形參。在調(diào)用的
32、函數(shù)中,用同樣結(jié)構(gòu)體類型的結(jié)構(gòu)體指針作為形參接收傳遞的地址值。形參接收傳遞的地址值。8.3.4 結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表鏈表是指將若干個(gè)數(shù)據(jù)項(xiàng)按一定的原則連接起來的表。鏈表鏈表是指將若干個(gè)數(shù)據(jù)項(xiàng)按一定的原則連接起來的表。鏈表中的每一個(gè)數(shù)據(jù)(可能包含多個(gè)成員項(xiàng))稱為結(jié)點(diǎn)。鏈表的連接中的每一個(gè)數(shù)據(jù)(可能包含多個(gè)成員項(xiàng))稱為結(jié)點(diǎn)。鏈表的連接原則是:前一個(gè)結(jié)點(diǎn)指向下一個(gè)結(jié)點(diǎn);只有通過前一個(gè)結(jié)點(diǎn)才能原則是:前一個(gè)結(jié)點(diǎn)指向下一個(gè)結(jié)點(diǎn);只有通過前一個(gè)結(jié)點(diǎn)才能找到下一個(gè)結(jié)點(diǎn)。找到下一個(gè)結(jié)點(diǎn)。8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表因此,一個(gè)鏈表必須已知其表頭指針。
33、如果一個(gè)鏈表中的結(jié)因此,一個(gè)鏈表必須已知其表頭指針。如果一個(gè)鏈表中的結(jié)點(diǎn)只有一個(gè)指向其他結(jié)點(diǎn)的指針,則稱為單鏈表;若結(jié)點(diǎn)有兩個(gè)點(diǎn)只有一個(gè)指向其他結(jié)點(diǎn)的指針,則稱為單鏈表;若結(jié)點(diǎn)有兩個(gè)指向其他結(jié)點(diǎn)的指針,則稱為雙鏈表。指向其他結(jié)點(diǎn)的指針,則稱為雙鏈表。8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表程序經(jīng)過編譯后,內(nèi)存中就會(huì)出現(xiàn)一個(gè)稱為堆棧的區(qū)域,該程序經(jīng)過編譯后,內(nèi)存中就會(huì)出現(xiàn)一個(gè)稱為堆棧的區(qū)域,該區(qū)域是一個(gè)自由存儲(chǔ)區(qū)域,可以用區(qū)域是一個(gè)自由存儲(chǔ)區(qū)域,可以用C語言的動(dòng)態(tài)分配函數(shù)進(jìn)行管語言的動(dòng)態(tài)分配函數(shù)進(jìn)行管理。理。C語言中實(shí)現(xiàn)動(dòng)態(tài)管理的函數(shù)如下。語言中實(shí)現(xiàn)動(dòng)態(tài)管理的函數(shù)如下。8.4.1 C語言動(dòng)態(tài)
34、分配函數(shù)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表1. malloc()malloc()函數(shù)的原型在函數(shù)的原型在malloc.h中,其一般格式為中,其一般格式為void *malloc(size_t size);malloc()函數(shù)用來分配函數(shù)用來分配size個(gè)字節(jié)的存儲(chǔ)區(qū)域,返回一個(gè)指?jìng)€(gè)字節(jié)的存儲(chǔ)區(qū)域,返回一個(gè)指向存儲(chǔ)區(qū)域首地址的基類型為向存儲(chǔ)區(qū)域首地址的基類型為void的指針。若沒有足夠的內(nèi)存單的指針。若沒有足夠的內(nèi)存單元供分配,函數(shù)返回空指針(元供分配,函數(shù)返回空指針(NULL)。)。8.4.1 C語言動(dòng)態(tài)分配函數(shù)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表由于該函數(shù)返回的指針為由于該
35、函數(shù)返回的指針為void *(無值型指針),因此在調(diào)(無值型指針),因此在調(diào)用函數(shù)時(shí),必須使用強(qiáng)制類型轉(zhuǎn)換將其轉(zhuǎn)換成所需的類型。例如,用函數(shù)時(shí),必須使用強(qiáng)制類型轉(zhuǎn)換將其轉(zhuǎn)換成所需的類型。例如,以下語句讓以下語句讓p指向一個(gè)指向一個(gè)float類型的存儲(chǔ)單元。類型的存儲(chǔ)單元。float *p;p=(float *)malloc(sizeof(float);8.4.1 C語言動(dòng)態(tài)分配函數(shù)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表2. free()函數(shù)函數(shù)free()函數(shù)的原型在函數(shù)的原型在malloc.h中,其一般格式為中,其一般格式為void free(void *p);其中,指針變量其中,指針
36、變量p必須指向由動(dòng)態(tài)分配函數(shù)必須指向由動(dòng)態(tài)分配函數(shù)malloc分配的地分配的地址。址。free函數(shù)將指針函數(shù)將指針p所指的存儲(chǔ)空間釋放,使這部分空間可以所指的存儲(chǔ)空間釋放,使這部分空間可以由系統(tǒng)重新支配。由系統(tǒng)重新支配。8.4.1 C語言動(dòng)態(tài)分配函數(shù)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表一般地,單鏈表的每個(gè)結(jié)點(diǎn)由兩個(gè)域(在需要時(shí)可以包含兩一般地,單鏈表的每個(gè)結(jié)點(diǎn)由兩個(gè)域(在需要時(shí)可以包含兩個(gè)以上的域)組成,其中一個(gè)為數(shù)據(jù)域,即用于存放數(shù)據(jù)值;另個(gè)以上的域)組成,其中一個(gè)為數(shù)據(jù)域,即用于存放數(shù)據(jù)值;另一個(gè)為指針域,用于存放下一個(gè)結(jié)點(diǎn)的地址。一個(gè)為指針域,用于存放下一個(gè)結(jié)點(diǎn)的地址。8.4.2
37、 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表為了算法方便,一般將單鏈表設(shè)計(jì)為帶頭結(jié)點(diǎn)的單鏈表。這為了算法方便,一般將單鏈表設(shè)計(jì)為帶頭結(jié)點(diǎn)的單鏈表。這類單鏈表的第一個(gè)結(jié)點(diǎn)僅作為頭結(jié)點(diǎn),不存放實(shí)際數(shù)據(jù),從第二類單鏈表的第一個(gè)結(jié)點(diǎn)僅作為頭結(jié)點(diǎn),不存放實(shí)際數(shù)據(jù),從第二個(gè)結(jié)點(diǎn)起才真正存放數(shù)據(jù),把存放實(shí)際數(shù)據(jù)的結(jié)點(diǎn)稱為數(shù)據(jù)結(jié)點(diǎn)。個(gè)結(jié)點(diǎn)起才真正存放數(shù)據(jù),把存放實(shí)際數(shù)據(jù)的結(jié)點(diǎn)稱為數(shù)據(jù)結(jié)點(diǎn)。8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表例如,由(例如,由(1,4,6,8,5)序列構(gòu)成的單鏈表如圖)序列構(gòu)成的單鏈表如圖8.2所所示,其中頭結(jié)點(diǎn)為示,其中頭
38、結(jié)點(diǎn)為*head,最后一個(gè)結(jié)點(diǎn)的指針域?yàn)榭眨ㄓ?,最后一個(gè)結(jié)點(diǎn)的指針域?yàn)榭眨ㄓ谩啊狈?hào)表示),并規(guī)定:數(shù)據(jù)域?yàn)榉?hào)表示),并規(guī)定:數(shù)據(jù)域?yàn)?的結(jié)點(diǎn)為的結(jié)點(diǎn)為1號(hào)結(jié)點(diǎn),數(shù)據(jù)域?yàn)樘?hào)結(jié)點(diǎn),數(shù)據(jù)域?yàn)?的結(jié)點(diǎn)為的結(jié)點(diǎn)為2號(hào)結(jié)點(diǎn),號(hào)結(jié)點(diǎn),數(shù)據(jù)域?yàn)?,?shù)據(jù)域?yàn)?的結(jié)點(diǎn)為的結(jié)點(diǎn)為5號(hào)結(jié)點(diǎn)。號(hào)結(jié)點(diǎn)。8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn) 圖 8.2 一個(gè)單鏈表圖示 1 4 6 8 5 head 8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表單鏈表中結(jié)點(diǎn)類型定義如下:?jiǎn)捂湵碇薪Y(jié)點(diǎn)類型定義如下:typedef char DataType;/*用用typedef語句定義語句定義DataType為為char類型類型*/type
39、def struct node /*用用typedef語句定義語句定義ListNode為為node結(jié)構(gòu)體類型結(jié)構(gòu)體類型*/ DataType data;/*數(shù)據(jù)域數(shù)據(jù)域*/ struct node *next; /*指針域指針域*/ ListNode;8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表1. 建立單鏈表建立單鏈表假設(shè)結(jié)點(diǎn)的數(shù)據(jù)類型是字符,逐個(gè)輸入構(gòu)成單鏈表的字符,假設(shè)結(jié)點(diǎn)的數(shù)據(jù)類型是字符,逐個(gè)輸入構(gòu)成單鏈表的字符,并以換行符并以換行符n為輸入結(jié)束標(biāo)志符。動(dòng)態(tài)地建立單鏈表的常用方為輸入結(jié)束標(biāo)志符。動(dòng)態(tài)地建立單鏈表的常用方法有兩種,即頭插法建表和尾插法建
40、表。法有兩種,即頭插法建表和尾插法建表。8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表頭插法始終在頭結(jié)點(diǎn)之后插入新建的結(jié)點(diǎn);尾插法始終在最頭插法始終在頭結(jié)點(diǎn)之后插入新建的結(jié)點(diǎn);尾插法始終在最后一個(gè)結(jié)點(diǎn)之后插入新建的結(jié)點(diǎn)。前者使結(jié)點(diǎn)數(shù)據(jù)域順序與輸入后一個(gè)結(jié)點(diǎn)之后插入新建的結(jié)點(diǎn)。前者使結(jié)點(diǎn)數(shù)據(jù)域順序與輸入的順序正好相反,后者使兩者的順序一致。采用尾插法建立單鏈的順序正好相反,后者使兩者的順序一致。采用尾插法建立單鏈表,建立圖表,建立圖8.2所示的單鏈表的過程如圖所示的單鏈表的過程如圖8.3所示。所示。8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)
41、構(gòu)體的應(yīng)用:鏈表8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn) head r (a)建立頭結(jié)點(diǎn)*head (b)在尾部鏈入數(shù)據(jù)域?yàn)?1 的結(jié)點(diǎn) (c)在尾部鏈入數(shù)據(jù)域?yàn)?4 的結(jié)點(diǎn) (d)在尾部鏈入數(shù)據(jù)域?yàn)?6 的結(jié)點(diǎn) (e)在尾部鏈入數(shù)據(jù)域?yàn)?8 的結(jié)點(diǎn) (f)在尾部鏈入數(shù)據(jù)域?yàn)?5 的結(jié)點(diǎn)并置 r-next=NULL 圖 8.3 采用尾插法建立一個(gè)單鏈表的過程 1 head r 4 1 head r 6 4 1 head r 8 6 4 1 head r 5 8 6 4 1 head r 8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表對(duì)應(yīng)的算法如下:對(duì)應(yīng)的算法如下:ListNode *createli
42、st() /*該函數(shù)最后返回單鏈表的頭結(jié)點(diǎn)該函數(shù)最后返回單鏈表的頭結(jié)點(diǎn)的指針的指針*/ char ch; ListNode *head=(ListNode *)malloc(sizeof(ListNode); /*創(chuàng)建頭結(jié)點(diǎn)創(chuàng)建頭結(jié)點(diǎn)*/ ListNode *s,*r=head; /*r始終指向單鏈表的最后結(jié)點(diǎn)始終指向單鏈表的最后結(jié)點(diǎn)*/ printf(輸入結(jié)點(diǎn)值輸入結(jié)點(diǎn)值:);8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表 ch=getchar();/*讀第一個(gè)字符讀第一個(gè)字符*/ while (ch!=n) s=(ListNode *)malloc(siz
43、eof(ListNode); /*創(chuàng)建一個(gè)新結(jié)點(diǎn)創(chuàng)建一個(gè)新結(jié)點(diǎn)*/ s-data=ch;/*將讀入的數(shù)據(jù)放入新結(jié)點(diǎn)的數(shù)據(jù)域中將讀入的數(shù)據(jù)放入新結(jié)點(diǎn)的數(shù)據(jù)域中*/ r-next=s;r=s;/*在在*r之后插入之后插入*s,并將并將s賦給賦給r*/ ch=getchar();/*讀入下一字符讀入下一字符*/ r-next=NULL; return head;/*返回頭結(jié)點(diǎn)的指針返回頭結(jié)點(diǎn)的指針*/8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表2. 查找運(yùn)算查找運(yùn)算這里的查找運(yùn)算實(shí)現(xiàn)按序號(hào)進(jìn)行查找的功能。在頭結(jié)點(diǎn)為這里的查找運(yùn)算實(shí)現(xiàn)按序號(hào)進(jìn)行查找的功能。在頭結(jié)點(diǎn)為
44、*head的單鏈表中順序查找序號(hào)為的單鏈表中順序查找序號(hào)為i(1in,其中,其中n為數(shù)據(jù)結(jié)點(diǎn)為數(shù)據(jù)結(jié)點(diǎn)的個(gè)數(shù))的結(jié)點(diǎn)。若找到了該結(jié)點(diǎn),則返回其指針,否則返回的個(gè)數(shù))的結(jié)點(diǎn)。若找到了該結(jié)點(diǎn),則返回其指針,否則返回NULL。按序號(hào)查找的算法如下:。按序號(hào)查找的算法如下:8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表ListNode *getnode(ListNode *head,int i) int j=0; ListNode *p; p=head; /*從頭開始掃描從頭開始掃描*/ while (p-next!=NULL & jnext; j+; if
45、(p!=NULL)/*若若p不為空不為空,表示查找成功表示查找成功*/ return p;/*找到了第找到了第i個(gè)結(jié)點(diǎn)個(gè)結(jié)點(diǎn)*/ else return NULL; /*當(dāng)當(dāng)in時(shí)時(shí),找不到第找不到第i個(gè)結(jié)點(diǎn)個(gè)結(jié)點(diǎn)*/8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表3. 輸出鏈表輸出鏈表輸出鏈表就是依次輸出以輸出鏈表就是依次輸出以*head為頭結(jié)點(diǎn)的單鏈表中的所有結(jié)點(diǎn)的為頭結(jié)點(diǎn)的單鏈表中的所有結(jié)點(diǎn)的數(shù)據(jù)域。如果該單鏈表為空,則輸出數(shù)據(jù)域。如果該單鏈表為空,則輸出“空表空表”的信息。輸出鏈表的算法的信息。輸出鏈表的算法如下:如下:void displist(Lis
46、tNode *head) ListNode *p=head-next;/*p指向第一個(gè)數(shù)據(jù)結(jié)點(diǎn)指向第一個(gè)數(shù)據(jù)結(jié)點(diǎn)*/if (p=NULL)printf(空表空表n);8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表 else while (p!=NULL) /*沿沿next順序掃描每個(gè)結(jié)點(diǎn)順序掃描每個(gè)結(jié)點(diǎn),并輸出其并輸出其data域域*/ printf(%c ,p-data); p=p-next; printf(n); 8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表4. 插入運(yùn)算插入運(yùn)算插入運(yùn)算是在以插入運(yùn)算是在以*head為頭
47、結(jié)點(diǎn)的單鏈表中,將值為為頭結(jié)點(diǎn)的單鏈表中,將值為x的新的新結(jié)點(diǎn)插入到表的序號(hào)為結(jié)點(diǎn)插入到表的序號(hào)為i(1in+1)的結(jié)點(diǎn)位置上。若)的結(jié)點(diǎn)位置上。若i=1,表示插入的結(jié)點(diǎn)作為表示插入的結(jié)點(diǎn)作為1號(hào)結(jié)點(diǎn);若號(hào)結(jié)點(diǎn);若i=n+1,表示插入的結(jié)點(diǎn)作為,表示插入的結(jié)點(diǎn)作為最后一個(gè)結(jié)點(diǎn)。首先查找序號(hào)為最后一個(gè)結(jié)點(diǎn)。首先查找序號(hào)為i-1的結(jié)點(diǎn)的結(jié)點(diǎn)*p,然后將結(jié)點(diǎn),然后將結(jié)點(diǎn)*s插插入到結(jié)點(diǎn)入到結(jié)點(diǎn)*p之后。之后。8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表在單鏈表中,在結(jié)點(diǎn)在單鏈表中,在結(jié)點(diǎn)*p之后插入結(jié)點(diǎn)之后插入結(jié)點(diǎn)*s,插入前的狀態(tài)如,插入前的狀態(tài)如圖圖8.4(a
48、)所示,為了插入結(jié)點(diǎn))所示,為了插入結(jié)點(diǎn)*s,第一步是將結(jié)點(diǎn),第一步是將結(jié)點(diǎn)*s的指針的指針域指向結(jié)點(diǎn)域指向結(jié)點(diǎn)*p之后的結(jié)點(diǎn),如圖之后的結(jié)點(diǎn),如圖8.4(b)所示;第二步是將)所示;第二步是將*p的指針域指向結(jié)點(diǎn)的指針域指向結(jié)點(diǎn)*s,如圖,如圖8.4(c)所示。插入后的最后狀態(tài)如)所示。插入后的最后狀態(tài)如圖圖8.4(d)所示。)所示。8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn) (a)插入前 (b)s-next=p-next (c)p-next=s (d)插入后 圖 8.4 在單鏈表中插入結(jié)點(diǎn)的過程 s p s p s
49、p s p 8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表上述指針修改用語句描述為上述指針修改用語句描述為s-next=p-next; p-next=s;對(duì)應(yīng)的算法見教材對(duì)應(yīng)的算法見教材176頁:頁:8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表5. 刪除運(yùn)算刪除運(yùn)算刪除運(yùn)算是在以刪除運(yùn)算是在以*head為頭結(jié)點(diǎn)的單鏈表中刪除序號(hào)為為頭結(jié)點(diǎn)的單鏈表中刪除序號(hào)為i(1in)的結(jié)點(diǎn)。首先查找序號(hào)為)的結(jié)點(diǎn)。首先查找序號(hào)為i-1的結(jié)點(diǎn)的結(jié)點(diǎn)*p,然后刪除,然后刪除*p之后的結(jié)點(diǎn)。之后的結(jié)點(diǎn)。8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈
50、表在單鏈表中,刪除結(jié)點(diǎn)在單鏈表中,刪除結(jié)點(diǎn)*p之后的結(jié)點(diǎn)的方法為,令之后的結(jié)點(diǎn)的方法為,令r指向被指向被刪除的結(jié)點(diǎn)(刪除的結(jié)點(diǎn)(r=p-next),然后讓),然后讓*p的指針域指向結(jié)點(diǎn)的指針域指向結(jié)點(diǎn)*r的的直接后續(xù)結(jié)點(diǎn),即把結(jié)點(diǎn)直接后續(xù)結(jié)點(diǎn),即把結(jié)點(diǎn)*r從單鏈表上摘下來。最后釋放結(jié)點(diǎn)從單鏈表上摘下來。最后釋放結(jié)點(diǎn)*r的空間。刪除單鏈表結(jié)點(diǎn)的過程如圖的空間。刪除單鏈表結(jié)點(diǎn)的過程如圖8.5所示,圖所示,圖8.5(a)是刪)是刪除前的狀態(tài),圖除前的狀態(tài),圖8.5(c)是刪除后的狀態(tài)。)是刪除后的狀態(tài)。8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表8.4.2 單鏈表
51、及其基本運(yùn)算的實(shí)現(xiàn) (a) 刪除前 (b) p-next=r-next (c) 刪除后 圖 8.5 在單鏈表中刪除結(jié)點(diǎn)的過程 p p r p r 8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表上述指針修改用語句描述為上述指針修改用語句描述為p-next=r-next對(duì)應(yīng)的算法見教材對(duì)應(yīng)的算法見教材177頁:頁:8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表6. 釋放鏈表釋放鏈表釋放以頭結(jié)點(diǎn)為釋放以頭結(jié)點(diǎn)為*head的單鏈表,就是將其占用的所有存儲(chǔ)的單鏈表,就是將其占用的所有存儲(chǔ)空間均釋放掉。釋放鏈表的算法如下:空間均釋放掉。釋放鏈表的算法如下:8.4.2 單鏈表
52、及其基本運(yùn)算的實(shí)現(xiàn)8.4 結(jié)構(gòu)體的應(yīng)用:鏈表結(jié)構(gòu)體的應(yīng)用:鏈表void freelist(ListNode *head)ListNode *p=head, *q=p-next;while (q!=NULL) free(p);p=q;q=q-next;free(q);8.4.2 單鏈表及其基本運(yùn)算的實(shí)現(xiàn)8.5 共用體共用體聲明共用體類型的一般格式如下:聲明共用體類型的一般格式如下:union 共用體類型名共用體類型名 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名1; 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名2; . 數(shù)據(jù)類型數(shù)據(jù)類型 成員名成員名n;8.5.1 共用體類型的定義8.5 共用體共用體其中,其中,union
53、是關(guān)鍵字,是共用體類型的標(biāo)志,其后是聲明是關(guān)鍵字,是共用體類型的標(biāo)志,其后是聲明的共用體類型名,這兩者組成了共用體數(shù)據(jù)類型的標(biāo)識(shí)符。在的共用體類型名,這兩者組成了共用體數(shù)據(jù)類型的標(biāo)識(shí)符。在“共用體類型名共用體類型名”下面的大括號(hào)內(nèi)是該共用體類型的各個(gè)成員,下面的大括號(hào)內(nèi)是該共用體類型的各個(gè)成員,由這些成員組成一個(gè)共用體。由這些成員組成一個(gè)共用體。8.5.1 共用體類型的定義8.5 共用體共用體每個(gè)共用體類型可以含有多個(gè)相同數(shù)據(jù)類型的成員名,這樣每個(gè)共用體類型可以含有多個(gè)相同數(shù)據(jù)類型的成員名,這樣可以像聲明多個(gè)相同數(shù)據(jù)類型的普通變量一樣進(jìn)行聲明,這些成可以像聲明多個(gè)相同數(shù)據(jù)類型的普通變量一樣進(jìn)行
54、聲明,這些成員名之間以逗號(hào)分隔。共用體類型中的成員名可以和程序中的其員名之間以逗號(hào)分隔。共用體類型中的成員名可以和程序中的其他變量同名;不同共用體類型中的成員也可以同名。他變量同名;不同共用體類型中的成員也可以同名。8.5.1 共用體類型的定義8.5 共用體共用體共用體變量的定義和結(jié)構(gòu)體變量的定義相似,可以采用以下共用體變量的定義和結(jié)構(gòu)體變量的定義相似,可以采用以下3種方式。種方式。1. 先定義共用體類型再定義共用體變量先定義共用體類型再定義共用體變量在已經(jīng)定義好共用體類型之后,再定義共用體變量的一般格在已經(jīng)定義好共用體類型之后,再定義共用體變量的一般格式如下:式如下:union 共用體名共用
55、體名 共用體變量名表共用體變量名表;8.5.2 共用體變量的定義8.5 共用體共用體其中,其中,“共用體變量名表共用體變量名表”是由一個(gè)或多個(gè)共用體變量名組是由一個(gè)或多個(gè)共用體變量名組成,當(dāng)多于一個(gè)共用體變量名時(shí),這些變量名之間用逗號(hào)分隔。成,當(dāng)多于一個(gè)共用體變量名時(shí),這些變量名之間用逗號(hào)分隔。例如,以下語句定義了兩個(gè)例如,以下語句定義了兩個(gè)Untype共用體變量共用體變量un1和和un2。union Untype un1,un2;8.5.2 共用體變量的定義8.5 共用體共用體2. 在定義共用體類型的同時(shí)定義共用體變量在定義共用體類型的同時(shí)定義共用體變量在定義共用體類型的同時(shí)定義共用體變量的
56、一般格式如下:在定義共用體類型的同時(shí)定義共用體變量的一般格式如下:union 共用體類型名共用體類型名 共用體成員表共用體成員表; 共用體變量名表共用體變量名表;8.5.2 共用體變量的定義8.5 共用體共用體3. 直接定義共用體類型變量直接定義共用體類型變量直接定義共用體類型變量的方式不需要給出共用體類型名,直接定義共用體類型變量的方式不需要給出共用體類型名,直接給出共用體類型并定義共用體變量,其一般格式如下:直接給出共用體類型并定義共用體變量,其一般格式如下:union 共用體成員表共用體成員表; 共用體變量名表共用體變量名表;8.5.2 共用體變量的定義8.5 共用體共用體共用體變量在程
57、序中有獨(dú)特的使用方式。在共用體變量定義共用體變量在程序中有獨(dú)特的使用方式。在共用體變量定義的同時(shí)只能用第一個(gè)成員的類型的值進(jìn)行初始化。的同時(shí)只能用第一個(gè)成員的類型的值進(jìn)行初始化。1. 共用體變量的引用共用體變量的引用(1)引用共用體變量中的一個(gè)成員)引用共用體變量中的一個(gè)成員引用共用體變量的成員的一般方式如下:引用共用體變量的成員的一般方式如下:8.5.3 共用體變量的引用和初始化8.5 共用體共用體共用體變量共用體變量.成員名成員名共用體指針變量共用體指針變量-成員名成員名第一種方式是在普通共用體變量的情況下使用,第二種方式第一種方式是在普通共用體變量的情況下使用,第二種方式是在共用體指針變
58、量的情況下使用。是在共用體指針變量的情況下使用。8.5.3 共用體變量的引用和初始化8.5 共用體共用體(2)共用體類型變量的整體引用)共用體類型變量的整體引用可以將一個(gè)共用體變量作為一個(gè)整體賦給另一個(gè)同類型的共可以將一個(gè)共用體變量作為一個(gè)整體賦給另一個(gè)同類型的共用體變量。例如:用體變量。例如:union Untype un1,un2;un1=un2;這種賦值的前提條件是兩個(gè)共用體變量必須具有完全相同的這種賦值的前提條件是兩個(gè)共用體變量必須具有完全相同的數(shù)據(jù)類型。數(shù)據(jù)類型。8.5.3 共用體變量的引用和初始化8.5 共用體共用體2. 共用體變量的初始化共用體變量的初始化在共用體變量定義的同時(shí)只
59、能用第一個(gè)成員的類型的值進(jìn)行在共用體變量定義的同時(shí)只能用第一個(gè)成員的類型的值進(jìn)行初始化。共用體變量初始化的一般格式如下:初始化。共用體變量初始化的一般格式如下:union 共用體類型共用體類型 共用體變量共用體變量=第一個(gè)成員類型的數(shù)據(jù)第一個(gè)成員類型的數(shù)據(jù);8.5.3 共用體變量的引用和初始化8.5 共用體共用體在共用體變量在共用體變量un1初始化后,其內(nèi)存分配如圖初始化后,其內(nèi)存分配如圖8.6所示,所示,un1有有3個(gè)成員,這個(gè)成員,這3個(gè)成員都從同一地址開始存放,也就是使用個(gè)成員都從同一地址開始存放,也就是使用覆蓋技術(shù),幾個(gè)變量互相覆蓋,因此,共用體變量占用的存儲(chǔ)空覆蓋技術(shù),幾個(gè)變量互相覆
60、蓋,因此,共用體變量占用的存儲(chǔ)空間長(zhǎng)度與其成員中占存儲(chǔ)空間長(zhǎng)度最多的那個(gè)成員相等。間長(zhǎng)度與其成員中占存儲(chǔ)空間長(zhǎng)度最多的那個(gè)成員相等。8.5.3 共用體變量的引用和初始化 實(shí)型f i 字符型c i 整型i i 10 圖 8.6 共用體變量的內(nèi)存分配 8.6 枚舉類型枚舉類型枚舉類型提供了一種比較直觀的表示所處理對(duì)象的方式,如枚舉類型提供了一種比較直觀的表示所處理對(duì)象的方式,如人的性別分男和女;組成多種色彩的三原色為紅、黃、藍(lán)。枚舉人的性別分男和女;組成多種色彩的三原色為紅、黃、藍(lán)。枚舉類型引出的是一個(gè)具有一定數(shù)量的有序的名字表,并且表中列出類型引出的是一個(gè)具有一定數(shù)量的有序的名字表,并且表中列出了這種類型可能的全部取值。了這種類型
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 休養(yǎng)所老年公寓設(shè)計(jì)與運(yùn)營(yíng)創(chuàng)新策略考核試卷
- 意外傷害保險(xiǎn)與保險(xiǎn)行業(yè)的風(fēng)險(xiǎn)管理與案例分析研究分析考核試卷
- 家用紡織品的供應(yīng)鏈管理與物流優(yōu)化考核試卷
- 車險(xiǎn)理賠合規(guī)培訓(xùn)課件
- 花生銷售合同范本
- 裝修押金轉(zhuǎn)讓合同范本
- 抵押的車位合同范本
- 寄養(yǎng)羊合同范本
- 小學(xué)生態(tài)平衡課件
- 超市促銷培訓(xùn)課件
- 海南省澄邁縣2024-2025學(xué)年七年級(jí)上學(xué)期期末考試地理試題(含答案)
- 2025年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 部編人教版五年級(jí)下冊(cè)小學(xué)數(shù)學(xué)全冊(cè)教案
- 2024年世界職業(yè)院校技能大賽高職組“聲樂、器樂表演組”賽項(xiàng)參考試題庫(kù)(含答案)
- 2024年共青團(tuán)入團(tuán)考試題庫(kù)及答案
- 2024解析:第十二章機(jī)械效率-講核心(原卷版)
- 2023年國(guó)家公務(wù)員錄用考試《申論》真題(副省卷)及答案解析
- 2024-2030年中國(guó)醫(yī)療器械維修設(shè)備行業(yè)供需狀況及發(fā)展策略分析報(bào)告
- 中國(guó)心力衰竭診斷和治療指南2024解讀(完整版)
- 女性健康知識(shí)講座課件
- DB11T 1787-2020 二氧化碳排放核算和報(bào)告要求 其他行業(yè)
評(píng)論
0/150
提交評(píng)論