結(jié)構(gòu)體共同體和用戶定義類型_第1頁
結(jié)構(gòu)體共同體和用戶定義類型_第2頁
結(jié)構(gòu)體共同體和用戶定義類型_第3頁
結(jié)構(gòu)體共同體和用戶定義類型_第4頁
結(jié)構(gòu)體共同體和用戶定義類型_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、結(jié)構(gòu)體共同體和用戶定義類型一、用一、用typedef說明一種新的類型名說明一種新的類型名格式:格式:typedef 類型名類型名 標(biāo)識符標(biāo)識符;例子:例子:typedef int INTEGER; INTEGER m,n;/等價于等價于int m,n; Typedef char* CHARP; CHARP p;/等價于等價于char* p;二、結(jié)構(gòu)體類型二、結(jié)構(gòu)體類型一般格式:一般格式:struct 結(jié)構(gòu)體標(biāo)識符名結(jié)構(gòu)體標(biāo)識符名類型名類型名1 結(jié)構(gòu)體成員名表結(jié)構(gòu)體成員名表1;類型名類型名2 結(jié)構(gòu)體成員名表結(jié)構(gòu)體成員名表2;類型名類型名n 結(jié)構(gòu)體成員名表結(jié)構(gòu)體成員名表n;;例如:例如: stru

2、ct dateint year,month,day;注意:注意:1、類型名、類型名1-類型名類型名n不僅可以是簡單數(shù)據(jù)類型,也可以不僅可以是簡單數(shù)據(jù)類型,也可以復(fù)雜的構(gòu)造類型,包括結(jié)構(gòu)類型。復(fù)雜的構(gòu)造類型,包括結(jié)構(gòu)類型。例如:例如:struct studentchar name12;char sex;stuct date birthday;float sc4;2、結(jié)構(gòu)體類型只是說明了這種類型結(jié)構(gòu)的模式,這時沒、結(jié)構(gòu)體類型只是說明了這種類型結(jié)構(gòu)的模式,這時沒有分配內(nèi)存空間。有分配內(nèi)存空間。結(jié)構(gòu)體類型變量、數(shù)組和指針變量的定義結(jié)構(gòu)體類型變量、數(shù)組和指針變量的定義(1)緊跟在機(jī)構(gòu)體類型說明之后)緊跟

3、在機(jī)構(gòu)體類型說明之后例如:例如:struct studentchar name12;char sex;stuct date birthday;float sc4;std,pers3,*pstd;結(jié)構(gòu)體類型變量、數(shù)組和指針變量的定義結(jié)構(gòu)體類型變量、數(shù)組和指針變量的定義(2)無名結(jié)構(gòu)體類型之后)無名結(jié)構(gòu)體類型之后例如:例如:struct std,pers3,*pstd;(3)先說明結(jié)構(gòu)體類型,再單獨(dú)進(jìn)行變量定義先說明結(jié)構(gòu)體類型,再單獨(dú)進(jìn)行變量定義例如:例如: struct ;struct student std,pers3,*pstd;(4)用typedeftypedef structchar n

4、ame12;char sex;struct date birthday;float sc4;STREC;STREC std,pers3,*pstd;給結(jié)構(gòu)體變量、數(shù)組賦初值給結(jié)構(gòu)體變量、數(shù)組賦初值1、給結(jié)構(gòu)體變量賦初值、給結(jié)構(gòu)體變量賦初值 所賦初值順序放在花括號種,結(jié)構(gòu)體成員順序一一賦所賦初值順序放在花括號種,結(jié)構(gòu)體成員順序一一賦值,對于為給初值的成員系統(tǒng)自動給定值值,對于為給初值的成員系統(tǒng)自動給定值例如:例如:struct studentchar name12;char sex;stuct date birthday;float sc4;std=“Li Ming”,M,1962,5,10,8

