《結(jié)構(gòu)與聯(lián)合》ppt課件_第1頁
《結(jié)構(gòu)與聯(lián)合》ppt課件_第2頁
《結(jié)構(gòu)與聯(lián)合》ppt課件_第3頁
《結(jié)構(gòu)與聯(lián)合》ppt課件_第4頁
《結(jié)構(gòu)與聯(lián)合》ppt課件_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)第七章第七章 構(gòu)造與結(jié)合構(gòu)造與結(jié)合構(gòu)造類型二構(gòu)造類型二Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)構(gòu)造和結(jié)合的概念構(gòu)造和結(jié)合的概念 在數(shù)據(jù)中,經(jīng)常有一些既有聯(lián)絡(luò),類型又不同的數(shù)據(jù),它們又在數(shù)據(jù)中,經(jīng)常有一些既有聯(lián)絡(luò),類型又不同的數(shù)據(jù),它們又需求一同處置。需求一同處置。如:學(xué)生根本檔案的數(shù)據(jù)如:學(xué)生根本檔案的數(shù)據(jù) 字段:字段: 學(xué)號學(xué)號 姓名姓名 性別性別 地址地址 分數(shù)分數(shù)類型:類型: long char char char float long char char char f

2、loat C言語允許用戶按本人的需求將不同的根本類型構(gòu)呵斥一種特言語允許用戶按本人的需求將不同的根本類型構(gòu)呵斥一種特殊類型,即構(gòu)造和結(jié)合。殊類型,即構(gòu)造和結(jié)合。構(gòu)造和結(jié)合的操作分為三個步驟:構(gòu)造和結(jié)合的操作分為三個步驟:根據(jù)需求定義構(gòu)造或結(jié)合類型;根據(jù)需求定義構(gòu)造或結(jié)合類型;經(jīng)過定義的類型闡明變量、數(shù)組、指針;經(jīng)過定義的類型闡明變量、數(shù)組、指針;援用變量、數(shù)組元素和指針指向的對象。援用變量、數(shù)組元素和指針指向的對象。Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)7.1 結(jié)結(jié) 構(gòu)構(gòu) 構(gòu)造類型的定義構(gòu)造類型的定義格式:格式: struct 構(gòu)造名構(gòu)造名 type

3、成員成員1 ; type 成員成員2 ; type 成員成員n ; ;構(gòu)造標志。構(gòu)造標志。用標識符命名的構(gòu)造類型名。用標識符命名的構(gòu)造類型名。 構(gòu)造類型中所含構(gòu)造類型中所含的成員項及其類型。的成員項及其類型。struct student long num ; char name20 ; int age ; char add30 ; float score ; ;構(gòu)造的定義確定了如下兩點:構(gòu)造的定義確定了如下兩點:定義構(gòu)造類型,確定構(gòu)造中的成員項的稱號及類型。定義構(gòu)造類型,確定構(gòu)造中的成員項的稱號及類型。 指明該構(gòu)造類型的變量在內(nèi)存中的組織方式。指明該構(gòu)造類型的變量在內(nèi)存中的組織方式。Xuan

4、shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)構(gòu)造變量的闡明構(gòu)造變量的闡明 定義構(gòu)造只是確定該構(gòu)造類型的稱號及其成員項的組成及成員定義構(gòu)造只是確定該構(gòu)造類型的稱號及其成員項的組成及成員項的類型。必需由定義的構(gòu)造類型闡明構(gòu)造變量,才開辟相應(yīng)的內(nèi)項的類型。必需由定義的構(gòu)造類型闡明構(gòu)造變量,才開辟相應(yīng)的內(nèi)存空間以供運用。存空間以供運用。構(gòu)造變量的闡明方式:構(gòu)造變量的闡明方式:定義后闡明定義后闡明 struct student long num ; char name20 ; int age ; char add30 ; float score ; ;struct studen

5、t wang,zhang,liu;用用struct student 類型闡明三個變量。類型闡明三個變量。定義構(gòu)造類型時闡明變量定義構(gòu)造類型時闡明變量 wang,zhang,liu;Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)無名構(gòu)造方式闡明變量無名構(gòu)造方式闡明變量struct long num ; char name20 ; int age ; char add30 ; float score ; wang,zhang,liu;闡明:闡明: 留意類型和變量的區(qū)別。留意類型和變量的區(qū)別。成員項可單獨運用。成員項可單獨運用。wang.age=20構(gòu)造的成員項也可

6、以是構(gòu)造變量。構(gòu)造的成員項也可以是構(gòu)造變量。struct doc char name20 ; struct birth age ; float sal ; ;struct birth int year; int mon; int day; ; 構(gòu)造構(gòu)造doc中的成中的成員項是一個員項是一個birth的的構(gòu)造變量!構(gòu)造變量! Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)構(gòu)造變量的援用構(gòu)造變量的援用 構(gòu)造變量都是以成員項作為援用單位構(gòu)造變量都是以成員項作為援用單位, ,援用方式:援用方式: 構(gòu)造變量名構(gòu)造變量名.成員項名成員項名wang.score=100;闡明

