第9章用戶建立的數(shù)據(jù)類型2_第1頁
第9章用戶建立的數(shù)據(jù)類型2_第2頁
第9章用戶建立的數(shù)據(jù)類型2_第3頁
第9章用戶建立的數(shù)據(jù)類型2_第4頁
第9章用戶建立的數(shù)據(jù)類型2_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、9.4.1 9.4.1 鏈表概述鏈表概述 鏈表是一種常見的重要的數(shù)據(jù)結(jié)構(gòu),是動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配的一種結(jié)構(gòu)。鏈表的組成:頭指針頭指針:存放一個(gè)地址,該地址指向一個(gè)元素 結(jié)點(diǎn)結(jié)點(diǎn):用戶需要的實(shí)際數(shù)據(jù)和鏈接節(jié)點(diǎn)的指針圖11-10頭指針 結(jié)點(diǎn) 結(jié)點(diǎn) 結(jié)點(diǎn) 結(jié)點(diǎn)用結(jié)構(gòu)體建立鏈表的結(jié)點(diǎn)(例):struct student int num; float score; struct student *next ;;其中成員num和score用來存放結(jié)點(diǎn)中的有用數(shù)據(jù)(用戶需要用到的數(shù)據(jù)),next是指針類型的成員,它指向struct student類型數(shù)據(jù)。圖9-11例例 9.7 9.7 建立有建立有3 3個(gè)結(jié)

2、點(diǎn)的簡(jiǎn)單鏈表,并輸出各結(jié)點(diǎn)中的數(shù)據(jù)個(gè)結(jié)點(diǎn)的簡(jiǎn)單鏈表,并輸出各結(jié)點(diǎn)中的數(shù)據(jù). . #include #define null 0 struct student int num; float score; struct student *next; ;void main()headpanum next scorebnum next scorecnum next score struct student a,b,c,*head,*p;p=head; a. num=99101; a.score=89.5; b. num=99103; b.score=90; c. num=99107; c.score=

3、85;9910189.599103909910785head=&a; a.next=&b; b.next=&c; c.next=null; null do printf(%d %5.1fn,p-num,p-score); p=p-next; while(p!=null);ppppnull 所謂建立動(dòng)態(tài)鏈表是指在程序執(zhí)行過程中從無有地建立起一個(gè)鏈表,即一個(gè)一個(gè)地開辟結(jié)點(diǎn)和輸入各結(jié)點(diǎn)數(shù)據(jù),并建立起前后相鏈的關(guān)系。例9.8 寫一函數(shù)建立一個(gè)有3名學(xué)生數(shù)據(jù)的單向動(dòng)態(tài)鏈表。num next score1010189.51010785num next score1010390num next scoreh

4、eadnull建立鏈表的函數(shù)如下: #include #include #define null 0 /令令null代表,用它表示代表,用它表示“空地址空地址#define len sizeof(struct student) /令令len代表代表struct /student類型數(shù)據(jù)的長(zhǎng)度類型數(shù)據(jù)的長(zhǎng)度 struct student int num; float score; struct student *next; ;int n; /n為全局變量,本文件模塊中各函數(shù)均可使用它為全局變量,本文件模塊中各函數(shù)均可使用它struct student *creat( ) struct stude

5、nt *head,*p1,*p2; n=0; p1=p2=(struct student*)malloc(len); scanf(“%d%f”,&p1-num,&p1-score); head=null; while(p1-num!=0)/學(xué)號(hào)為0建鏈表結(jié)束 n=n+1; if(n=1)head=p1; else p2-next=p1;/前后結(jié)點(diǎn)連接起來 p2=p1; p1=(struct student*)malloc(len);/新結(jié)點(diǎn) scanf(“%d%f”,&p1-num,&p1-score); 1010189.5num next score p1 p2 p2-next=null;

