![第8章結(jié)構(gòu)體類型和聯(lián)合體類型_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/f66158fc-ab9c-4dee-8169-ae2dd64216b1/f66158fc-ab9c-4dee-8169-ae2dd64216b11.gif)
![第8章結(jié)構(gòu)體類型和聯(lián)合體類型_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/f66158fc-ab9c-4dee-8169-ae2dd64216b1/f66158fc-ab9c-4dee-8169-ae2dd64216b12.gif)
![第8章結(jié)構(gòu)體類型和聯(lián)合體類型_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/f66158fc-ab9c-4dee-8169-ae2dd64216b1/f66158fc-ab9c-4dee-8169-ae2dd64216b13.gif)
![第8章結(jié)構(gòu)體類型和聯(lián)合體類型_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/f66158fc-ab9c-4dee-8169-ae2dd64216b1/f66158fc-ab9c-4dee-8169-ae2dd64216b14.gif)
![第8章結(jié)構(gòu)體類型和聯(lián)合體類型_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/f66158fc-ab9c-4dee-8169-ae2dd64216b1/f66158fc-ab9c-4dee-8169-ae2dd64216b15.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 表的名稱定義為表的名稱定義為整個(gè)結(jié)構(gòu)體的整個(gè)結(jié)構(gòu)體的“標(biāo)識符標(biāo)識符”表的屬性稱表的屬性稱為為“結(jié)構(gòu)體結(jié)構(gòu)體的成員的成員”n結(jié)構(gòu)體類型的特點(diǎn):結(jié)構(gòu)體類型的特點(diǎn):n結(jié)構(gòu)體類型由若干個(gè)數(shù)據(jù)項(xiàng)組成,其中的每一個(gè)數(shù)據(jù)結(jié)構(gòu)體類型由若干個(gè)數(shù)據(jù)項(xiàng)組成,其中的每一個(gè)數(shù)據(jù)項(xiàng)稱為一個(gè)結(jié)構(gòu)體成員,它們都屬于一種已經(jīng)有定義項(xiàng)稱為一個(gè)結(jié)構(gòu)體成員,它們都屬于一種已經(jīng)有定義數(shù)據(jù)類型(基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型);數(shù)據(jù)類型(基本數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型);n系統(tǒng)并沒有預(yù)先定義結(jié)構(gòu)體類型,凡要使用結(jié)構(gòu)體類系統(tǒng)并沒有預(yù)先定義結(jié)構(gòu)體類型,凡要使用結(jié)構(gòu)體類型數(shù)據(jù)則需要在程序中進(jìn)行定義??梢愿鶕?jù)不同的需型數(shù)據(jù)則需要在程序中進(jìn)行定義??梢?/p>
2、根據(jù)不同的需要在程序中定義若干個(gè)結(jié)構(gòu)體類型;要在程序中定義若干個(gè)結(jié)構(gòu)體類型;n一個(gè)特定的自定義結(jié)構(gòu)體類型一個(gè)特定的自定義結(jié)構(gòu)體類型只在其定義存在的源程只在其定義存在的源程序中起作用序中起作用,在其他源程序中則不能使用;,在其他源程序中則不能使用;n要使用結(jié)構(gòu)體類型數(shù)據(jù),必須要要使用結(jié)構(gòu)體類型數(shù)據(jù),必須要先定義結(jié)構(gòu)體類型先定義結(jié)構(gòu)體類型,然后然后再定義此種類型的變量再定義此種類型的變量;struct student long id; char name20; int age; char sex; char address80; long tel;id1,id2; struct A long nu
3、mber; char name20; int x; float y; struct A a1,a2;struct B long number; char name20; int x; float y;b1,b2; struct long number; char name20; int x; float y;c1,c2; 定義了兩個(gè)定義了兩個(gè)struct A結(jié)構(gòu)體數(shù)據(jù)類型的變量結(jié)構(gòu)體數(shù)據(jù)類型的變量a1,a2(分別表示學(xué)生分別表示學(xué)生a1和學(xué)生和學(xué)生a2的信息的信息)struct datestruct date int year; int year; int month; int month;
4、int day; int day;struct studentstruct student long number; long number; char name20; char name20; struct date struct date birthday;birthday; int age; int age; char address80; char address80; long tel; long tel;嵌套型的結(jié)構(gòu)體的示意圖嵌套型的結(jié)構(gòu)體的示意圖typedef 二年級學(xué)生情況表二年級學(xué)生情況表 stu2typedef struct studenttypedef struct st
5、udent long number; long number; struct date birthday; struct date birthday; char name20; char name20; int age; int age; char sex; char sex; char address80; char address80; long tel; long tel; STUSTU; ;struct student struct student 等價(jià)于等價(jià)于 STUSTUstruct studentstruct student long number; long number; s
6、truct datestruct date birthday; birthday; char name20; char name20; int age; int age; char sex; char sex; char address80; char address80; long tel; long tel; ;typedef struct student STU;typedef struct student STU;struct student struct student 等價(jià)于等價(jià)于 STUSTU先定義構(gòu)造數(shù)據(jù)類型,再取先定義構(gòu)造數(shù)據(jù)類型,再取別名,別名習(xí)慣上大寫。別名,別名習(xí)慣上大
7、寫。在定義構(gòu)造數(shù)據(jù)在定義構(gòu)造數(shù)據(jù)類型的同時(shí)取別類型的同時(shí)取別名名,常用此方法。常用此方法。特別提示:特別提示:結(jié)構(gòu)體成員分量的數(shù)據(jù)類型與在其連接組合過結(jié)構(gòu)體成員分量的數(shù)據(jù)類型與在其連接組合過程程最后一個(gè)成員分量的數(shù)據(jù)類型最后一個(gè)成員分量的數(shù)據(jù)類型一致。一致。 例:設(shè)有結(jié)構(gòu)體類型及變量定義例:設(shè)有結(jié)構(gòu)體類型及變量定義 struct A int x; float y; ; struct B struct A a; char c; ; struct B b;struct B b;則有:則有:b.a.xb.a.x 整型變量整型變量 b.a.yb.a.y 實(shí)型變量實(shí)型變量b.cb.c 字符型變量字符型變
8、量例例8-5 結(jié)構(gòu)體變量引用和輸入輸出示例。結(jié)構(gòu)體變量引用和輸入輸出示例。struct TEST int x; char ch;實(shí)參實(shí)參 struct TEST a;struct TEST a;aa.xa.chbb.xb.ch形參形參 struct TEST b;struct TEST b;10aa10/* Name: ex08-06.cpp */#include typedef struct TESTint x;double y;char ch;T;void main()void printstru(T x);struct TEST a1;printf(Input the values of
9、 a1:n);scanf(%d,%lf,%c,&a1.x,&a1.y,&a1.ch);printf(a1.x=%d,a1.y=%f,a1.ch=%cn,a1.x,a1.y,a1.ch);printstru(a1); void printstru(T x)x.x+=10;x.y/=2;x.ch+=1;printf(x.x=%d,x.y=%f,x.ch=%cn,x.x,x.y,x.ch); 例例8-7 返回結(jié)構(gòu)體類型函數(shù)的使用示例。返回結(jié)構(gòu)體類型函數(shù)的使用示例。 例:設(shè)有結(jié)構(gòu)體類型定義例:設(shè)有結(jié)構(gòu)體類型定義sturct personsturct person char na
10、me20; char name20; int count; int count;/;/以下定義結(jié)構(gòu)體數(shù)組以下定義結(jié)構(gòu)體數(shù)組stu3stu3,表示有四個(gè)結(jié)構(gòu)體變量,表示有四個(gè)結(jié)構(gòu)體變量stu0,stu0, stu1,stu2 stu1,stu2。struct person stu3=struct person stu3=“ZhangZhang”,0,0,”WangWang”,0,0,”LiLi”,0;,0;或或struct person stu3=struct person stu3=“ZhangZhang”,0,0,“WangWang”,0,0,“LiLi”,0; ,0; 例如,對一維結(jié)構(gòu)體數(shù)
11、組的初始化就類似于對普通二例如,對一維結(jié)構(gòu)體數(shù)組的初始化就類似于對普通二維數(shù)組的初始化維數(shù)組的初始化例例8-9 結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)示例。結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)示例。P269struct A int x; char c;a(實(shí)際參數(shù):實(shí)際參數(shù):struct A a10;)b(形式參數(shù):形式參數(shù):struct A b) b本質(zhì)上是指針變量本質(zhì)上是指針變量 struct person char name20; int count;stu, *p=&stu;p&stustu*pstup指針變量指針變量p與結(jié)構(gòu)體變與結(jié)構(gòu)體變量量stu的關(guān)系:的關(guān)系:P指向指向結(jié)構(gòu)體變量結(jié)構(gòu)體變量stu,
12、如圖,如圖示:示:同樣:對指針變量同樣:對指針變量p取指針取指針運(yùn)算就是結(jié)構(gòu)體變量運(yùn)算就是結(jié)構(gòu)體變量stustruct A int x; float y;a1,*p=&a1; &a1 pa1 *p a1.x (*p).x a1.y (*p).y p-x p-y結(jié)構(gòu)體變量結(jié)構(gòu)體變量操作方式操作方式通過指向結(jié)構(gòu)通過指向結(jié)構(gòu)體變量的指針體變量的指針變量操作結(jié)構(gòu)變量操作結(jié)構(gòu)體變量的方式體變量的方式或或 struct A char c; int x; ; struct A a5,*p1; p1=&a2; ap1 &a2 p1 a2 *p1 a2.c (*p1).c a2.
13、x (*p1).x p1-c p1-x例例8-11 用指向結(jié)構(gòu)體數(shù)組元素的指針操作結(jié)構(gòu)體數(shù)組元素示例。用指向結(jié)構(gòu)體數(shù)組元素的指針操作結(jié)構(gòu)體數(shù)組元素示例。賦值的方式有三種:賦值的方式有三種:a2.x=100;(*p1).x=100;p1-x=100; struct A char c; int x; ; struct A a5,*p2; p2=a;ap2 &ai p2+i ai *(p2+i) ai.c (*(p2+i).c ai.x (*(p2+i).x (p2+i)-c (p2+i)-x例例8-12 輸入若干個(gè)學(xué)生信息并輸出。輸入若干個(gè)學(xué)生信息并輸出。對于結(jié)構(gòu)體中某個(gè)數(shù)組元素,對于結(jié)構(gòu)
14、體中某個(gè)數(shù)組元素,有三種表示方式:有三種表示方式:ai、*(a+i)、*(p+i) /正確的自引用結(jié)構(gòu)正確的自引用結(jié)構(gòu)struct test char ch; struct test *next; ;/錯誤的自引用結(jié)構(gòu)錯誤的自引用結(jié)構(gòu)struct test char ch; struct test next; ;struct Astruct A int x; int x; struct B struct B * *pb;pb;struct Bstruct B int y; int y; struct A struct A * *pa;pa; ; 數(shù)據(jù)對象a數(shù)據(jù)對象b例例8-13 Head線性表
15、的鏈?zhǔn)酱鎯Y(jié)構(gòu)線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu) 數(shù)據(jù)域 指針域結(jié)點(diǎn)結(jié)構(gòu):結(jié)點(diǎn)結(jié)構(gòu): 例:本小節(jié)下面示例中的例:本小節(jié)下面示例中的數(shù)據(jù)類型數(shù)據(jù)類型NODENODE定義如下:定義如下:typedef struct stutypedef struct stu char name20; char name20; double score; double score; struct stu struct stu * *next;next;NODE;NODE;結(jié)點(diǎn)結(jié)構(gòu)的結(jié)點(diǎn)結(jié)構(gòu)的C C語言描述方式如下:語言描述方式如下:typedef struct nodetypedef struct node elementtyp
16、e data; elementtype data; struct node struct node * *next;next;NODE;NODE;其中,其中,elementtypeelementtype表示某種已經(jīng)定表示某種已經(jīng)定義好的表示結(jié)點(diǎn)數(shù)據(jù)域的數(shù)據(jù)類型;義好的表示結(jié)點(diǎn)數(shù)據(jù)域的數(shù)據(jù)類型;NODENODE為結(jié)點(diǎn)類型為結(jié)點(diǎn)類型struct nodestruct node的別名。的別名。 反向生成法構(gòu)造單鏈表算法: NODE *create(int n)/* 構(gòu)造具有構(gòu)造具有n個(gè)結(jié)點(diǎn)的單鏈表個(gè)結(jié)點(diǎn)的單鏈表 */ NODE *p,*h; int i; char inbuf10; h=(NODE
17、*)malloc(sizeof(NODE); /* 創(chuàng)建單鏈表的頭結(jié)點(diǎn)創(chuàng)建單鏈表的頭結(jié)點(diǎn) */ h-next=NULL; for(i=n;i0;i-) p=(NODE *)malloc(sizeof(NODE); /* 為每一個(gè)新結(jié)點(diǎn)分配存儲為每一個(gè)新結(jié)點(diǎn)分配存儲 */ gets(p-name); gets(inbuf);p-score=atof(inbuf);p-next=h-next; /* 將新建結(jié)點(diǎn)插入到單鏈表的頭結(jié)點(diǎn)之后將新建結(jié)點(diǎn)插入到單鏈表的頭結(jié)點(diǎn)之后 */h-next=p; return h;帶頭結(jié)點(diǎn)單鏈表輸出算法:void printlist(NODE *h) NODE *cu
18、rrent=h; while(current-next!=NULL) current=current-next; printf(%st%fn,current-name,current-score); qpp-next=q-nextq-next=pqpp-next=q-nextq-next=p帶頭結(jié)點(diǎn)的單鏈表中實(shí)現(xiàn)的插入結(jié)點(diǎn)算法:帶頭結(jié)點(diǎn)的單鏈表中實(shí)現(xiàn)的插入結(jié)點(diǎn)算法:void insertlist(NODE *h,char *s) NODE *p,*old,*last; char inbuf20; /* 創(chuàng)建新結(jié)點(diǎn)創(chuàng)建新結(jié)點(diǎn) */ p=(NODE *)malloc(sizeof(NODE); p
19、rintf(tInput the data of the new node:n); gets(p-name); gets(inbuf); p-score=atof(inbuf); last=h-next;/* 按某種方法尋找新結(jié)點(diǎn)的插入位置按某種方法尋找新結(jié)點(diǎn)的插入位置 */ while(strcmp(last-name,s)!=0&last-next!=NULL) old=last;last=last-next; if(last-next!=NULL)/* 找到插入位置,插入新結(jié)點(diǎn)找到插入位置,插入新結(jié)點(diǎn) */ old-next=p;p-next=last; else /* 未找到插入位置,新結(jié)點(diǎn)添加到鏈表末尾未找到插入位置,新結(jié)點(diǎn)添加到鏈表末尾 */ last-next=p;p-next=NULL; qpq-next=p-next;free(p);qpq-next=p-next;free(p);帶頭結(jié)點(diǎn)的單鏈表中實(shí)現(xiàn)的刪除結(jié)點(diǎn)算法:帶頭結(jié)點(diǎn)的單鏈表中實(shí)現(xiàn)的刪除結(jié)點(diǎn)算法:void deletelist(NODE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度互聯(lián)網(wǎng)行業(yè)員工勞動權(quán)益保護(hù)協(xié)議
- 2025年水貂圓沿女帽行業(yè)深度研究分析報(bào)告
- 10-1 勸學(xué)(教學(xué)設(shè)計(jì))-2024-2025學(xué)年高一語文上學(xué)期同步教學(xué)教學(xué)設(shè)計(jì)專輯(統(tǒng)編版必修上冊)
- 體育產(chǎn)業(yè)融資借款居間協(xié)議
- 2025年度車輛維修后綠色維修技術(shù)與可持續(xù)發(fā)展協(xié)議
- 淮安市公寓裝修合同范本
- 五千以內(nèi)加減混合兩步運(yùn)算單元檢測題
- 機(jī)械制造工藝試題含答案
- 包裝設(shè)計(jì)師題庫+參考答案
- 三年級語文上冊全冊說課稿匯編
- 2025寒假開學(xué)第一課 課件【1】
- 北京市海淀區(qū)2024-2025學(xué)年五年級上冊語文期末試卷(有答案)
- 2024-2024年高考全國卷英語語法填空
- (更新版)HCIA安全H12-711筆試考試題庫導(dǎo)出版-下(判斷、填空、簡答題)
- 華科版五年級全冊信息技術(shù)教案(共24課時(shí))
- QTD01鋼質(zhì)焊接氣瓶檢驗(yàn)工藝指導(dǎo)書
- 辛棄疾生平簡介(課堂PPT)
- 人教版七年級英語下冊全冊英語單詞默寫直接打印
- 《爐中煤》課件.ppt
- 公共衛(wèi)生服務(wù)考核評分標(biāo)準(zhǔn)(新)
- 《乒乓球》體育課教案(全)
評論
0/150
提交評論