7、:闡明:構(gòu)造變量的成員項與普通變量有一樣的性質(zhì)。構(gòu)造變量的成員項與普通變量有一樣的性質(zhì)。構(gòu)造體變量的初始化構(gòu)造體變量的初始化構(gòu)造變量可以在闡明時賦初值,稱為初始化。構(gòu)造變量可以在闡明時賦初值,稱為初始化。static struct student long num ; char *name; char sex3 ; int age ; float score ; char addr 30 ; wang = 99010101 , “王五王五 , “男男 , 20 , 90.5 , “上海上海 ;Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)構(gòu)造數(shù)組構(gòu)造數(shù)組 構(gòu)造

8、變量也可以構(gòu)呵斥數(shù)組,稱為構(gòu)造數(shù)組。每個數(shù)組元素都構(gòu)造變量也可以構(gòu)呵斥數(shù)組,稱為構(gòu)造數(shù)組。每個數(shù)組元素都是一個構(gòu)造變量,都含有構(gòu)呵斥員項。它們在內(nèi)存中的地址是延續(xù)是一個構(gòu)造變量,都含有構(gòu)呵斥員項。它們在內(nèi)存中的地址是延續(xù)的。的。數(shù)組的闡明:數(shù)組的闡明: struct 構(gòu)造名構(gòu)造名 構(gòu)造數(shù)組名構(gòu)造數(shù)組名 常量表達式常量表達式 ;struct student long num ; char name20 ; float score ; stud3 ;闡明:闡明: 三個構(gòu)造數(shù)組元素都含有三個構(gòu)造數(shù)組元素都含有student 的成員項。的成員項。構(gòu)造數(shù)組名構(gòu)造數(shù)組名stud,代表構(gòu)造數(shù)組的首地址。,代

9、表構(gòu)造數(shù)組的首地址。 外部和靜態(tài)構(gòu)造數(shù)組在闡明時可以初始化。外部和靜態(tài)構(gòu)造數(shù)組在闡明時可以初始化。 =99010101 , “wang ,67.5 , 99010102 , “zhao ,78.5 , 99010103 , “fun , 98.5 ;Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)舉例:統(tǒng)計三個候選人的票數(shù)。舉例:統(tǒng)計三個候選人的票數(shù)。#include #define NUMBER 10struct student int num ; char name20 ; int count ; lead3 = 1 , “fun ,0 ,2 ,“tan ,

10、0 , 3 , “wang , 0 ;void main (void) int i ,j ,numb ; for (i=0 ; iNUMBER ; i+ ) scanf (“%d ,&numb ) ; if (numb0) leadnumb-1 .count + ; else printf(“Selection errorn); printf (“ n ) ;for (i=0 ; i成員項名成員項名構(gòu)造指針主要用于對構(gòu)造數(shù)組操作。構(gòu)造指針主要用于對構(gòu)造數(shù)組操作。struct studoc int iNum; char *name;*p,wang=2001,wang li;p=&

11、wang;printf(“%d:%s,p-iNum,p-name;Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)舉例:舉例:#include struct sam int num ; char name20 ; char *addr; ws = 101 , “fun , “Shanghai , 102 , “tan , “Bejing , 103 , “wang , “Hefei ;void main ( void) int i; struct sam *pws ; pws = ws ; for ( i=0 ; inum , pws-name , pws-ad

12、dr ) ; 定義構(gòu)造,闡明定義構(gòu)造,闡明數(shù)組并初始化。數(shù)組并初始化。闡明構(gòu)造指針。闡明構(gòu)造指針。指針指向構(gòu)造數(shù)組。指針指向構(gòu)造數(shù)組。經(jīng)過指針援用成經(jīng)過指針援用成員項。員項。Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)構(gòu)造與函數(shù)參數(shù)構(gòu)造與函數(shù)參數(shù) 當函數(shù)需求經(jīng)過形參傳送一個構(gòu)造時,普通有兩種處置方法:當函數(shù)需求經(jīng)過形參傳送一個構(gòu)造時,普通有兩種處置方法: 傳送一個構(gòu)造指針效率高。傳送一個構(gòu)造指針效率高。#includevoid mprintp (struct student * ) ;struct student long num ;char *name ;

13、float score; ; void main ( ) struct student s1 ; s1.num = 99010101 ; = “wang hai ; s1.score = 99 ; mprintp ( &s1 ) ; void mprintp ( struct student *sp ) printf(“%ldn%sn%5.1fn , sp-num , sp-name , sp-score ) ;指向構(gòu)造的指針。指向構(gòu)造的指針。傳送一個構(gòu)造變量效率低。傳送一個構(gòu)造變量效率低。 void mprintp (struct student ) ; s1stru

