




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第九講結構體共用體鏈表第一頁,共二十二頁,編輯于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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年安徽省阜陽市電信技術崗位招聘5人筆試參考題庫附帶答案詳解
- 2025年河北工藝美術職業(yè)學院單招職業(yè)傾向性測試題庫新版
- 第八單元課題3金屬資源的利用和保護教學設計-2024-2025學年九年級化學人教版(2024)下冊
- 2024年南京地鐵運營有限責任公司秋季招聘筆試參考題庫附帶答案詳解
- 2025年??谑袉握新殬I(yè)適應性測試題庫及參考答案
- 教師職業(yè)道德與學前教育政策法規(guī) 教案 4. 幼兒教師職業(yè)倦怠與心理健康維護
- 第19章 平面直角坐標系 回顧反思2024-2025學年八年級下冊數學同步教學設計(冀教版)
- 第六單元 活動二《增加對抗角色》教學設計 2023-2024學年滬科版(2023)初中信息技術九年級下冊
- 八年級下冊數學北師大版第四單元復習教學設計教案1
- 16《水蒸發(fā)》教學設計-2024-2025學年青島版小學科學四年級上冊
- 北京工業(yè)大學《數據挖掘》2023-2024學年第一學期期末試卷
- 2024年物聯(lián)網安裝調試員(中級工)職業(yè)資格鑒定考試題庫(含答案)
- 標準化機房改造方案
- 珠海市第三人民醫(yī)院中醫(yī)智能臨床輔助診療系統(tǒng)建設方案
- 早產臨床診斷與治療指南
- 工程簽證單完整版
- 《義務教育數學課程標準(2022年版)》初中內容解讀
- 2025屆高三化學一輪復習 原電池 化學電源(第一課時)課件
- 全院護理查房(食管裂孔疝)
- 川教版信息技術六年級下冊全冊教案【新教材】
- 2024-2025學年統(tǒng)編版語文九年級下冊第7課《溜索》任務驅動型教學設計
評論
0/150
提交評論