5、8,76,85.5,90;2、結(jié)構(gòu)體數(shù)組賦初值、結(jié)構(gòu)體數(shù)組賦初值例:例:struct bookcardchar num5;float money;bk3= “NO.1”,35.5, “NO.2”,25.0, “NO.3”,55.7; 結(jié)構(gòu)體類型變量的引用結(jié)構(gòu)體類型變量的引用 在定義了結(jié)構(gòu)體變量后,可以采用下列方法引用在定義了結(jié)構(gòu)體變量后,可以采用下列方法引用結(jié)構(gòu)體類型的變量:結(jié)構(gòu)體類型的變量: 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.成員名成員名 這里這里.是成員是成員(分量分量)運(yùn)算符,它在所有的運(yùn)運(yùn)算符,它在所有的運(yùn)算符中優(yōu)先級最高。算符中優(yōu)先級最高。 對于指針指針變量名- 成員名(*指針變量名).成員

6、名例如:struct studentchar name12;char sex;stuct date birthday;float sc4;std,arr5,*ps;ps=&std;std.sexps-sex(*ps).sexps-sc2函數(shù)之間結(jié)構(gòu)體變量的數(shù)據(jù)傳遞和普通其他簡單數(shù)據(jù)類型相同. (1)向函數(shù)傳遞結(jié)構(gòu)體變量中的單個成員數(shù)據(jù)(2)向函數(shù)傳遞整個結(jié)構(gòu)體變量中的數(shù)據(jù)。(3)傳遞結(jié)構(gòu)體變量的地址(指針)。例題14.1 #includetypeof structchar s10;int t;STgetdata(ST *p)scanf(“%s%d”,p-s,&p-t);main()ST a;g

7、etdata(&a);printf(“%s,%dn”,a.s,a.t);(4)向函數(shù)傳遞結(jié)構(gòu)體數(shù)組名(5)函數(shù)返回值是結(jié)構(gòu)體類型(6)函數(shù)返回值是結(jié)構(gòu)體變量指針 鏈表作為一種常用的、能夠?qū)崿F(xiàn)動態(tài)存儲分配的數(shù)據(jù)結(jié)構(gòu),在數(shù)據(jù)結(jié)構(gòu)課程中有詳細(xì)介紹。為方便沒有學(xué)過數(shù)據(jù)結(jié)構(gòu)的讀者,本書從應(yīng)用角度,對鏈表作一簡單介紹。l頭指針變量head指向鏈表的首結(jié)點(diǎn)。l每個結(jié)點(diǎn)由2個域組成: 1)數(shù)據(jù)域存儲結(jié)點(diǎn)本身的信息。 2)指針域指向后繼結(jié)點(diǎn)的指針。l尾結(jié)點(diǎn)的指針域置為“NULL(空)”,作為鏈表結(jié)束的標(biāo)志 鏈表概述鏈表概述 數(shù)組數(shù)組 順序存儲結(jié)構(gòu)順序存儲結(jié)構(gòu) 隨機(jī)存取隨機(jī)存取 邏輯關(guān)系上相鄰的兩個元素在物理位置

8、上也相鄰邏輯關(guān)系上相鄰的兩個元素在物理位置上也相鄰1.1.數(shù)組的致命弱點(diǎn):數(shù)組的致命弱點(diǎn):(1)(1)在對數(shù)組進(jìn)行插入或刪除操作時,需移動大量數(shù)組元素在對數(shù)組進(jìn)行插入或刪除操作時,需移動大量數(shù)組元素(2)(2)在數(shù)組的長度是固定的而且必須預(yù)先定義,數(shù)組的長在數(shù)組的長度是固定的而且必須預(yù)先定義,數(shù)組的長度難以縮放,對長度變化較大的數(shù)據(jù)對象要預(yù)先按最大空度難以縮放,對長度變化較大的數(shù)據(jù)對象要預(yù)先按最大空間分配,使存儲空間不能得到充分利用間分配,使存儲空間不能得到充分利用 在單鏈表,通常稱它的數(shù)據(jù)元素為結(jié)點(diǎn),每個在單鏈表,通常稱它的數(shù)據(jù)元素為結(jié)點(diǎn),每個結(jié)點(diǎn)都是一個結(jié)構(gòu)體,至少包括兩個成員:存儲數(shù)結(jié)點(diǎn)