14、ct student svsv.num, , sv.score 構(gòu)造變量。構(gòu)造變量。Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)前往構(gòu)造變量的函數(shù)前往構(gòu)造變量的函數(shù) 當函數(shù)的前往值為一個構(gòu)造變量時,稱該函數(shù)為一個構(gòu)外型函當函數(shù)的前往值為一個構(gòu)造變量時,稱該函數(shù)為一個構(gòu)外型函數(shù)。數(shù)。#includestruct stu long num ; char name10 ; float score ; ; struct stu sv(void);void main ( void) struct stu ws ; ws = sv ( ) ; printf

15、 (“%ldn%sn:%fn , ws.num , , ws.score ) ;struct stu sv(void) struct stu stemp ; gets() scanf (“%ld,%f , &stemp.num, &stemp.score ) ; return ( stemp) ;Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)前往構(gòu)造指針的函數(shù)前往構(gòu)造指針的函數(shù) 當函數(shù)的前往值為一個構(gòu)造指針時,稱該函數(shù)為一個構(gòu)造指針當函數(shù)的前往值為一個構(gòu)造指針時,稱該函數(shù)為一個構(gòu)造指針型函數(shù)。型函數(shù)。#inc

16、ludestruct stu long num ;char *name;float score ; sa = 99010101 , “fun , 89, 99010102 , “zhang , 99 , 99010103 , “wang ,78 , 0 , 0 , 0struct stu *findp (long) ;void main ( )long lsanum ; int i ; struct stu *sap ; printf (“Enter the number: ) ; scanf (“%ld , &lsanum ) ; sap = findp (lsanum ) ; if

17、 ( sap -num != NULL ) printf (“%ld n %s n %f n , sap-num , sap-name ,sap-score) ; else printf ( “not found n ) ;struct stu *findp (long number ) int i ; for (i=0 ; sa i .num !=0 ; i+ ) if (sa i .num = number ) break ; return (&sa i ) ;Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)思索題思索題 知某班有知某班有6個人參與數(shù)

18、學(xué)和物理競賽的集訓(xùn)和課程考試,個人參與數(shù)學(xué)和物理競賽的集訓(xùn)和課程考試,求:求: 兩門課程中的最高成果,及對應(yīng)的姓名、學(xué)號和課程編號。兩門課程中的最高成果,及對應(yīng)的姓名、學(xué)號和課程編號。 課程課程1,2的平均成果,并求出兩門課程都低于平均成果的學(xué)的平均成果,并求出兩門課程都低于平均成果的學(xué)生姓名和學(xué)號。生姓名和學(xué)號。 對編號對編號1的課程從高到低排序。留意,其他成員項應(yīng)堅持的課程從高到低排序。留意,其他成員項應(yīng)堅持對應(yīng)關(guān)系。對應(yīng)關(guān)系。 闡明:要求定義構(gòu)造,第一成員項為學(xué)生姓名,第二成員項為闡明:要求定義構(gòu)造,第一成員項為學(xué)生姓名,第二成員項為學(xué)號,另外兩個成員項為兩門課成果。、要求分別用函數(shù)學(xué)號

19、,另外兩個成員項為兩門課成果。、要求分別用函數(shù)完成。完成。 檢查某位同窗兩門課程成果分別排第幾名。檢查某位同窗兩門課程成果分別排第幾名。Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)7.2 鏈鏈 表表 援用本身的構(gòu)造和鏈表的概念援用本身的構(gòu)造和鏈表的概念 構(gòu)造中的某個成員項,為指向該構(gòu)造類型本身的指針,那么稱為構(gòu)造中的某個成員項,為指向該構(gòu)造類型本身的指針,那么稱為援用本身的構(gòu)造。援用本身的構(gòu)造。 struct student int num ; float score ; char *name ; struct student *next ; ;指向本身的構(gòu)

20、造。指向本身的構(gòu)造。一樣類型的構(gòu)造指針。一樣類型的構(gòu)造指針。 鏈表是一種動態(tài)存儲分配構(gòu)造,經(jīng)過指針相連,數(shù)據(jù)可以不連鏈表是一種動態(tài)存儲分配構(gòu)造,經(jīng)過指針相連,數(shù)據(jù)可以不連續(xù)存放。續(xù)存放。head構(gòu)造變量構(gòu)造變量NULLXuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)鏈表鏈表head2000H2000H2400H2400HNULLtailXuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)內(nèi)存分配函數(shù)內(nèi)存分配函數(shù) 鏈表的操作需求開辟內(nèi)存單元以便插入或追加節(jié)點,刪除節(jié)點鏈表的操作需求開辟內(nèi)存單元以便插入或追加節(jié)點,刪除節(jié)點后需求釋放節(jié)點占

