吳文虎 程序設(shè)計基礎(chǔ) 第2版 PPT第12_第1頁
吳文虎 程序設(shè)計基礎(chǔ) 第2版 PPT第12_第2頁
吳文虎 程序設(shè)計基礎(chǔ) 第2版 PPT第12_第3頁
吳文虎 程序設(shè)計基礎(chǔ) 第2版 PPT第12_第4頁
吳文虎 程序設(shè)計基礎(chǔ) 第2版 PPT第12_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、結(jié)結(jié) 構(gòu)構(gòu) 數(shù)數(shù) 組組結(jié)構(gòu)也可以構(gòu)成數(shù)組,即數(shù)組元素是結(jié)構(gòu),當然要結(jié)構(gòu)也可以構(gòu)成數(shù)組,即數(shù)組元素是結(jié)構(gòu),當然要求這一類數(shù)組的全部元素都應(yīng)該是同一類結(jié)構(gòu)。求這一類數(shù)組的全部元素都應(yīng)該是同一類結(jié)構(gòu)。先看下例,例中有同宿舍的四名同學(xué)的數(shù)據(jù),構(gòu)成先看下例,例中有同宿舍的四名同學(xué)的數(shù)據(jù),構(gòu)成一個有四個元素的結(jié)構(gòu)數(shù)組。一個有四個元素的結(jié)構(gòu)數(shù)組。/*/* 程程 序序 名:名:7_14.cpp */* 作作 者:者:wuwh */* 編制時間:編制時間:2002年年11月月21日日 */* 主要功能:結(jié)構(gòu)數(shù)組主要功能:結(jié)構(gòu)數(shù)組 */*#include #include struct student/ 定義結(jié)構(gòu)

2、定義結(jié)構(gòu)studentchar name20;char sex;unsigned long birthday;float height;float weight;student Room4=/ 定義定義student結(jié)構(gòu)數(shù)組,并初始化結(jié)構(gòu)數(shù)組,并初始化Lixin, M, 19840318, 1.82f, 65.0f,Zhangmen,M, 19840918, 1.75f, 58.0f,Helei, M, 19841209, 1.83f, 67.1f,Geyujian, M, 19840101, 1.70f, 59.0f;void main()/ 主函數(shù)主函數(shù)student q;/ 定義定義 q

3、 為為student結(jié)構(gòu)結(jié)構(gòu)/ 以下是按年齡大小對四位同學(xué)進行排序以下是按年齡大小對四位同學(xué)進行排序int i = 0;int j = 0;for (j=0; j3; j+)/ for jfor (i=0; i Roomi+1.birthday)/ ifq = Roomi;Roomi = Roomi+1;Roomi+1 = q;/ if/ for i/ for jfor (i=0; i4; i+)/ for icout R n Roomi.sex n Roomi.birthday n Roomi.height n Roomi.weight n;/ for i/ 主函數(shù)主函數(shù)說

4、明說明上述程序可完成冒泡排序。在排序過程中數(shù)組中上述程序可完成冒泡排序。在排序過程中數(shù)組中的元素是結(jié)構(gòu)。按生日大小排序時,學(xué)生的的元素是結(jié)構(gòu)。按生日大小排序時,學(xué)生的5個數(shù)據(jù)個數(shù)據(jù)作為一個整體(結(jié)構(gòu))來調(diào)整在數(shù)組中的位置。作為一個整體(結(jié)構(gòu))來調(diào)整在數(shù)組中的位置。作業(yè):作業(yè):希望你能按身高排序改寫上述程序。希望你能按身高排序改寫上述程序。/*/* 程程 序序 名:名:7_15.cpp */* 作作 者:者:wuwh */* 編制時間:編制時間:2002年年11月月21日日 */* 主要功能:主要功能:結(jié)構(gòu)結(jié)構(gòu)指針數(shù)組指針數(shù)組 */*#include #include struct studen

5、t/ 定義結(jié)構(gòu)定義結(jié)構(gòu)studentchar name20;char sex;unsigned long birthday;float height;float weight;下面我們用結(jié)構(gòu)指針數(shù)組來完成排序任務(wù)下面我們用結(jié)構(gòu)指針數(shù)組來完成排序任務(wù)student Room4=/ 定義定義student結(jié)構(gòu)數(shù)組,并初始化結(jié)構(gòu)數(shù)組,并初始化Lixin, M, 19840318, 1.82f, 65.0f,Zhangmen,M, 19840918, 1.75f, 58.0f,Helei, M, 19841209, 1.83f, 67.1f,Geyujian, M, 19840101, 1.70f,

