第九講 結(jié)構(gòu)體共用體鏈表_第1頁
第九講 結(jié)構(gòu)體共用體鏈表_第2頁
第九講 結(jié)構(gòu)體共用體鏈表_第3頁
第九講 結(jié)構(gòu)體共用體鏈表_第4頁
第九講 結(jié)構(gòu)體共用體鏈表_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第九講結(jié)構(gòu)體共用體鏈表第一頁,共二十二頁,編輯于2023年,星期四6.4.1結(jié)構(gòu)體概述一組相關(guān)的不同數(shù)據(jù)類型的數(shù)據(jù)項(xiàng),可作一個(gè)整體來處理。C中稱結(jié)構(gòu)體類型數(shù)據(jù)。下例中定義了結(jié)構(gòu)體類型student和結(jié)構(gòu)體變量stu1,stu2。前者是數(shù)據(jù)類型,后者是變量。學(xué)號(hào)姓名性別成績(jī)結(jié)構(gòu)體類型student1王民學(xué)男71.52劉方女75結(jié)構(gòu)體變量st1結(jié)構(gòu)體變量st2第二頁,共二十二頁,編輯于2023年,星期四定義結(jié)構(gòu)體的類型定義結(jié)構(gòu)體類型一般形式:

struct[結(jié)構(gòu)體類型名]{變量類型變量名;變量類型變量名;變量類型變量名;…}[結(jié)構(gòu)變量名表];注意:“結(jié)構(gòu)類型名”和“結(jié)構(gòu)變量名表”,可省略一個(gè)。關(guān)鍵字struct和它后面的結(jié)構(gòu)體類型名一起組成一個(gè)新的數(shù)據(jù)類型名

第三頁,共二十二頁,編輯于2023年,星期四例structstudent{intnum;charname[20];charsex;intage;floatscore;};namenumsexagescore2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)…結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存例子圖解第四頁,共二十二頁,編輯于2023年,星期四定義結(jié)構(gòu)體的變量定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體的同時(shí)定義

structstudent {….}st1,st2;2.先定義結(jié)構(gòu)體,后定義結(jié)構(gòu)體變量例:structstudent{….};structstudentst1,st2;3.直接定義例:struct

{….}st1,st2;在struct后不出現(xiàn)結(jié)構(gòu)體類型名第五頁,共二十二頁,編輯于2023年,星期四例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};結(jié)構(gòu)體變量的初始化例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};第六頁,共二十二頁,編輯于2023年,星期四引用規(guī)則

結(jié)構(gòu)體變量不能整體引用,只能引用變量成員★可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量

例如:tomorrw=today;引用方式:結(jié)構(gòu)體變量名.成員名6.4.2結(jié)構(gòu)體變量的引用

輸入今天的日期,然后輸出該日期。main(){structdate/*定義結(jié)構(gòu)類型date*/{intyear;intmonth;intday;};structdatetoday,tomorrow;/*說明結(jié)構(gòu)變量today*/scanf("%d%d%d",&today.year,&today.month,&today.day);printf("%d.%d.%d\n",today.year,today.month,today.day);}第七頁,共二十二頁,編輯于2023年,星期四structstudent{intnum;charname[20];charsex;structdatebirthday;floatscore;}stu1,stu2;structdate{intmonth;intday;intyear;};結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用對(duì)上面定義的結(jié)構(gòu)變量stu1,可以這樣訪問各個(gè)成員:

stu1.num stu1.sex stu1.birthday.month stu1.birthday.day stu1.birthday.year第八頁,共二十二頁,編輯于2023年,星期四6.4.3結(jié)構(gòu)體類的指針指向結(jié)構(gòu)體類變量的指針指向結(jié)構(gòu)體類變量的指針就是該變量所占用的內(nèi)存區(qū)段的首址。例:

structstudent{intnum;charname[3];charsex;floatscore;}st1,st2,st3;

structstudent*p=&st1;

printf(“%d,%s”,st1.num,);

printf(“%d,%s”,(*p).num,(*p).name);printf(“%d,%s”,p->num,p->name);numnamesexscore::2A00Hst1第九頁,共二十二頁,編輯于2023年,星期四6.4.3——2.結(jié)構(gòu)體數(shù)組與指向結(jié)構(gòu)體類數(shù)組的指針結(jié)構(gòu)體類型也可以定義數(shù)組每個(gè)下標(biāo)變量stu[i]都有結(jié)構(gòu)體類型student的各個(gè)分量;

指向結(jié)構(gòu)體類數(shù)組的指針就是該數(shù)組所占用的內(nèi)存區(qū)段的首址。例:

structstudent{intnum;charname[3];charsex;floatscore;}st[30]={……};

structstudent*p;for(p=st;p<st+30;p++)printf(“%d,%s”,p->num,p->name);::st[0]st[1]st[2]st[3]:第十頁,共二十二頁,編輯于2023年,星期四6.4.4結(jié)構(gòu)指針作為函數(shù)的參數(shù)結(jié)構(gòu)類型指針作為函數(shù)的參數(shù)可以實(shí)現(xiàn)從函數(shù)返回多個(gè)值。

