用戶定制類型.ppt_第1頁
用戶定制類型.ppt_第2頁
用戶定制類型.ppt_第3頁
用戶定制類型.ppt_第4頁
用戶定制類型.ppt_第5頁
已閱讀5頁,還剩92頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、結(jié)構(gòu)中的每個元素與公共體和*數(shù)組屬于同一類型。*如果我想將不同類型的數(shù)據(jù)組合成一個有機的整體,例如,將姓名、年齡、性別和成績組合成一個組合項目,我應(yīng)該怎么做?使用結(jié)構(gòu)來構(gòu)建這個數(shù)據(jù)結(jié)構(gòu)。1.結(jié)構(gòu)類型定義結(jié)構(gòu)結(jié)構(gòu)名稱數(shù)據(jù)類型1成員名稱1;數(shù)據(jù)類型2成員名稱2;數(shù)據(jù)類型n的成員名稱n;例如:struct date int day;char month4國際年;它可以嵌套定義。例如:結(jié)構(gòu)雇員字符名稱20;雙倍工資;long int tel結(jié)構(gòu)日期出生日期;第二,結(jié)構(gòu)變量的定義* *首先定義結(jié)構(gòu),然后定義變量。結(jié)構(gòu)名結(jié)構(gòu)變量名1,結(jié)構(gòu)變量名n;例如:struct dateint daychar mon

2、th4國際年;結(jié)構(gòu)日期生日,國慶節(jié);c編譯器將為日期結(jié)構(gòu)變量分配以下存儲空間:,日期。結(jié)構(gòu)變量的存儲空間根據(jù)其成員的定義順序進行分配。相同結(jié)構(gòu)類型的每個結(jié)構(gòu)變量的存儲空間大小是相同的,它是成員項所占空間的總和。這個空間可以通過sizeof運算符計算結(jié)構(gòu)名來獲得;例如sizeof(結(jié)構(gòu)日期);結(jié)果是8。注釋:只能在定義了結(jié)構(gòu)類型名稱后才能定義結(jié)構(gòu)變量,否則C編譯器不能為結(jié)構(gòu)變量分配存儲空間;c語言允許在定義結(jié)構(gòu)類型的同時定義相關(guān)的結(jié)構(gòu)變量。例如,結(jié)構(gòu)變量也可以定義如下:結(jié)構(gòu)日期當天;char month4國際年;生日,國慶節(jié),星期五;在定義結(jié)構(gòu)類型時,c語言允許默認的結(jié)構(gòu)名。例如:結(jié)構(gòu)化國際日;

3、char month4國際年;生日,國慶節(jié),星期五;結(jié)構(gòu)變量是一個變量,因此它具有相同的屬性(全局、局部、臨時、永久等)。)作為由固有數(shù)據(jù)類型C定義的變量;定義結(jié)構(gòu)變量時,可以指定其存儲類型,但通常不使用寄存器類型;對結(jié)構(gòu)變量的引用,其一般表達式為:結(jié)構(gòu)變量名稱、成員名稱、生日、生日、年、月,例如,生日、日=15;生日.月= 11 ;生日。年份;scanf(%s ,生日.月);printf(%dn ,生日.日);訪問嵌套結(jié)構(gòu)變量:雇員地址。生日。年結(jié)構(gòu)變量成員,結(jié)構(gòu)變量初始化,結(jié)構(gòu)結(jié)構(gòu)變量名稱1初始化值表1,結(jié)構(gòu)變量名稱2初始化值表2,結(jié)構(gòu)變量名稱n初始化值表n;或者:結(jié)構(gòu)結(jié)構(gòu)名稱數(shù)據(jù)類型1成

4、員名稱1;數(shù)據(jù)類型2成員名稱2;數(shù)據(jù)類型n的成員名稱n;結(jié)構(gòu)變量名1初始化值表1,結(jié)構(gòu)變量名2初始化值表2,結(jié)構(gòu)變量名n初始化值表n;或:結(jié)構(gòu)數(shù)據(jù)類型1成員名稱1;數(shù)據(jù)類型2成員名稱2;數(shù)據(jù)類型n的成員名稱n;結(jié)構(gòu)變量名1初始化值表1,結(jié)構(gòu)變量名2初始化值表2,結(jié)構(gòu)變量名n初始化值表n;靜態(tài)結(jié)構(gòu)日期生日=14,“9月”,1950,國慶節(jié)=1,“10月”,1949,hireday=2,“12月”,1970;struct employeechar name20雙倍工資;long int tel迷人的性愛;結(jié)構(gòu)日期出生日期;個人1=“蔣”,960.86,6634107,男,14歲,“九月”,1950