6、59.0f;void main( )/ 定義定義指向指向 student 結(jié)構(gòu)的指針數(shù)組,指向結(jié)構(gòu)的指針數(shù)組,指向Room數(shù)組元素數(shù)組元素student *p4=&Room0, &Room1, &Room2, &Room3;student *q;/ 定義一個指向定義一個指向 student 結(jié)構(gòu)的指針,結(jié)構(gòu)的指針,/ 用作中間變量用作中間變量/ 下面仍用冒泡排序?qū)⑽葜邢旅嫒杂妹芭菖判驅(qū)⑽葜?人依身高從大到小排序人依身高從大到小排序int i=0; int j=0;for (j=0; j3; j+)/ for jfor (i=0; iheight height )

7、q=pi; pi=pi+1; pi+1=q;for (i=0; i4; i+)/ 輸出排序結(jié)果輸出排序結(jié)果cout name endl;cout sex endl;cout birthday endl;cout height endl;cout weight height 是名為是名為 pi 的指針通過箭頭操作符來訪的指針通過箭頭操作符來訪問問 my 結(jié)構(gòu)成員結(jié)構(gòu)成員 height。3、語句、語句 if (pi-height height) 是說如果是說如果 Roomi 中的中的 height 成員比成員比 Roomi+1 中的中的 height 成員小,就去做下面的語句組:變換指針的指向,成

8、員小,就去做下面的語句組:變換指針的指向,讓讓 pi 改去指向改去指向 Roomi+1,讓,讓 pi+1 指向指向 Roomi。這樣做就比前一個程序好。當著結(jié)構(gòu)成員很多時,這樣做就比前一個程序好。當著結(jié)構(gòu)成員很多時,直接讓結(jié)構(gòu)變量相互交換并不是好辦法,直接讓結(jié)構(gòu)變量相互交換并不是好辦法,而現(xiàn)在的而現(xiàn)在的做法做法只需將指針的指向交換一下,極為省力。只需將指針的指向交換一下,極為省力。引用的概念及應(yīng)用引用的概念及應(yīng)用古代有的人有名有字還有號古代有的人有名有字還有號。在在 C+ 中,為了方便除了給變量起一個名中,為了方便除了給變量起一個名之外,有時還要給它起一個之外,有時還要給它起一個“別名別名”。

9、這里。這里我們介紹我們介紹“引用引用”的概念和用引用傳遞參數(shù)的概念和用引用傳遞參數(shù)的方法。的方法。比如,我們先定義一個整型變量比如,我們先定義一個整型變量 i 并初始化并初始化為為3。再聲明。再聲明 j 是對整型數(shù)的引用,并初始化是對整型數(shù)的引用,并初始化為引用為引用 i 。兩個語句為兩個語句為int i = 3;/ 是定義是定義int &j = i;/ 是聲明是聲明比較這兩行語句,顯然第二行在比較這兩行語句,顯然第二行在 int 后多了后多了“&”號,號,這個這個“&”在這里為在這里為“引用運算符引用運算符”。&后可以后可以跟任何以英文字符開頭的名字作引用的名

10、字。跟任何以英文字符開頭的名字作引用的名字。我們說我們說 int i = 3; 是定義和初始化。是定義就需要是定義和初始化。是定義就需要給變量分配內(nèi)存空間。有了內(nèi)存空間,才能將整型給變量分配內(nèi)存空間。有了內(nèi)存空間,才能將整型數(shù)數(shù) 3 裝到這個分配好的內(nèi)存地址中。裝到這個分配好的內(nèi)存地址中。而第二條語句而第二條語句 int &j=i; 是聲明和初始化,而不是定義和初始化是聲明和初始化,而不是定義和初始化。比較比較 int i,和,和 int &j。前者是定義,需要分配內(nèi)存單。前者是定義,需要分配內(nèi)存單元給變量元給變量 i;后者是聲明,不是定義,不需要分配內(nèi);后者是聲明,不是定義,