structperson{char*name;/*pp子函數(shù)給結(jié)構(gòu)的各成員賦值*/intnq;

voidpp(structperson*y)floats; {y->name=“gongda”;}; y->nq=100; y->s=35.8;}main(){voidpp(structperson*y);structpersonx;pp(&x);printf(“name:%s\n”,);printf(“nq:%d\ts=%f\n”,x.nq,x.s);}

第十一頁,共二十二頁,編輯于2023年,星期四將若干數(shù)據(jù)項(xiàng)按一定的原則連接起來。鏈表中每一個(gè)數(shù)據(jù)稱為節(jié)點(diǎn)。前一個(gè)節(jié)點(diǎn)指向下一個(gè)節(jié)點(diǎn),而且只有通過前一個(gè)節(jié)點(diǎn)才能找到下一個(gè)節(jié)點(diǎn)。根據(jù)需要開辟或釋放存儲(chǔ)單元存儲(chǔ)空間不連續(xù)6.4.5結(jié)構(gòu)體的應(yīng)用——2.鏈表(LinkList)

a1

a2

a3

...an^headstructnodedatanextaistructnode{intdata;structnode*next;};structnode*head;單向鏈表第十二頁,共二十二頁,編輯于2023年,星期四1)建立鏈表2)輸出鏈表3)插入結(jié)點(diǎn)4)刪除結(jié)點(diǎn)a1

a2

a3

...an^head動(dòng)態(tài)存儲(chǔ)分配函數(shù)(應(yīng)包含malloc.h或stdlib.h)malloc(size)函數(shù)在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)內(nèi)分配一個(gè)長(zhǎng)度為size的連續(xù)存儲(chǔ)空間。函數(shù)的返回值是分配給該結(jié)點(diǎn)的起始地址。如果分配沒有成功,返回0p=(structnode*)malloc(sizeof(strucenode));free(p)函數(shù)釋放由參數(shù)p指針指向的內(nèi)存存儲(chǔ)空間第十三頁,共二十二頁,編輯于2023年,星期四

structstu{intnum;floatscore;}a,b,c;main(){a.num=101;a.score=68.5;b.num=102;b.score=77.8;c.num=103;c.score=88.5;

}h=&a;a.next=&b;b.next=&c;c.next=NULL;二、簡(jiǎn)單鏈表的建立與輸出

structstu*next

;

structstu*h;例如:建立一個(gè)有3名學(xué)生數(shù)據(jù)的簡(jiǎn)單鏈表a1

a2

a3

...an^head第十四頁,共二十二頁,編輯于2023年,星期四#include<stdlib.h>

structnode{intdata;structnode*next;};

main(){structnode*h,*p,*q;inta;h=(structnode*)malloc(sizeof(structnode));p=q=h;scanf(“%d”,a);While(a!=0){p->data=a;q->next=p;q=p;p=(structnode*)malloc(sizeof(structnode));scanf(%d”,&a);}q->next=NULL;free(p);}6.4.5動(dòng)態(tài)鏈表的建立(單向鏈表)a1

a2

a3

...an^head第十五頁,共二十二頁,編輯于2023年,星期四6.4.5輸出鏈表(遍歷鏈表)

printlist(structnode*h){structnode*p;p=h;while(p!=NULL){printf(“%d”,p->data);

p=p->next;

}}第十六頁,共二十二頁,編輯于2023年,星期四8.4.2 鏈表——插入節(jié)點(diǎn)

101

107NULL108

head

105

100

110

106p0p0p0插入頭結(jié)點(diǎn)插入尾結(jié)點(diǎn)插入中間結(jié)點(diǎn)第十七頁,共二十二頁,編輯于2023年,星期四Del(structnode*h,intx){structnode*p,*q;while(p!=NULL&&p->data!=x){q=p;p=p->next;}//尋找需要?jiǎng)h除的結(jié)點(diǎn)if(p!=NULL){if(p==h)h=p->next;//如果是頭結(jié)點(diǎn),則頭結(jié)點(diǎn)指針修改elseq->next=p->next;//刪除p指向的結(jié)點(diǎn)

free(p);//釋放p所占的內(nèi)存空間

}8.4.2 鏈表——?jiǎng)h除節(jié)點(diǎn)

101

107NULL108

head

105第十八頁,共二十二頁,編輯于2023年,星期四6.6聯(lián)合體(共用體)存儲(chǔ)形態(tài):共用體類變量的若干分量共占同一存儲(chǔ)空間。uniondata{inti;charc;longl;}com;com.i=97;printf(“%d”,com.i);printf(“%c”,com.c);printf(“%ld”,com.l);

c

il00000000000010100100000100000000000000000000000001100001共用體類型及其變量的定義和引用與結(jié)構(gòu)體類似,本質(zhì)的不同是使用內(nèi)存的方式。union共用體名{

類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;

…………….};第十九頁,共二十二頁,編輯于2023年,星期四6.6.2枚舉類型枚舉:將可能取的值一一列舉出來。枚舉類型的變量?jī)H有幾個(gè)確定的值。枚舉類型的聲明方式:

enum枚舉類型名{枚舉列表}變量表;enumweekday{sun,mon,tue,wed,thu,fri,sat}workday;枚舉元素是常量,具有數(shù)值。按順序默認(rèn)為0,1,2,….。上例中sun為0,mon為1….;枚舉類型的變量

溫馨提示

  • 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論