6、return(head); 1010390num next score p2 head p1 p21010785num next score p200num next scorenull p1 p1 首先要知道鏈表第一個(gè)結(jié)點(diǎn)的地址,也就是要知道head的值。然后設(shè)一個(gè)指針變量p,先指向第一個(gè)結(jié)點(diǎn),輸出所指的結(jié)點(diǎn),然后使后移一個(gè)結(jié)點(diǎn),再輸出,直到鏈表的尾結(jié)點(diǎn)。 例例1 19 9 編寫一個(gè)輸出鏈表的函數(shù)編寫一個(gè)輸出鏈表的函數(shù)print.print. void print(struct student *head) struct student *p;printf(nnow,these %d rec

7、ords are:n,n); p=head; if(head!=null) do printf(%ld %5.1fn,p-num,p-score); p=p-next; while(p!=null); 9.5 共用體 9.5.1. 什么是共用體共用體 使幾個(gè)不同的變量共占同一段內(nèi)存的結(jié)構(gòu)稱為 “共用體”類型的結(jié)構(gòu)。一般形式為:union共用體名 成員表列 變量表列;例如:例如:union data union data int i; int i; char ch; 或 char ch; float f; float f;a,b,c; ; union data a,b,c;變量a的存儲(chǔ)示意圖:a

8、.cha.ia.f共用體和結(jié)構(gòu)體的比較: 結(jié)構(gòu)體變量所占內(nèi)存長(zhǎng)度是各成員占的內(nèi)存長(zhǎng)度之和。每個(gè)成員分別占有其自己的內(nèi)存單元。 共用體變量所占的內(nèi)存長(zhǎng)度等于最長(zhǎng)的成員的長(zhǎng)度。例如例如: : 上面定義的“共用體”變量、各占個(gè)字節(jié)(因?yàn)橐粋€(gè)實(shí)型變量占個(gè)字節(jié)),而不是各占個(gè)字節(jié)。 2. 2. 共用體變量的引用方式共用體變量的引用方式 只能引用共用體變量中的成員:例如例如:前面定義了前面定義了a、b、c為共用體變量為共用體變量 a.i (引用共用體變量中的整型變量) a.ch(引用共用體變量中的字符變量) a.f (引用共用體變量中的實(shí)型變量)3. 3. 共用體類型數(shù)據(jù)的特點(diǎn)共用體類型數(shù)據(jù)的特點(diǎn) (p2

9、71)(p271)(1) 同一個(gè)內(nèi)存段可以用來存放幾種不同類型的成員,但在每一瞬時(shí)只能存放其中一種,而不是同時(shí)存放幾種。(2) 共用體變量中起作用的成員是最后一次存放的成員,在存入一個(gè)新的成員后原有的成員就失去作用。 (3)共用體變量的地址和它的各成員的地址都是同一地址。(4)不能對(duì)共用體變量名賦值,(5)不能把共用體變量作為函數(shù)參數(shù),(6)共用體類型可以出現(xiàn)在結(jié)構(gòu)體類型定義中,也可以定義共用體數(shù)組。反之,例例9.10 9.10 設(shè)有若干個(gè)人員的數(shù)據(jù),其中有學(xué)生和教師。學(xué)生的數(shù)據(jù)中包括:姓名、號(hào)碼、性別、職業(yè)、班級(jí)。教師的數(shù)據(jù)包括:姓名、號(hào)碼、性別、職業(yè)、職務(wù)??梢钥闯觯瑢W(xué)生和教師所包含的數(shù)據(jù)

10、是不同的。現(xiàn)要求把它們放在同一表格中。 9.6 枚舉類型 枚舉:將變量的值一一列舉出來,變量的值只限于列舉出來的值的范圍內(nèi)。 聲明枚舉類型用enum,例如,下面是定義名為weekday的枚舉類型: enum weekdaysun,mon,tue,wed,thu,fri,sat; 定義枚舉類型的變量: enum weekday workday,week-day;或: enum weekday sun,mon,tue,wed,thu,fri,sat workday,week-day;則workday,week-day的變量值只能是sun到sat之一 。 9.7 用typedef 命名類型用typede

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論