5、,個人2=“陳”,1200.36,66342987,男,23歲,“七月”,1937,個人3=“張”,650.86,6634623,18歲,“五月”,1963;結(jié)構(gòu)數(shù)組,1結(jié)構(gòu)數(shù)組定義表1:結(jié)構(gòu)名稱數(shù)組名稱元素編號表2:結(jié)構(gòu)名稱/*成員項定義*/結(jié)構(gòu)數(shù)組名稱元素編號;結(jié)構(gòu)學(xué)生整數(shù);char name20迷人的性愛;浮動分數(shù);char addr30stu3,struct int numchar name20迷人的性愛;浮動分數(shù);char addr30stu3、初始化結(jié)構(gòu)數(shù)組,例如:struct student int numchar name20迷人的性愛;浮動分數(shù);char addr30stu3

6、=10101,“李林”,M,87.5,“北京路103號”,10102,“章芬”,M,99,10“上海路”,10104,“王敏”,F(xiàn),78.5,“中山路10號”;結(jié)構(gòu)數(shù)組初始化的一般形式是在定義數(shù)組后添加:初值表列,即例如統(tǒng)計候選人獲得選票的程序。有三個候選人。輸入一次贏得投票的候選人姓名,并詢問投票的最終結(jié)果。,程序如下:結(jié)構(gòu)體名稱20;int計數(shù);排行榜3=“李”,0,“張”,0,“有趣”,0;main() int i,j;char leader _ name20對于(I=1;i=10I)scanf(“% s”,leader _ name);對于(j=0,J3;j ) if(strcmp(l

7、eader_name,leader j . name)=0)leader j . count;printf( n );對于(I=0;i3;i ) printf(%5s:%dn ,lead I . name,lead I . count);指向結(jié)構(gòu)的指針,結(jié)構(gòu)指針的定義結(jié)構(gòu)名稱結(jié)構(gòu)指針名稱;例如,結(jié)構(gòu)日期* pd,初始化結(jié)構(gòu)指針,如:結(jié)構(gòu)日期整數(shù);char month4國際年;生日,*pd,*pq=,結(jié)構(gòu)指針變量引用(*結(jié)構(gòu)指針名稱)。成員名稱結(jié)構(gòu)指針-成員名稱,如:(* PQ)。日(* PQ)。月份(* PQ)。如果結(jié)構(gòu)指針指向結(jié)構(gòu)變量employee,則結(jié)構(gòu)指針Q是employee的成員,而

8、年份是Q所指向的對象的成員,因此成員年份的表達式形式是PQ Year或(pq)year,結(jié)構(gòu)日期是日;char *月;國際年;生日=14,“九月”,1951年;結(jié)構(gòu)雇員字符名稱20;雙倍工資;long int tel迷人的性愛;結(jié)構(gòu)日期* q;person1=H.Y .蔣,960.86,6634107,*p=,#包含結(jié)構(gòu)人int *x,a2;y *,p=/* p-a1 */,結(jié)果:0,1 1048,0 1048,1,#包含結(jié)構(gòu)人int * x,a2;y *,p=/* p-a0 */,結(jié)果:0,1 1048,0 1048,1。要在函數(shù)之間傳輸結(jié)構(gòu)或聯(lián)邦數(shù)據(jù)對象,有以下方法:傳輸結(jié)構(gòu)對象的成員;轉(zhuǎn)

9、移整個結(jié)構(gòu)變量本身;傳遞結(jié)構(gòu)對象的地址。函數(shù)之間的結(jié)構(gòu)轉(zhuǎn)移,例如:將結(jié)構(gòu)對象的成員轉(zhuǎn)移到函數(shù),結(jié)構(gòu)雇員長整數(shù);char name20浮動工資;#包括主()無效票據(jù)();結(jié)構(gòu)化員工。scanf(“% LD % s % f”),結(jié)構(gòu)人員字符名稱6;國際年齡;stu=li ,23;main()void print(struct person *)print()示例:將結(jié)構(gòu)對象的指針傳遞給函數(shù),并使用該指針處理鏈表(可選)。自引用結(jié)構(gòu)的定義如果結(jié)構(gòu)的成員項是指向結(jié)構(gòu)類型的結(jié)構(gòu)指針,這樣的結(jié)構(gòu)稱為“自引用結(jié)構(gòu)”。示例:結(jié)構(gòu)節(jié)點int數(shù)據(jù);結(jié)構(gòu)節(jié)點*下一個;節(jié)點結(jié)構(gòu)的直觀表示,3單向鏈表結(jié)構(gòu)(用于實現(xiàn)動態(tài)