21、用的內(nèi)存單元。后需求釋放節(jié)點占用的內(nèi)存單元。C 言語提供了相應(yīng)的函數(shù)。言語提供了相應(yīng)的函數(shù)。malloc函數(shù)函數(shù)運用方法:運用方法: ptr=malloc(size);分配內(nèi)存的字節(jié)數(shù)。分配內(nèi)存的字節(jié)數(shù)。前往空類型的指針。前往空類型的指針。勝利:前往內(nèi)存的地址。勝利:前往內(nèi)存的地址。失敗:前往失?。呵巴鵑ULL。void *ptr;ptr=mallc(sizeof (int) )ptrvoid free(ptr) 作用:作用: 釋放釋放ptr指向的由指向的由malloc分配的內(nèi)存空間。分配的內(nèi)存空間。Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)鏈表的操作鏈表

22、的操作建立鏈表建立鏈表步驟:步驟:定義援用本身的構(gòu)造。定義援用本身的構(gòu)造。闡明指向構(gòu)造的指針,闡明指向構(gòu)造的指針,head(頭指針頭指針),tail(尾指針。尾指針。#iinclude #include struct slist char info ; struct slist *nextp ; ;void main ( void) struct slist *head , *tail , *find ; char c , d ; head=tail=(struct slist *) malloc (sizeof ( struct slist ) ; head-nextp = NULL ;In

23、fonextpheadtailNULLwhile ( ( c=getchar ( ) ) != n ) tail = append ( tail , c ) ;Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)在尾部追加節(jié)點在尾部追加節(jié)點步驟:步驟:為新節(jié)點分配內(nèi)存。為新節(jié)點分配內(nèi)存。建立新節(jié)點的成員項。建立新節(jié)點的成員項。建立鏈接關(guān)系。建立鏈接關(guān)系。struct slist *append(struct slist *ptr, char c) struct slist *p ; p=(struct slist *)malloc (sizeof(struct sl

24、ist ) ; p-info=c ; p-nextp=NULL; ptr-nextp=p ; return (p) ;InfonextpheadtailNULLInfonextppNULLtail tail Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)刪除節(jié)點函數(shù)刪除節(jié)點函數(shù)infonextpinfonextpinfonextpvoid cdelete(struct slist *pcdel) struct slist *p ; p=pcdel-nextp ; pcdel-nextp=pcdel-nextp-nextp ; free (p ) ; p 思索題

25、:思索題: 編寫一個函數(shù),在當前指針位置插入節(jié)點。編寫一個函數(shù),在當前指針位置插入節(jié)點。Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)7.3 聯(lián)聯(lián) 合合(union) 概念:不同數(shù)據(jù)類型的集合;每個成員項共用一段內(nèi)存空間;概念:不同數(shù)據(jù)類型的集合;每個成員項共用一段內(nèi)存空間;某一時辰只能對一個某一時辰只能對一個“活的活的active成員項操作;成員項操作;結(jié)合類型的定義結(jié)合類型的定義 格式:格式:union 結(jié)合名結(jié)合名 type 成員項成員項 1 ; type 成員項成員項 2 ; type 成員項成員項 n ; ;union exam int a ; fl

26、oat b ; char c ; ;結(jié)合變量的闡明和援用結(jié)合變量的闡明和援用可以用結(jié)合類型闡明:結(jié)合變量、結(jié)合數(shù)組、指向結(jié)合指針??梢杂媒Y(jié)合類型闡明:結(jié)合變量、結(jié)合數(shù)組、指向結(jié)合指針。union exam x , *px , y10 ;援用:援用變量的成員項。援用:援用變量的成員項。 經(jīng)過變量援用:經(jīng)過變量援用: 變量名變量名.成員項名成員項名經(jīng)過指針援用:經(jīng)過指針援用: 指針指針-成員項名成員項名Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)結(jié)合與構(gòu)造的區(qū)別結(jié)合與構(gòu)造的區(qū)別struct exam int a ; float b ; char c ; x ;x

27、abcunion exam int a ; float b ; char c ; x ;xb ac 構(gòu)造變量的每個成員項有獨立的內(nèi)存單元,構(gòu)造變量的每個成員項有獨立的內(nèi)存單元,而結(jié)合變量的成員項以最大的成員項開辟單元而結(jié)合變量的成員項以最大的成員項開辟單元后,一切成員項共用單元。后,一切成員項共用單元。sizeof (struct exam)Xuan shanli第七章第七章 結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合合肥工業(yè)大學(xué)合肥工業(yè)大學(xué)舉例:舉例:#include void main (void) union exam int i ; char ch2 ; x ; x.i = 24897 ; printf (“i=%xHn , x.i); printf (“ch0=%xH,ch1=%xHn , x.ch0 , x.ch1 ); pr

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論