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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

struct[結構體類型名]{變量類型變量名;變量類型變量名;變量類型變量名;…}[結構變量名表];注意:“結構類型名”和“結構變量名表”,可省略一個。關鍵字struct和它后面的結構體類型名一起組成一個新的數據類型名

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

structstudent {….}st1,st2;2.先定義結構體,后定義結構體變量例:structstudent{….};structstudentst1,st2;3.直接定義例:struct

{….}st1,st2;在struct后不出現(xiàn)結構體類型名第五頁,共二十二頁,編輯于2023年,星期四例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};結構體變量的初始化例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ī)則

結構體變量不能整體引用,只能引用變量成員★可以將一個結構體變量賦值給另一個結構體變量

例如:tomorrw=today;引用方式:結構體變量名.成員名6.4.2結構體變量的引用

輸入今天的日期,然后輸出該日期。main(){structdate/*定義結構類型date*/{intyear;intmonth;intday;};structdatetoday,tomorrow;/*說明結構變量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;};結構體嵌套時逐級引用對上面定義的結構變量stu1,可以這樣訪問各個成員:

stu1.num stu1.sex stu1.birthday.month stu1.birthday.day stu1.birthday.year第八頁,共二十二頁,編輯于2023年,星期四6.4.3結構體類的指針指向結構體類變量的指針指向結構體類變量的指針就是該變量所占用的內存區(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.結構體數組與指向結構體類數組的指針結構體類型也可以定義數組每個下標變量stu[i]都有結構體類型student的各個分量;

指向結構體類數組的指針就是該數組所占用的內存區(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結構指針作為函數的參數結構類型指針作為函數的參數可以實現(xiàn)從函數返回多個值。

structperson{char*name;/*pp子函數給結構的各成員賦值*/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年,星期四將若干數據項按一定的原則連接起來。鏈表中每一個數據稱為節(jié)點。前一個節(jié)點指向下一個節(jié)點,而且只有通過前一個節(jié)點才能找到下一個節(jié)點。根據需要開辟或釋放存儲單元存儲空間不連續(xù)6.4.5結構體的應用——2.鏈表(LinkList)

a1

a2

a3

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

a2

a3

...an^head動態(tài)存儲分配函數(應包含malloc.h或stdlib.h)malloc(size)函數在內存的動態(tài)存儲區(qū)內分配一個長度為size的連續(xù)存儲空間。函數的返回值是分配給該結點的起始地址。如果分配沒有成功,返回0p=(structnode*)malloc(sizeof(strucenode));free(p)函數釋放由參數p指針指向的內存存儲空間第十三頁,共二十二頁,編輯于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;二、簡單鏈表的建立與輸出

structstu*next

;

structstu*h;例如:建立一個有3名學生數據的簡單鏈表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動態(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é)點

101

107NULL108

head

105

100

110

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

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

}8.4.2 鏈表——刪除節(jié)點

101

107NULL108

head

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

c

il00000000000010100100000100000000000000000000000001100001共用體類型及其變量的定義和引用與結構體類似,本質的不同是使用內存的方式。union共用體名{

類型標識符成員名;類型標識符成員名;

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論