




版權(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)體 1、用戶定義類型(、用戶定義類型(typedef)形式:形式: typedef 類型名類型名 標(biāo)識(shí)符;標(biāo)識(shí)符;例:typedef int zhengxing;解釋:解釋:1、typedef是用戶定義類型的關(guān)鍵字 2、類型名:是在定義以前必須存在的數(shù)據(jù)類型(一般是c語(yǔ)言已經(jīng) 規(guī)定好的數(shù)據(jù)類型) 3、用戶定義類型的含義就是把已經(jīng)存在的數(shù)據(jù)類型更改個(gè)名字, 更改后的數(shù)據(jù)類型的功能與原來(lái)的數(shù)據(jù)類型保持一致。列:Typedef int zhengMain() zheng a=8; printf(“%d”,a);第十一章 結(jié)構(gòu)體Tpyedef 除了可以定義除了可以定義c語(yǔ)言已經(jīng)存在的數(shù)據(jù)
2、類型外還可以再次定義我們語(yǔ)言已經(jīng)存在的數(shù)據(jù)類型外還可以再次定義我們自己定義的數(shù)據(jù)類型。自己定義的數(shù)據(jù)類型。列:Typedef int zhengMain() typedef zheng b; b a=8; printf(“%d”,a);Typedef一般在程序開始時(shí)定義,而且它一般只用來(lái)定義一些比較不好記一般在程序開始時(shí)定義,而且它一般只用來(lái)定義一些比較不好記憶或太長(zhǎng)的數(shù)據(jù)類型比如憶或太長(zhǎng)的數(shù)據(jù)類型比如 unsinged int 、unsinged short int 等等。等等。第十一章 結(jié)構(gòu)體 在實(shí)際問(wèn)題中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型。例如, 在學(xué)生登記表中,姓名應(yīng)為字符型;學(xué)號(hào)可為整
3、型或字符型; 年齡應(yīng)為整型;性別應(yīng)為字符型;成績(jī)可為整型或?qū)嵭汀?顯然不能用一個(gè)數(shù)組來(lái)存放這一組數(shù)據(jù)。 因?yàn)閿?shù)組中各元素的類型和長(zhǎng)度都必須一致,以便于編譯系統(tǒng)處理。為了解決這個(gè)問(wèn)題,語(yǔ)言中給出了另一種構(gòu)造數(shù)據(jù)類型“結(jié)構(gòu)”。 “結(jié)構(gòu)結(jié)構(gòu)”是一種構(gòu)造類型,是一種構(gòu)造類型,它是由若干“成員成員”組成的。 每一個(gè)成員可以是一個(gè)基本數(shù)據(jù)類型或者又是一個(gè)構(gòu)造類型。 結(jié)構(gòu)既是一種“構(gòu)造”而成的數(shù)據(jù)類型, 那么在說(shuō)明和使用之前必須先定義它,也就是構(gòu)那么在說(shuō)明和使用之前必須先定義它,也就是構(gòu)造它造它。如同在說(shuō)明和調(diào)用函數(shù)之前要先定義函數(shù)一樣。第十一章 結(jié)構(gòu)體 2、結(jié)構(gòu)的聲名、結(jié)構(gòu)的聲名聲明一個(gè)結(jié)構(gòu)的一般形式為:
4、 struct 結(jié)構(gòu)名結(jié)構(gòu)名 成員表列成員表列 ;成員表由若干個(gè)成員組成, 每個(gè)成員都是該結(jié)構(gòu)的一個(gè)組成部分。對(duì)每個(gè)成員也必須作類型說(shuō)明,其形式為:類型說(shuō)明符 成員名; 成員名的命名應(yīng)符合標(biāo)識(shí)符的書寫規(guī)定。例如: 第十一章 結(jié)構(gòu)體 struct stuint num;char name20;char sex;float score; 解釋:1、struct是結(jié)構(gòu)體的關(guān)鍵字不可省略。 2、不可省略。 3、注意在結(jié)構(gòu)體結(jié)束后要用“;”結(jié)束,不可省略 4、一個(gè)結(jié)構(gòu)體中可以包含若干個(gè)成員,成員可以是變量、指針、 數(shù)組。第十一章 結(jié)構(gòu)體 3、由結(jié)構(gòu)結(jié)構(gòu)體定義出對(duì)象、由結(jié)構(gòu)結(jié)構(gòu)體定義出對(duì)象當(dāng)一個(gè)結(jié)構(gòu)體已經(jīng)
5、定義好后我們可以應(yīng)用此結(jié)構(gòu)體定義出對(duì)象。它一共有3種方式,3-1:聲明時(shí)直接定義:聲明時(shí)直接定義 struct student int age; char * sex; int height; zhang,* wang; 3-2:省略結(jié)構(gòu)體名省略結(jié)構(gòu)體名 struct int age; char * sex; int height; zhang,wang ; 第十一章 結(jié)構(gòu)體3-3:使用使用typedef說(shuō)明一個(gè)結(jié)構(gòu)體類型名,再用新類型名來(lái)定義變量說(shuō)明一個(gè)結(jié)構(gòu)體類型名,再用新類型名來(lái)定義變量typedef struct int age; char * sex; int height; stud
6、ent ; student zhang;student * wang;3-4:先聲明再定義:先聲明再定義struct struct int age; char * sex; int height; student ; struct student zhang, * wang;第十一章 結(jié)構(gòu)體4、結(jié)構(gòu)體的賦值、結(jié)構(gòu)體的賦值和一般的變量和數(shù)組一樣,結(jié)構(gòu)體也可以在定義時(shí)賦值。struct student int age; char * sex; int height; wang=15,”wang”,100; 結(jié)構(gòu)體數(shù)組賦值結(jié)構(gòu)體數(shù)組賦值struct student int age; char * s
7、ex; int height; people3=25,”wang”,100,25,”zhang”,120,24.”li”,140; 第十一章 結(jié)構(gòu)體 在定義后再賦值在定義后再賦值 struct student int age; char * sex; int height; ;struct student wang;wang=10,”wang”,40; 結(jié)構(gòu)體中的數(shù)組成員的賦值結(jié)構(gòu)體中的數(shù)組成員的賦值 struct student int age; char * sex; int height3; wang=15,”wang”,100,120,130; 第十一章 結(jié)構(gòu)體結(jié)構(gòu)體中的結(jié)構(gòu)體成員的賦
8、值結(jié)構(gòu)體中的結(jié)構(gòu)體成員的賦值 struct date int year; int mouth; int day; ;struct student int age; char * name; struct date brithday;wang=25,”wang”,1980,2,20;第十一章 結(jié)構(gòu)體 5、使用結(jié)構(gòu)體中的數(shù)據(jù)、使用結(jié)構(gòu)體中的數(shù)據(jù)根據(jù)定義的對(duì)象不同我們可以使用根據(jù)定義的對(duì)象不同我們可以使用3種方式來(lái)使用結(jié)構(gòu)體的數(shù)據(jù)種方式來(lái)使用結(jié)構(gòu)體的數(shù)據(jù)(1)如果被定義的對(duì)象為普通類型)如果被定義的對(duì)象為普通類型 對(duì)象對(duì)象.結(jié)構(gòu)體成員結(jié)構(gòu)體成員(2)如果被定義的對(duì)象為指針類型)如果被定義的對(duì)象為指針
9、類型 對(duì)象對(duì)象-結(jié)構(gòu)體成員結(jié)構(gòu)體成員 (*對(duì)象)對(duì)象). 結(jié)構(gòu)體成員結(jié)構(gòu)體成員例:例:struct student char * name;int age;int height;wang,* wang1;wang1=&wang;wang.age=12;wang1-age=12;(*wang1).age=12;第十一章 結(jié)構(gòu)體6、結(jié)構(gòu)體舉例、結(jié)構(gòu)體舉例1、制作結(jié)構(gòu)student ,里面有2項(xiàng)分別存放學(xué)生的年齡和姓名,在程序中象年齡和姓名中輸入數(shù)據(jù),并顯示。Struct student char * name; int age;main() struct student a1; scanf
10、(“%s”,); scanf(“%d”,&a1.age); printf(“student name( %s)n”,); printf(“student age(%d)”,a1.age); 第十一章 結(jié)構(gòu)體 2、編寫程序,把、編寫程序,把5位學(xué)生的姓名,年齡,位學(xué)生的姓名,年齡,4項(xiàng)成績(jī)以及平均成績(jī)放在一個(gè)項(xiàng)成績(jī)以及平均成績(jī)放在一個(gè)結(jié)構(gòu)體數(shù)組中,學(xué)生的姓名,年齡,結(jié)構(gòu)體數(shù)組中,學(xué)生的姓名,年齡,4項(xiàng)成績(jī)由鍵盤輸入,平均成績(jī)由程項(xiàng)成績(jī)由鍵盤輸入,平均成績(jī)由程序自己計(jì)算。序自己計(jì)算。第十一章 結(jié)構(gòu)體 函數(shù)之間結(jié)構(gòu)體變量的數(shù)據(jù)傳遞函數(shù)之間結(jié)構(gòu)體變量的數(shù)據(jù)傳遞1、傳
11、遞結(jié)構(gòu)體的地址、傳遞結(jié)構(gòu)體的地址typedef struct char s10; int t;st;getdata(st * p) scanf(“%s %d”,p-s,&p-t );main() st a; getdata(&a); printf(“%s,%dn”,a.s,a.t);第十一章 結(jié)構(gòu)體 2、函數(shù)的返回值是結(jié)構(gòu)體類型、函數(shù)的返回值是結(jié)構(gòu)體類型typedef struct char a; int t;st;st fun(st x) x.a=99;x.b=s;,return x;main() st y; y.a=0;y.b=a; printf(“y.a=%d y.b=%
12、cn”,y.a,y.b); y=fun(y); printf(“y.a=%d y.b=%cn”,y.a,y.b);第十一章 結(jié)構(gòu)體 3、通過(guò)函數(shù)的返回值返回指向結(jié)構(gòu)體變量的指針、通過(guò)函數(shù)的返回值返回指向結(jié)構(gòu)體變量的指針typedef struct char a; int t;st;st * fun(st * x) st * px ;(*x).a=99;(*x).b=s;px=x;,return px;main() st y, *p ; y.a=0;y.b=a; printf(“y.a=%d y.b=%cn”,y.a,y.b); p=fun(&y); printf(“(*p).a=%d
13、(*p).b=%cn”,(*p).a,p-b);第十一章 結(jié)構(gòu)體 利用結(jié)構(gòu)體變量構(gòu)成鏈表利用結(jié)構(gòu)體變量構(gòu)成鏈表1、結(jié)構(gòu)體中含有可以指向本結(jié)構(gòu)體的成員、結(jié)構(gòu)體中含有可以指向本結(jié)構(gòu)體的成員當(dāng)一個(gè)結(jié)構(gòu)體中有一個(gè)或多個(gè)成員指向本結(jié)構(gòu)體,則稱當(dāng)一個(gè)結(jié)構(gòu)體中有一個(gè)或多個(gè)成員指向本結(jié)構(gòu)體,則稱 引用自身的結(jié)構(gòu)引用自身的結(jié)構(gòu)體。體。struct link char ch; struct link *p;a;由于由于p是一個(gè)指向是一個(gè)指向struct link類型的指針,因此類型的指針,因此a.p=&a是合法的是合法的a.cha.p第十一章 結(jié)構(gòu)體 一個(gè)簡(jiǎn)單的鏈表一個(gè)簡(jiǎn)單的鏈表struct node i
14、nt data; struct node * next;typedef struct node NODETYPEmain() NODETYPE a,b,c,*h,*p; a.data=10;b.data=20;c.data=30; h=&a; a.next=&b; c.next=&c; c.next=0; p=h; while(p) printf(“%d”,p-data); p=p-next; printf(“n”);h=&aa.dataa.next=&bb.datab.next=&cc.datac.next=null第十一章 結(jié)構(gòu)體 其中a b
15、 c稱為結(jié)點(diǎn),它們都是通過(guò)定義由系統(tǒng)在內(nèi)存中開辟的固定的互不連續(xù)的存儲(chǔ)單元。在程序運(yùn)行過(guò)程中不可人為的,再生成新的存儲(chǔ)單元也不可使開辟的存儲(chǔ)單元消失。因此這種鏈表叫做“靜態(tài)鏈表”,而我們經(jīng)常使用的是動(dòng)態(tài)鏈表。動(dòng)態(tài)鏈表:動(dòng)態(tài)鏈表:在c語(yǔ)言中使用數(shù)組有一定局限性,使用動(dòng)態(tài)分配雖然可以隨時(shí)開辟存儲(chǔ)單元但,但動(dòng)態(tài)存儲(chǔ)的單元是不連續(xù),用鏈表可以解決上述問(wèn)題,鏈表中的結(jié)點(diǎn)除了可以存放數(shù)據(jù)外還可以存放一個(gè)指針,用此指針來(lái)指向下一個(gè)結(jié)點(diǎn)的地址,這樣就可以把各結(jié)點(diǎn)連接起來(lái),由于各存儲(chǔ)單元都是動(dòng)態(tài)分配的所以稱此鏈表為 動(dòng)態(tài)鏈表。注意:在動(dòng)態(tài)鏈表中,每個(gè)結(jié)點(diǎn)元素都沒(méi)有自己的名字,只能靠指針維系結(jié)點(diǎn)元素之間的連續(xù)關(guān)系
16、,一旦某個(gè)元素的指針斷開,后續(xù)元素就無(wú)法找尋。第十一章 結(jié)構(gòu)體 每個(gè)鏈表都有一個(gè)頭結(jié)點(diǎn),里面只存放一個(gè)頭指針(head)。此指針里存放鏈表中的第一個(gè)結(jié)點(diǎn)地址。鏈表中最后一個(gè)結(jié)點(diǎn)指針中不存放任何地址只存放”0”值。標(biāo)志斂表結(jié)束。以上鏈表每個(gè)結(jié)點(diǎn)都只有一個(gè)指針,存放下一個(gè)結(jié)點(diǎn)的地址,因此,鏈表只能從當(dāng)前結(jié)點(diǎn)找到后續(xù)結(jié)點(diǎn)。故稱單單項(xiàng)鏈表項(xiàng)鏈表建立帶頭結(jié)點(diǎn)的單項(xiàng)鏈表建立帶頭結(jié)點(diǎn)的單項(xiàng)鏈表步驟:讀取數(shù)據(jù),生成新結(jié)點(diǎn),將數(shù)據(jù)存入結(jié)點(diǎn)的成員變量中,將新接點(diǎn)步驟:讀取數(shù)據(jù),生成新結(jié)點(diǎn),將數(shù)據(jù)存入結(jié)點(diǎn)的成員變量中,將新接點(diǎn)插入掉鏈表。插入掉鏈表。例:編寫函數(shù)例:編寫函數(shù) c_slist1,建立帶有頭結(jié)點(diǎn)的單項(xiàng)鏈
17、表,結(jié)點(diǎn)數(shù)據(jù)中的數(shù)值,建立帶有頭結(jié)點(diǎn)的單項(xiàng)鏈表,結(jié)點(diǎn)數(shù)據(jù)中的數(shù)值從鍵盤輸入,以從鍵盤輸入,以-1作為結(jié)束標(biāo)志,鏈表的頭結(jié)點(diǎn)的地址由函數(shù)值返回作為結(jié)束標(biāo)志,鏈表的頭結(jié)點(diǎn)的地址由函數(shù)值返回。struct slist int data; struct slist * next;typedef struct slist SLIST;第十一章 結(jié)構(gòu)體 SLIST * c_slist() int c; SLIST *h,*s,*r; h=(SLIST*)malloc(sizeof(SLIST); r=h; scanf(“%d”,&c); whlie(c!=-1) s=(SLIST *)malloc
18、(sizeof(SLIST); s-data=c; r-next=s; r=s; scanf(“%d”,&c); r-next=0; return h;指針h用于存放頭結(jié)點(diǎn)的地址。指針s用于用來(lái)指向新生成的結(jié)點(diǎn)指針r總是指向鏈表中的尾結(jié)點(diǎn)。生成頭結(jié)點(diǎn)生成頭結(jié)點(diǎn)讀入數(shù)據(jù)讀入數(shù)據(jù)未讀到數(shù)據(jù)結(jié)束標(biāo)志時(shí)進(jìn)入循環(huán)未讀到數(shù)據(jù)結(jié)束標(biāo)志時(shí)進(jìn)入循環(huán)生成一個(gè)新結(jié)點(diǎn)生成一個(gè)新結(jié)點(diǎn)讀入的數(shù)據(jù)存放到新結(jié)點(diǎn)的讀入的數(shù)據(jù)存放到新結(jié)點(diǎn)的data中中新結(jié)點(diǎn)連到表尾新結(jié)點(diǎn)連到表尾r指向當(dāng)前表尾指向當(dāng)前表尾讀入數(shù)據(jù)讀入數(shù)據(jù)設(shè)置表尾結(jié)束符設(shè)置表尾結(jié)束符返回表頭指針。返回表頭指針。第十一章 結(jié)構(gòu)體 順序訪問(wèn)鏈表中的各數(shù)據(jù)域順序
19、訪問(wèn)鏈表中的各數(shù)據(jù)域利用一個(gè)工作指針從頭到尾依次指向鏈表中的每個(gè)結(jié)點(diǎn)。利用一個(gè)工作指針從頭到尾依次指向鏈表中的每個(gè)結(jié)點(diǎn)。Void print_slist SLIST * p; p=head-next; p指向頭結(jié)點(diǎn)后的第一個(gè)結(jié)點(diǎn)指向頭結(jié)點(diǎn)后的第一個(gè)結(jié)點(diǎn) if(p=0) printf(“is null”) 鏈表為空時(shí)鏈表為空時(shí) else printf(“head”); do printf(“%d”,p-data); 輸出當(dāng)前結(jié)點(diǎn)中的數(shù)據(jù)中的值輸出當(dāng)前結(jié)點(diǎn)中的數(shù)據(jù)中的值 p=p=next; p指向下一個(gè)結(jié)點(diǎn)指向下一個(gè)結(jié)點(diǎn) while(p!=0); printf(“-endn”) 第十一章 結(jié)構(gòu)體 共同體共同體共同體和結(jié)構(gòu)體的類型說(shuō)明和變量的定義完全相同,不用的是共同的里所共同體和結(jié)構(gòu)體的類型說(shuō)明和變量的定義完全相同,不用的是共同的里所有成員占用同一塊存儲(chǔ)空間。有成員占用同一塊存儲(chǔ)空間。格式:除了把關(guān)鍵字換成格式:除了把關(guān)鍵字換成union外其他與結(jié)構(gòu)體相同。外其他與結(jié)構(gòu)體相同。變量的定義與結(jié)構(gòu)體相同也有變量的定義與結(jié)構(gòu)體相同也有4種方式種方式例:例:union un1 int I;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 某童裝品牌戰(zhàn)略咨詢計(jì)劃書
- 地理(山東青島卷)(A4考試版)
- 大班音樂(lè)歌唱春天幼兒讀物幼兒教育教育專區(qū)
- 上海虹口區(qū)2024-2025學(xué)年下學(xué)期七年級(jí)期末考試英語(yǔ)試題(含答案無(wú)聽力原文及音頻)
- 試劑分析性能評(píng)估模板資料講解
- 自動(dòng)控制系統(tǒng)設(shè)計(jì)曲面印刷機(jī)
- 2025年遼寧省中考英語(yǔ)模擬試題(二)
- 【高中語(yǔ)文】《登岳陽(yáng)樓》課件+統(tǒng)編版高一語(yǔ)文必修下冊(cè)
- 建筑施工特種作業(yè)-橋(門)式起重機(jī)司機(jī)真題庫(kù)-4
- 山東美術(shù)英文題目及答案
- 數(shù)據(jù)安全管理員職業(yè)技能競(jìng)賽考試題庫(kù)(含答案)
- 礦山測(cè)量工考試試卷及答案
- 女性學(xué):女性精神在現(xiàn)代社會(huì)中的挑戰(zhàn)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 學(xué)習(xí)貫徹二十屆三中全會(huì)精神測(cè)試題200(含答案)
- GB/T 17395-2024鋼管尺寸、外形、重量及允許偏差
- DB64-T 1972-2024 風(fēng)積沙路基填筑(干壓法)施工技術(shù)規(guī)范
- 農(nóng)機(jī)維修專業(yè)技能考試題及答案
- 浪潮集團(tuán)ERP實(shí)施崗在線測(cè)評(píng)題
- 低溫水電解制氫系統(tǒng) 穩(wěn)動(dòng)態(tài)及電能質(zhì)量性能測(cè)試方法(征求意見稿)
- 氣象行業(yè)天氣預(yù)報(bào)技能競(jìng)賽理論試題庫(kù)資料(含答案)
- 一把手講安全課件:提升全員安全意識(shí)
評(píng)論
0/150
提交評(píng)論