




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第十一章 結構體 1、用戶定義類型(、用戶定義類型(typedef)形式:形式: typedef 類型名類型名 標識符;標識符;例:typedef int zhengxing;解釋:解釋:1、typedef是用戶定義類型的關鍵字 2、類型名:是在定義以前必須存在的數據類型(一般是c語言已經 規(guī)定好的數據類型) 3、用戶定義類型的含義就是把已經存在的數據類型更改個名字, 更改后的數據類型的功能與原來的數據類型保持一致。列:Typedef int zhengMain() zheng a=8; printf(“%d”,a);第十一章 結構體Tpyedef 除了可以定義除了可以定義c語言已經存在的數據
2、類型外還可以再次定義我們語言已經存在的數據類型外還可以再次定義我們自己定義的數據類型。自己定義的數據類型。列:Typedef int zhengMain() typedef zheng b; b a=8; printf(“%d”,a);Typedef一般在程序開始時定義,而且它一般只用來定義一些比較不好記一般在程序開始時定義,而且它一般只用來定義一些比較不好記憶或太長的數據類型比如憶或太長的數據類型比如 unsinged int 、unsinged short int 等等。等等。第十一章 結構體 在實際問題中,一組數據往往具有不同的數據類型。例如, 在學生登記表中,姓名應為字符型;學號可為整
3、型或字符型; 年齡應為整型;性別應為字符型;成績可為整型或實型。 顯然不能用一個數組來存放這一組數據。 因為數組中各元素的類型和長度都必須一致,以便于編譯系統(tǒng)處理。為了解決這個問題,語言中給出了另一種構造數據類型“結構”。 “結構結構”是一種構造類型,是一種構造類型,它是由若干“成員成員”組成的。 每一個成員可以是一個基本數據類型或者又是一個構造類型。 結構既是一種“構造”而成的數據類型, 那么在說明和使用之前必須先定義它,也就是構那么在說明和使用之前必須先定義它,也就是構造它造它。如同在說明和調用函數之前要先定義函數一樣。第十一章 結構體 2、結構的聲名、結構的聲名聲明一個結構的一般形式為:
4、 struct 結構名結構名 成員表列成員表列 ;成員表由若干個成員組成, 每個成員都是該結構的一個組成部分。對每個成員也必須作類型說明,其形式為:類型說明符 成員名; 成員名的命名應符合標識符的書寫規(guī)定。例如: 第十一章 結構體 struct stuint num;char name20;char sex;float score; 解釋:1、struct是結構體的關鍵字不可省略。 2、不可省略。 3、注意在結構體結束后要用“;”結束,不可省略 4、一個結構體中可以包含若干個成員,成員可以是變量、指針、 數組。第十一章 結構體 3、由結構結構體定義出對象、由結構結構體定義出對象當一個結構體已經
5、定義好后我們可以應用此結構體定義出對象。它一共有3種方式,3-1:聲明時直接定義:聲明時直接定義 struct student int age; char * sex; int height; zhang,* wang; 3-2:省略結構體名省略結構體名 struct int age; char * sex; int height; zhang,wang ; 第十一章 結構體3-3:使用使用typedef說明一個結構體類型名,再用新類型名來定義變量說明一個結構體類型名,再用新類型名來定義變量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;第十一章 結構體4、結構體的賦值、結構體的賦值和一般的變量和數組一樣,結構體也可以在定義時賦值。struct student int age; char * sex; int height; wang=15,”wang”,100; 結構體數組賦值結構體數組賦值struct student int age; char * s
7、ex; int height; people3=25,”wang”,100,25,”zhang”,120,24.”li”,140; 第十一章 結構體 在定義后再賦值在定義后再賦值 struct student int age; char * sex; int height; ;struct student wang;wang=10,”wang”,40; 結構體中的數組成員的賦值結構體中的數組成員的賦值 struct student int age; char * sex; int height3; wang=15,”wang”,100,120,130; 第十一章 結構體結構體中的結構體成員的賦
8、值結構體中的結構體成員的賦值 struct date int year; int mouth; int day; ;struct student int age; char * name; struct date brithday;wang=25,”wang”,1980,2,20;第十一章 結構體 5、使用結構體中的數據、使用結構體中的數據根據定義的對象不同我們可以使用根據定義的對象不同我們可以使用3種方式來使用結構體的數據種方式來使用結構體的數據(1)如果被定義的對象為普通類型)如果被定義的對象為普通類型 對象對象.結構體成員結構體成員(2)如果被定義的對象為指針類型)如果被定義的對象為指針
9、類型 對象對象-結構體成員結構體成員 (*對象)對象). 結構體成員結構體成員例:例:struct student char * name;int age;int height;wang,* wang1;wang1=&wang;wang.age=12;wang1-age=12;(*wang1).age=12;第十一章 結構體6、結構體舉例、結構體舉例1、制作結構student ,里面有2項分別存放學生的年齡和姓名,在程序中象年齡和姓名中輸入數據,并顯示。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); 第十一章 結構體 2、編寫程序,把、編寫程序,把5位學生的姓名,年齡,位學生的姓名,年齡,4項成績以及平均成績放在一個項成績以及平均成績放在一個結構體數組中,學生的姓名,年齡,結構體數組中,學生的姓名,年齡,4項成績由鍵盤輸入,平均成績由程項成績由鍵盤輸入,平均成績由程序自己計算。序自己計算。第十一章 結構體 函數之間結構體變量的數據傳遞函數之間結構體變量的數據傳遞1、傳
11、遞結構體的地址、傳遞結構體的地址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);第十一章 結構體 2、函數的返回值是結構體類型、函數的返回值是結構體類型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);第十一章 結構體 3、通過函數的返回值返回指向結構體變量的指針、通過函數的返回值返回指向結構體變量的指針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);第十一章 結構體 利用結構體變量構成鏈表利用結構體變量構成鏈表1、結構體中含有可以指向本結構體的成員、結構體中含有可以指向本結構體的成員當一個結構體中有一個或多個成員指向本結構體,則稱當一個結構體中有一個或多個成員指向本結構體,則稱 引用自身的結構引用自身的結構體。體。struct link char ch; struct link *p;a;由于由于p是一個指向是一個指向struct link類型的指針,因此類型的指針,因此a.p=&a是合法的是合法的a.cha.p第十一章 結構體 一個簡單的鏈表一個簡單的鏈表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第十一章 結構體 其中a b
15、 c稱為結點,它們都是通過定義由系統(tǒng)在內存中開辟的固定的互不連續(xù)的存儲單元。在程序運行過程中不可人為的,再生成新的存儲單元也不可使開辟的存儲單元消失。因此這種鏈表叫做“靜態(tài)鏈表”,而我們經常使用的是動態(tài)鏈表。動態(tài)鏈表:動態(tài)鏈表:在c語言中使用數組有一定局限性,使用動態(tài)分配雖然可以隨時開辟存儲單元但,但動態(tài)存儲的單元是不連續(xù),用鏈表可以解決上述問題,鏈表中的結點除了可以存放數據外還可以存放一個指針,用此指針來指向下一個結點的地址,這樣就可以把各結點連接起來,由于各存儲單元都是動態(tài)分配的所以稱此鏈表為 動態(tài)鏈表。注意:在動態(tài)鏈表中,每個結點元素都沒有自己的名字,只能靠指針維系結點元素之間的連續(xù)關系
16、,一旦某個元素的指針斷開,后續(xù)元素就無法找尋。第十一章 結構體 每個鏈表都有一個頭結點,里面只存放一個頭指針(head)。此指針里存放鏈表中的第一個結點地址。鏈表中最后一個結點指針中不存放任何地址只存放”0”值。標志斂表結束。以上鏈表每個結點都只有一個指針,存放下一個結點的地址,因此,鏈表只能從當前結點找到后續(xù)結點。故稱單單項鏈表項鏈表建立帶頭結點的單項鏈表建立帶頭結點的單項鏈表步驟:讀取數據,生成新結點,將數據存入結點的成員變量中,將新接點步驟:讀取數據,生成新結點,將數據存入結點的成員變量中,將新接點插入掉鏈表。插入掉鏈表。例:編寫函數例:編寫函數 c_slist1,建立帶有頭結點的單項鏈
17、表,結點數據中的數值,建立帶有頭結點的單項鏈表,結點數據中的數值從鍵盤輸入,以從鍵盤輸入,以-1作為結束標志,鏈表的頭結點的地址由函數值返回作為結束標志,鏈表的頭結點的地址由函數值返回。struct slist int data; struct slist * next;typedef struct slist SLIST;第十一章 結構體 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用于存放頭結點的地址。指針s用于用來指向新生成的結點指針r總是指向鏈表中的尾結點。生成頭結點生成頭結點讀入數據讀入數據未讀到數據結束標志時進入循環(huán)未讀到數據結束標志時進入循環(huán)生成一個新結點生成一個新結點讀入的數據存放到新結點的讀入的數據存放到新結點的data中中新結點連到表尾新結點連到表尾r指向當前表尾指向當前表尾讀入數據讀入數據設置表尾結束符設置表尾結束符返回表頭指針。返回表頭指針。第十一章 結構體 順序訪問鏈表中的各數據域順序
19、訪問鏈表中的各數據域利用一個工作指針從頭到尾依次指向鏈表中的每個結點。利用一個工作指針從頭到尾依次指向鏈表中的每個結點。Void print_slist SLIST * p; p=head-next; p指向頭結點后的第一個結點指向頭結點后的第一個結點 if(p=0) printf(“is null”) 鏈表為空時鏈表為空時 else printf(“head”); do printf(“%d”,p-data); 輸出當前結點中的數據中的值輸出當前結點中的數據中的值 p=p=next; p指向下一個結點指向下一個結點 while(p!=0); printf(“-endn”) 第十一章 結構體 共同體共同體共同體和結構體的類型說明和變量的定義完全相同,不用的是共同的里所共同體和結構體的類型說明和變量的定義完全相同,不用的是共同的里所有成員占用同一塊存儲空間。有成員占用同一塊存儲空間。格式:除了把關鍵字換成格式:除了把關鍵字換成union外其他與結構體相同。外其他與結構體相同。變量的定義與結構體相同也有變量的定義與結構體相同也有4種方式種方式例:例:union un1 int I;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家庭教育特點講解
- 2025年按揭貸款二手房交易合同樣本
- 二零二五年度補充個人旅游借款合同范本
- 2025版廠房辦公室裝修及建筑垃圾處理合同
- 二零二五版節(jié)能環(huán)保設備采購合同書
- 2025版校園宿舍區(qū)包干制物業(yè)管理服務協(xié)議
- 2025年度智能數據分析軟件銷售合同范本
- 2025版4S店汽車銷售及汽車導航服務合作協(xié)議
- 2025版并購重組保密協(xié)議范本編制與風險提示指南
- 2025年度石材行業(yè)采購軟件系統(tǒng)供應合同
- 2025年度電商直播平臺主播直播內容版權購買合同3篇
- 壓型機安全操作規(guī)程范文(2篇)
- 2024-2025學年部編版七年級歷史第二學期期末測試卷(含答案)
- 石化應急培訓課件
- 鐵路運輸效率評價指標體系-洞察分析
- 中級消防設施操作員證培訓項目服務方案
- 部隊夏季皮膚病
- 文藝晚會策劃手冊
- 《電力碳計量服務終端技術規(guī)范》
- 鋼板樁支護方案施工方案
- 酒類市場全球化趨勢分析
評論
0/150
提交評論