9、都是一個結(jié)構(gòu)體,至少包括兩個成員:存儲數(shù)據(jù)元素信息的成員稱為數(shù)據(jù)域;存儲直接后繼結(jié)點(diǎn)據(jù)元素信息的成員稱為數(shù)據(jù)域;存儲直接后繼結(jié)點(diǎn)存儲位置的成員稱為指針域存儲位置的成員稱為指針域. . 顯然,鏈表結(jié)點(diǎn)的指針域存放的地址類型與它自身顯然,鏈表結(jié)點(diǎn)的指針域存放的地址類型與它自身的類型是相同的。的類型是相同的。 這就是這就是C C語言中較為特殊的遞歸結(jié)構(gòu)體或自引用語言中較為特殊的遞歸結(jié)構(gòu)體或自引用結(jié)構(gòu)體,這種結(jié)構(gòu)體具指向自身結(jié)構(gòu)體的指針,一結(jié)構(gòu)體,這種結(jié)構(gòu)體具指向自身結(jié)構(gòu)體的指針,一般在實(shí)現(xiàn)鏈表、樹等數(shù)據(jù)結(jié)構(gòu)時會用到這種特殊的般在實(shí)現(xiàn)鏈表、樹等數(shù)據(jù)結(jié)構(gòu)時會用到這種特殊的結(jié)構(gòu)體。結(jié)構(gòu)體。每個鏈表都有一個

10、每個鏈表都有一個“頭指針頭指針”headhead,整個鏈表的訪問,整個鏈表的訪問必須從頭指針開始進(jìn)行,頭指針指示鏈表中的第一個必須從頭指針開始進(jìn)行,頭指針指示鏈表中的第一個結(jié)點(diǎn)的存儲位置,習(xí)慣上將結(jié)點(diǎn)的存儲位置,習(xí)慣上將“頭指針頭指針”headhead指示的鏈指示的鏈表簡稱為鏈表表簡稱為鏈表headhead,下同。同時,由于最后一個數(shù)據(jù),下同。同時,由于最后一個數(shù)據(jù)元素沒有直接后繼結(jié)點(diǎn),則鏈表中最后一個結(jié)點(diǎn)的指元素沒有直接后繼結(jié)點(diǎn),則鏈表中最后一個結(jié)點(diǎn)的指針為針為“空空”(NULLNULL,即空地址)。,即空地址)。 要使用鏈表,首先應(yīng)定義結(jié)點(diǎn)的類型,再定義相應(yīng)要使用鏈表,首先應(yīng)定義結(jié)點(diǎn)的類型

11、,再定義相應(yīng)的結(jié)構(gòu)體變量。例如,前面鏈表中結(jié)點(diǎn)的結(jié)構(gòu)類型可的結(jié)構(gòu)體變量。例如,前面鏈表中結(jié)點(diǎn)的結(jié)構(gòu)類型可以定義為:以定義為:struct studentstruct student char name10 char name10; struct student struct student * *nextnext; ; 其中,其中,nextnext為指針變量,其類型為結(jié)構(gòu)體類型為指針變量,其類型為結(jié)構(gòu)體類型studentstudent,它可存儲一個,它可存儲一個studentstudent結(jié)構(gòu)體類型變量的地結(jié)構(gòu)體類型變量的地址,即實(shí)現(xiàn)鏈表中指向下一個結(jié)點(diǎn)的指針域。址,即實(shí)現(xiàn)鏈表中指向下一個結(jié)點(diǎn)

12、的指針域。 這是一個遞歸定義,它在結(jié)構(gòu)體這是一個遞歸定義,它在結(jié)構(gòu)體studentstudent的定義的定義未完成時又引用它定義其它的變量(指針變量)。未完成時又引用它定義其它的變量(指針變量)。 單行鏈表的建立操作步驟:(1)讀取數(shù)據(jù)(3)生成新節(jié)點(diǎn)(3)將數(shù)據(jù)存入節(jié)點(diǎn)的成員變量中(4)將新的節(jié)點(diǎn)插入到鏈表中。2.單向表的插入(3)遍歷鏈表(4)刪除單向鏈表的節(jié)點(diǎn)q-next=p-next;free(p);共同體變量的定義union un_1int i;float x;char ch;s1,s2,*p;注意:(1)共同體變量所有成員共享存儲空間。與結(jié)構(gòu)體區(qū)別:結(jié)構(gòu)體的每個成員分別占有獨(dú)立的存儲空間;而共同體重所有的成員共享一段公共的存儲空間;例如un_1類型變

溫馨提示

  • 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

提交評論