11、不需要分配內(nèi)存單元給存單元給 j,僅僅聲明了一個引用,或者說僅僅起了,僅僅聲明了一個引用,或者說僅僅起了一個一個“別名別名”而已。而已。下面,我們用圖示來細說下面,我們用圖示來細說定義定義和和聲明聲明的關(guān)系。的關(guān)系。int i=3; 定義之后,系統(tǒng)為定義之后,系統(tǒng)為 i 分配了內(nèi)存地址單元分配了內(nèi)存地址單元, i為符號地址。為符號地址。int &j=i; 聲明聲明 j 是是 i 的的“別名別名”。即。即 j 是是 i 的引用,的引用,系統(tǒng)并不去為系統(tǒng)并不去為 j 分配內(nèi)存單元。而是說分配內(nèi)存單元。而是說 j 是是 i 的的“別別名名”。別名和正名所代表的符號地址是同一個地址。別名和正名

12、所代表的符號地址是同一個地址。為了驗證上述說法,請作如下實驗為了驗證上述說法,請作如下實驗i ( 別名別名 j )&i=0 x0012FF7C&j=0 x0012FF7C/*/* 程程 序序 名:名:7_16.cpp (引用測試)(引用測試) */* 作作 者:者:wuwh */* 編制時間:編制時間:2002年年11月月25日日 */* 主要功能:主要功能:對對“引用引用”的測試的測試 */*#include / 預(yù)編譯命令預(yù)編譯命令int main(void)/ 主函數(shù)主函數(shù)int i=3;/ 定義和初始化定義和初始化int &j=i;/ 聲明聲明j是對整數(shù)是對整數(shù)

13、i的引用,的引用,j初始化為引用初始化為引用icout i的的地址地址&iendl;cout j的的地址地址&jendl;if (&i=&j)cout 名與別名兩者所表示的地址相同名與別名兩者所表示的地址相同endl;elsecout 名與別名兩者所表示的地址不同名與別名兩者所表示的地址不同endl;return 0;輸出結(jié)果為輸出結(jié)果為i的地址:的地址:0 x0012FF7Cj的地址:的地址:0 x0012FF7C名與別名兩者所表示的地址相同。名與別名兩者所表示的地址相同。注意:注意:你的運算結(jié)果的地址可能和本書所給的不同,但你的運算結(jié)果的地址可能和本書所給的

14、不同,但 i 和和 j 的地址會是一樣的。的地址會是一樣的。利用引用來傳遞參數(shù)利用引用來傳遞參數(shù)我們先來看下面的程序。這個程序是用來輸出兩我們先來看下面的程序。這個程序是用來輸出兩個數(shù)中之大者的。這個程序在個數(shù)中之大者的。這個程序在 7_17.cpp 中,是用指中,是用指針來編寫的?,F(xiàn)在我們利用引用來編寫。之后再比針來編寫的?,F(xiàn)在我們利用引用來編寫。之后再比較兩者之異同,看引用的好處。較兩者之異同,看引用的好處。/*/* 程程 序序 名:名:7_17.cpp (引用測試)(引用測試) */* 作作 者:者:wuwh */* 編制時間:編制時間:2002年年11月月26日日 */* 主要功能:主

15、要功能:利用引用來傳遞參數(shù)利用引用來傳遞參數(shù) */*#include / 預(yù)編譯命令預(yù)編譯命令/ 交換兩浮點數(shù)交換兩浮點數(shù)void swap(float &xx, float &yy)float temp;/ 臨時變量臨時變量temp = xx;xx = yy;yy = temp;void main()/ 主函數(shù)主函數(shù)/ 主函數(shù)開始主函數(shù)開始float x,y;/ 定義兩浮點數(shù)定義兩浮點數(shù)x,y/ 提示輸入提示輸入x,ycoutx;couty;/ 交換交換x,y并輸出并輸出swap(x,y);coutn調(diào)用調(diào)用swap(x,y)n;coutx=xendl;couty=yendl

