第8章結(jié)構(gòu)體類型和聯(lián)合體類型_第1頁
第8章結(jié)構(gòu)體類型和聯(lián)合體類型_第2頁
第8章結(jié)構(gòu)體類型和聯(lián)合體類型_第3頁
第8章結(jié)構(gòu)體類型和聯(lián)合體類型_第4頁
第8章結(jié)構(gòu)體類型和聯(lián)合體類型_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 表的名稱定義為表的名稱定義為整個結(jié)構(gòu)體的整個結(jié)構(gòu)體的“標(biāo)識符標(biāo)識符”表的屬性稱表的屬性稱為為“結(jié)構(gòu)體結(jié)構(gòu)體的成員的成員”n結(jié)構(gòu)體類型的特點:結(jié)構(gòu)體類型的特點:n結(jié)構(gòu)體類型由若干個數(shù)據(jù)項組成,其中的每一個數(shù)據(jù)結(jié)構(gòu)體類型由若干個數(shù)據(jù)項組成,其中的每一個數(shù)據(jù)項稱為一個結(jié)構(gòu)體成員,它們都屬于一種已經(jīng)有定義項稱為一個結(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ù)不同的需要在程序中定義若干個結(jié)構(gòu)體類型;要在程序中定義若干個結(jié)構(gòu)體類型;n一個特定的自定義結(jié)構(gòu)體類型一個特定的自定義結(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; 定義了兩個定義了兩個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 等價于等價于 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 等價于等價于 STUSTU先定義構(gòu)造數(shù)據(jù)類型,再取先定義構(gòu)造數(shù)據(jù)類型,再取別名,別名習(xí)慣上大寫。別名,別名習(xí)慣上大

7、寫。在定義構(gòu)造數(shù)據(jù)在定義構(gòu)造數(shù)據(jù)類型的同時取別類型的同時取別名名,常用此方法。常用此方法。特別提示:特別提示:結(jié)構(gòu)體成員分量的數(shù)據(jù)類型與在其連接組合過結(jié)構(gòu)體成員分量的數(shù)據(jù)類型與在其連接組合過程程最后一個成員分量的數(shù)據(jù)類型最后一個成員分量的數(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 實型變量實型變量b.cb.c 字符型變量字符型變

8、量例例8-5 結(jié)構(gòu)體變量引用和輸入輸出示例。結(jié)構(gòu)體變量引用和輸入輸出示例。struct TEST int x; char ch;實參實參 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,表示有四個結(jié)構(gòu)體變量,表示有四個結(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ù):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取指針取指針運算就是結(jié)構(gòu)體變量運算就是結(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 輸入若干個學(xué)生信息并輸出。輸入若干個學(xué)生信息并輸出。對于結(jié)構(gòu)體中某個數(shù)組元素,對于結(jié)構(gòu)

14、體中某個數(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é)點結(jié)構(gòu):結(jié)點結(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é)點結(jié)構(gòu)的結(jié)點結(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é)點數(shù)據(jù)域的數(shù)據(jù)類型;義好的表示結(jié)點數(shù)據(jù)域的數(shù)據(jù)類型;NODENODE為結(jié)點類型為結(jié)點類型struct nodestruct node的別名。的別名。 反向生成法構(gòu)造單鏈表算法: NODE *create(int n)/* 構(gòu)造具有構(gòu)造具有n個結(jié)點的單鏈表個結(jié)點的單鏈表 */ NODE *p,*h; int i; char inbuf10; h=(NODE

17、*)malloc(sizeof(NODE); /* 創(chuàng)建單鏈表的頭結(jié)點創(chuàng)建單鏈表的頭結(jié)點 */ h-next=NULL; for(i=n;i0;i-) p=(NODE *)malloc(sizeof(NODE); /* 為每一個新結(jié)點分配存儲為每一個新結(jié)點分配存儲 */ gets(p-name); gets(inbuf);p-score=atof(inbuf);p-next=h-next; /* 將新建結(jié)點插入到單鏈表的頭結(jié)點之后將新建結(jié)點插入到單鏈表的頭結(jié)點之后 */h-next=p; return h;帶頭結(jié)點單鏈表輸出算法: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é)點的單鏈表中實現(xiàn)的插入結(jié)點算法:帶頭結(jié)點的單鏈表中實現(xiàn)的插入結(jié)點算法:void insertlist(NODE *h,char *s) NODE *p,*old,*last; char inbuf20; /* 創(chuàng)建新結(jié)點創(chuàng)建新結(jié)點 */ 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é)點的插入位置按某種方法尋找新結(jié)點的插入位置 */ while(strcmp(last-name,s)!=0&last-next!=NULL) old=last;last=last-next; if(last-next!=NULL)/* 找到插入位置,插入新結(jié)點找到插入位置,插入新結(jié)點 */ old-next=p;p-next=last; else /* 未找到插入位置,新結(jié)點添加到鏈表末尾未找到插入位置,新結(jié)點添加到鏈表末尾 */ last-next=p;p-next=NULL; qpq-next=p-next;free(p);qpq-next=p-next;free(p);帶頭結(jié)點的單鏈表中實現(xiàn)的刪除結(jié)點算法:帶頭結(jié)點的單鏈表中實現(xiàn)的刪除結(jié)點算法: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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論