10、存儲分配),4動態(tài)數(shù)據(jù)結(jié)構(gòu)與結(jié)構(gòu)數(shù)組的區(qū)別,動態(tài)數(shù)據(jù)結(jié)構(gòu)等同于結(jié)構(gòu)數(shù)組,但優(yōu)于結(jié)構(gòu)數(shù)組;(1)結(jié)構(gòu)數(shù)組中的元素必須連續(xù)存儲,但鏈表不需要;(2)數(shù)組中的元素數(shù)量是確定的,但是鏈表中的元素數(shù)量沒有限制。在實際使用中,如果元素數(shù)量不確定,特別是需要動態(tài)添加元素時,使用鏈表更合適;(3)C編譯器必須為數(shù)組中的所有元素分配存儲空間,但是沒有必要也不可能預(yù)先為鏈表分配所有的存儲空間,因為C編譯器的元方法決定了鏈表中元素的數(shù)量。實現(xiàn)具有自引用結(jié)構(gòu)的鏈表結(jié)構(gòu)需要解決三個問題:(1)必須指出鏈表中第一個節(jié)點的位置,否則不能訪問鏈表中的節(jié)點;實現(xiàn)方法:定義一個指向結(jié)構(gòu)對象的指針,或者定義一個結(jié)構(gòu)類型的變量指向鏈

11、表的第一個節(jié)點。例如,結(jié)構(gòu)節(jié)點* p;或結(jié)構(gòu)節(jié)點頭;(2)創(chuàng)建鏈表時如何獲取下一個新節(jié)點的存儲空間。實現(xiàn)方法:malloc(size),一個由C編譯器系統(tǒng)提供的庫函數(shù),用于在堆空間中創(chuàng)建一個具有大小長度的存儲空間,該函數(shù)返回一個指向該空間第一個地址的char指針。例如:結(jié)構(gòu)節(jié)點*p1,* p2p2=(結(jié)構(gòu)節(jié)點*)malloc(sizeof(結(jié)構(gòu)節(jié)點);如果(p2=空)退出(0);p1next=p2/*在這里,讓p1指向新節(jié)點的前一個節(jié)點*/,(3)清楚地指出鏈表的鏈端。*實現(xiàn)方法:通常將最后一個節(jié)點的下一個成員項設(shè)置為空指針。鏈表的建立、刪除、插入、查詢、排序等。建立單向鏈表,有五個學(xué)生數(shù)據(jù)。

12、,分析:設(shè)學(xué)生數(shù)據(jù)結(jié)點的結(jié)構(gòu)如下:結(jié)構(gòu)體類型如下:結(jié)構(gòu)學(xué)生長整型數(shù);浮動分數(shù);結(jié)構(gòu)學(xué)生*下一個;北南圖如下:而(p1-num!=0)n=n=1;如果(n=1)head=P1;否則p2-next=P1;p2=p1p1=(結(jié)構(gòu)學(xué)生*)malloc(LEN);scanf(%ld,%f ,#define NULL 0 #define LEN sizeof(結(jié)構(gòu)學(xué)生(結(jié)構(gòu)學(xué)生長數(shù)字;浮動分數(shù);結(jié)構(gòu)學(xué)生*下一個;int n;struct student * create()struct student * head,*p1,* p2n=0;p1=p2=(結(jié)構(gòu)學(xué)生*)malloc(LEN);掃描(“%ld,%f”,p2-下一個=空;返回(頭部);鏈表的輸出如下:無效打?。ńY(jié)構(gòu)學(xué)生*標題(結(jié)構(gòu)學(xué)生* p;printf()否,這些%d記錄為:n ,n);p=水頭。如果(頭!=空)執(zhí)行打印操作(%ld %5.1fn ,p-num,p-score);p=p-下一個;而(p!=空);鏈表的刪除,寫一個函數(shù)刪除指定的結(jié)點(1)若要刪除的是第一個結(jié)點(即第一親代的值等于頭的值):head=p1-next (

溫馨提示

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

評論

0/150

提交評論