16、;/ 主函數(shù)結(jié)束主函數(shù)結(jié)束說明:說明:1、子函數(shù)中兩個形式參數(shù)被聲明為引用,都是對浮點、子函數(shù)中兩個形式參數(shù)被聲明為引用,都是對浮點類型的數(shù)的引用。類型的數(shù)的引用。2、主函數(shù)在鍵盤輸入、主函數(shù)在鍵盤輸入 x, y 值之后,執(zhí)行值之后,執(zhí)行 swap(x,y); 這這時實參為時實參為 x, y的值,形參為的值,形參為 xx, yy。將實參傳遞給形。將實參傳遞給形參的過程相當于在做參的過程相當于在做float &xx=x;float &yy=y;使使 xx 成為成為 x 的引用,的引用,yy 成為成為 y 的引用。或者說的引用。或者說 xx 成為變量成為變量 x 的地址(的地址(&

17、amp;x)的符號名的別名;)的符號名的別名; yy 成成為變量為變量 y 的地址(的地址(&y)的符號名的別名。)的符號名的別名。本來子函數(shù)是不能直接對變量本來子函數(shù)是不能直接對變量 x, y 進行操作的。進行操作的。經(jīng)過引用之后,兩個經(jīng)過引用之后,兩個“別名別名” xx 與與 yy 替代了替代了 x, y。表面上看,主函數(shù)在調(diào)用子函數(shù)時,傳遞的是變量表面上看,主函數(shù)在調(diào)用子函數(shù)時,傳遞的是變量 x, y,而實際上傳遞給子函數(shù)的是,而實際上傳遞給子函數(shù)的是 x, y 變量的地址。形變量的地址。形式上看是對式上看是對 xx, yy 進行操作,實質(zhì)上在對進行操作,實質(zhì)上在對 x, y 進

18、行進行操作。操作。3、從這個例子看出,、從這個例子看出,引用具有指針的強大功能,但在引用具有指針的強大功能,但在傳遞參數(shù)、調(diào)用函數(shù)時卻有良好的可讀性。傳遞參數(shù)、調(diào)用函數(shù)時卻有良好的可讀性。思思 考考幾種參數(shù)傳遞方式的比較幾種參數(shù)傳遞方式的比較/*/* 程程 序序 名:名:7_18.cpp */* 作作 者:者:wuwh */* 編制時間:編制時間:2002年年11月月27日日 */* 主要功能:參數(shù)傳遞比較主要功能:參數(shù)傳遞比較 */*#include / 傳引用傳引用void swap1(int &xx, int &yy)int temp;temp = xx;xx = yy;

19、yy = temp;cout子函數(shù):子函數(shù):xx=xx yy=yy endl;/ 傳地址(指針),修改指針所指地址的內(nèi)容傳地址(指針),修改指針所指地址的內(nèi)容void swap2( int *xx, int *yy )int temp;temp = *xx;*xx = *yy;*yy = temp;cout子函數(shù):子函數(shù):*xx= *xx *yy= *yy endl;/ 傳地址(指針),修改指針本身傳地址(指針),修改指針本身void swap4(int *xx, int *yy)int *p;p = xx;xx = yy;yy = p;cout子函數(shù):子函數(shù):*xx=*xx *yy=*yy

20、endl;/ 傳地址(傳址)傳地址(傳址)x=100; y=200;cout 傳地址,修改指針所指的內(nèi)容:傳地址,修改指針所指的內(nèi)容: swap2(&x,&y) endl;swap2(&x, &y);cout主函數(shù):主函數(shù):x=x y=y endl;cout endl;鏈鏈 表表【例例】某電視臺希望王小二同學(xué)為他們編一個程序。該程某電視臺希望王小二同學(xué)為他們編一個程序。該程序可以將節(jié)目串在一起,形成一份有序的節(jié)目預(yù)告。序可以將節(jié)目串在一起,形成一份有序的節(jié)目預(yù)告。節(jié)目列表有如下三項節(jié)目列表有如下三項1、節(jié)目名稱、節(jié)目名稱包括包括新聞聯(lián)播(新聞聯(lián)播(CCTV Ne

21、ws)祖國各地(祖國各地(Motherland)體育之窗(體育之窗(Sports)學(xué)校見聞(學(xué)校見聞(College)電影展播(電影展播(Movie)2、節(jié)目主持人(、節(jié)目主持人(Director)3、播放時間長度(、播放時間長度(Time)我們可以將每一個節(jié)目單獨放在一個結(jié)構(gòu)里,用我們可以將每一個節(jié)目單獨放在一個結(jié)構(gòu)里,用一個指針把兩個結(jié)構(gòu)連在一起,一天的節(jié)目形成一一個指針把兩個結(jié)構(gòu)連在一起,一天的節(jié)目形成一條鏈表。用一個所謂的頭指針條鏈表。用一個所謂的頭指針 head 指向鏈表的第一指向鏈表的第一個結(jié)點。如下圖所示個結(jié)點。如下圖所示head頭指針頭指針下面的程序是建立鏈表的過程。下面的程序

22、是建立鏈表的過程。/*/* 程程 序序 名:名:7_19.cpp */* 作作 者:者:wuwh */* 編制時間:編制時間:2002年年11月月26日日 */* 主要功能:鏈表主要功能:鏈表 */*#include struct ActList/ 定義一個名為定義一個名為 ActList 結(jié)構(gòu)結(jié)構(gòu)char ActName20;/ 節(jié)目名為字符數(shù)組節(jié)目名為字符數(shù)組char director20; / 主持人為字符數(shù)組主持人為字符數(shù)組int Mtime;/ 節(jié)目長度為分鐘節(jié)目長度為分鐘ActList *next;/ 指向指向 ActList 結(jié)構(gòu)的指針結(jié)構(gòu)的指針;ActList *head;/

23、鏈頭指針鏈頭指針/ 以下是給新結(jié)點輸入節(jié)目信息以下是給新結(jié)點輸入節(jié)目信息cout Time;while(Time != 0)/ 當該節(jié)目的時長不為當該節(jié)目的時長不為0時,將其時,將其/ 納入鏈表中納入鏈表中p = new ActList;/ 分配內(nèi)存空間給分配內(nèi)存空間給p結(jié)點結(jié)點 / 讓讓Time賦給賦給p結(jié)點的結(jié)構(gòu)成員結(jié)點的結(jié)構(gòu)成員Mtimep-Mtime = Time;cout p-ActName; / 輸入節(jié)目名稱輸入節(jié)目名稱cout p-director; / 輸入主持人輸入主持人void displayList(ActList *head)cout 顯示節(jié)目列表顯示節(jié)目列表n;whi

24、le(head!=NULL) / 當指針當指針head不空,則輸出不空,則輸出cout Mtime endl ActName endl director endl next;void main()/ 主函數(shù)開始主函數(shù)開始/ 調(diào)用子函數(shù)調(diào)用子函數(shù)displaList()/ 調(diào)用時的實參為調(diào)用時的實參為Create()函數(shù)的返回值函數(shù)的返回值displayList(Create();/ 主函數(shù)結(jié)束主函數(shù)結(jié)束說明說明1、先從主函數(shù)說起、先從主函數(shù)說起主函數(shù)只有一條語句主函數(shù)只有一條語句 displayList(Create( );這是調(diào)用子函數(shù)這是調(diào)用子函數(shù) displayList,該子函數(shù)的形參為

25、,該子函數(shù)的形參為 ActList *head 是一個指向是一個指向 ActList 結(jié)構(gòu)的名為結(jié)構(gòu)的名為 head 的指針變量。在主的指針變量。在主函數(shù)調(diào)用函數(shù)調(diào)用 displayList 時所用的實際參數(shù)來自運行時所用的實際參數(shù)來自運行 Create( ) 函函數(shù)的返回值。從數(shù)的返回值。從 Create( ) 的定義的定義ActList *Create( )看出看出 Create( ) 函數(shù)的返回值應(yīng)該是一個指向函數(shù)的返回值應(yīng)該是一個指向 ActList 的指針。的指針。主函數(shù)在調(diào)用子函數(shù)時,又遇到該函數(shù)的實參又是調(diào)用另主函數(shù)在調(diào)用子函數(shù)時,又遇到該函數(shù)的實參又是調(diào)用另一個函數(shù)之后的返回值

26、??雌饋淼拇_顯得復(fù)雜,但是我們耐心一個函數(shù)之后的返回值??雌饋淼拇_顯得復(fù)雜,但是我們耐心分析之后,感到并不難。分析之后,感到并不難。2、程序開頭為結(jié)構(gòu)定義。在這里我們稱這樣的一個結(jié)構(gòu)、程序開頭為結(jié)構(gòu)定義。在這里我們稱這樣的一個結(jié)構(gòu)為一個為一個結(jié)點結(jié)點。這個結(jié)點包含兩個域:。這個結(jié)點包含兩個域:數(shù)據(jù)域數(shù)據(jù)域和和指針域指針域結(jié)結(jié) 點點數(shù)據(jù)域中裝有節(jié)目的信息,而指針域裝的是指向數(shù)據(jù)域中裝有節(jié)目的信息,而指針域裝的是指向另一個結(jié)點的地址。顯然這是為形成鏈表而專門設(shè)另一個結(jié)點的地址。顯然這是為形成鏈表而專門設(shè)置的。置的。3、在定義、在定義 Create 函數(shù)之前,先定義了一個指向結(jié)構(gòu)函數(shù)之前,先定義了一

27、個指向結(jié)構(gòu)的頭指針的頭指針 head,即,即ActList *head;4、定義、定義 Create函數(shù),該函數(shù)可返回指向函數(shù),該函數(shù)可返回指向 ActList 結(jié)構(gòu)結(jié)構(gòu)的指針,即的指針,即ActList *Create( )分析這個函數(shù)的功能可分如下分析這個函數(shù)的功能可分如下4塊塊 定義定義ActList *p = NULL;ActList *q = NULL;head = NULL;int Time;定義了兩個指向結(jié)構(gòu)定義了兩個指向結(jié)構(gòu) ActList 的指針的指針 p 和和 q,并,并初始化為空,即未指向任何地址。同時讓頭指針初始化為空,即未指向任何地址。同時讓頭指針 head 也為空。

28、再定義一個臨時變量也為空。再定義一個臨時變量 Time,是一個,是一個整型數(shù)。整型數(shù)。 提示提示“輸入節(jié)目時長輸入節(jié)目時長”,之后用鍵盤輸入,用了,之后用鍵盤輸入,用了下面兩句:下面兩句:cout Time;這部分程序語句是為下面的這部分程序語句是為下面的 while 循環(huán)做準備的。循環(huán)做準備的。如果如果 Time 不為不為 0,才做下面的內(nèi)容。,才做下面的內(nèi)容。 while( Time != 0 ) 循環(huán)循環(huán)在當循環(huán)的循環(huán)體內(nèi)完成建立鏈表的過程。首在當循環(huán)的循環(huán)體內(nèi)完成建立鏈表的過程。首先給先給 p 結(jié)點分配內(nèi)存空間。這個內(nèi)存空間的大小要結(jié)點分配內(nèi)存空間。這個內(nèi)存空間的大小要根據(jù)根據(jù) p 結(jié)

29、點的定義(結(jié)點的定義(p 結(jié)點是結(jié)點是 ActList 結(jié)構(gòu))來確結(jié)構(gòu))來確定。定。p 結(jié)點有了內(nèi)存空間,就可以給它的各個成員結(jié)點有了內(nèi)存空間,就可以給它的各個成員賦值了。接著下面就是幾個賦值語句賦值了。接著下面就是幾個賦值語句p-MTime = Time;cout p-ActName;/ 用鍵盤輸入節(jié)目名稱用鍵盤輸入節(jié)目名稱cout p-director;/ 用鍵盤輸入主持人用鍵盤輸入主持人接著是一個分支語句接著是一個分支語句if (head=NULL) head=p;這是說如果頭指針為空,表示鏈表還是空的,這時這是說如果頭指針為空,表示鏈表還是空的,這時 p 結(jié)點就是第一個結(jié)點。讓結(jié)點就是

30、第一個結(jié)點。讓 head 賦值為賦值為 p,即讓,即讓 head 指向指向 p 結(jié)點。之后讓結(jié)點。之后讓 q=p; 這是讓這是讓 q 指向剛進指向剛進入鏈表的結(jié)點,讓入鏈表的結(jié)點,讓 p 再去指向待加入的結(jié)點。如果再去指向待加入的結(jié)點。如果 p 結(jié)點已不是第一個結(jié)點了,結(jié)點已不是第一個結(jié)點了,head 必不為必不為 NULL,因此要走因此要走 else 分支,即分支,即else q-next = p;將此時的將此時的 p 結(jié)點放到結(jié)點放到 q 所指向的結(jié)點后面。之所指向的結(jié)點后面。之后讓后讓 q=p; 即讓即讓 q 指向剛進入鏈表的結(jié)點,騰出指向剛進入鏈表的結(jié)點,騰出 p 去指向下一個待加入的

31、結(jié)點。去指向下一個待加入的結(jié)點。接下來輸入下一個節(jié)目時長,接下來輸入下一個節(jié)目時長,cout Time;至此,至此,while 語句的循環(huán)體結(jié)束。當語句的循環(huán)體結(jié)束。當 Time 值不值不為為0,就會有結(jié)點加入鏈表,繼續(xù)執(zhí)行循環(huán)體。一,就會有結(jié)點加入鏈表,繼續(xù)執(zhí)行循環(huán)體。一旦旦 Time 為為 0,則會跳出,則會跳出 while 循環(huán)。循環(huán)。 執(zhí)行兩條語句執(zhí)行兩條語句if (head != NULL) q-next = NULL;return (head);第一條是說,如果第一條是說,如果 head 不空說明鏈表已建成,這時不空說明鏈表已建成,這時 q 一定是最后一個結(jié)點,將該結(jié)點的指針域置成

32、空,以表明一定是最后一個結(jié)點,將該結(jié)點的指針域置成空,以表明它是鏈尾。它是鏈尾。第二條第二條 return (head); 將這條鏈表的頭指針將這條鏈表的頭指針 head 返回。返回。這件事意味著執(zhí)行完這件事意味著執(zhí)行完 Create函數(shù)后得到函數(shù)后得到 head 指針所指向的指針所指向的地址,這個地址就是鏈表中的第一個結(jié)點的地址。這時對地址,這個地址就是鏈表中的第一個結(jié)點的地址。這時對主函數(shù)而言主函數(shù)而言displayList( Create( ) ) 就是就是dispalyList( head )調(diào)用調(diào)用 dsplayList(head) 就會將整個鏈表從頭至尾輸出。就會將整個鏈表從頭至尾

33、輸出。1、定義、定義 ActList 結(jié)構(gòu),結(jié)構(gòu)中包含數(shù)據(jù)域和指針域。將一個結(jié)結(jié)構(gòu),結(jié)構(gòu)中包含數(shù)據(jù)域和指針域。將一個結(jié)構(gòu)看作一個結(jié)點。構(gòu)看作一個結(jié)點。2、定義一個指向結(jié)構(gòu)的指針、定義一個指向結(jié)構(gòu)的指針 head,準備用來指向鏈表的第一,準備用來指向鏈表的第一個結(jié)點。個結(jié)點。3、定義一個指向、定義一個指向ActList 結(jié)構(gòu)的指針函數(shù),起名為結(jié)構(gòu)的指針函數(shù),起名為 Create 函數(shù),函數(shù),該函數(shù)返回的是創(chuàng)建好的鏈的頭指針該函數(shù)返回的是創(chuàng)建好的鏈的頭指針 head。下面是下面是 Create 函數(shù)所要做的事情:函數(shù)所要做的事情: 定義指向定義指向 ActList 結(jié)構(gòu)的兩個指針結(jié)構(gòu)的兩個指針 p

34、 和和 q,定義后立即初,定義后立即初始化為始化為 NULL,即不指向任何地址。再讓頭指針,即不指向任何地址。再讓頭指針 head 為為 NULL,也是不指向任何地址,表示該鏈表尚未建立,一個,也是不指向任何地址,表示該鏈表尚未建立,一個結(jié)點也沒有。然后定義一個中間變量結(jié)點也沒有。然后定義一個中間變量“節(jié)目時長節(jié)目時長 Time”,當當 Time 為為 0 時,建立鏈表的過程應(yīng)該結(jié)束。時,建立鏈表的過程應(yīng)該結(jié)束。建立鏈表的過程可歸納為如下三個步驟建立鏈表的過程可歸納為如下三個步驟 下面程序的構(gòu)思是,只要下面程序的構(gòu)思是,只要 Time 不為不為 0,就要構(gòu)建鏈表。,就要構(gòu)建鏈表。構(gòu)建的思路是將

35、一個一個的結(jié)點加至鏈表里來。構(gòu)建的思路是將一個一個的結(jié)點加至鏈表里來。首先給首先給 p 找一個能夠指向的內(nèi)存空間,我們說這是給找一個能夠指向的內(nèi)存空間,我們說這是給 p 結(jié)點分配一片內(nèi)存空間。如下圖結(jié)點分配一片內(nèi)存空間。如下圖建立鏈表的過程可歸納為如下三個步驟建立鏈表的過程可歸納為如下三個步驟p 然后,通過鍵盤往這個空間中裝入與節(jié)目有關(guān)的信息。然后,通過鍵盤往這個空間中裝入與節(jié)目有關(guān)的信息。裝完之后判斷一下裝完之后判斷一下 head 為空否,如為空則為空否,如為空則 p 結(jié)點為第一個結(jié)點為第一個結(jié)點,讓結(jié)點,讓 head 指向指向 p 結(jié)點就完成了有一個結(jié)點的鏈表。之結(jié)點就完成了有一個結(jié)點的鏈表。之后讓后讓 q 賦值為賦值為 p,即使讓,即使讓 q 指針去指向剛

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論