工學(xué)C++-第8章復(fù)雜數(shù)據(jù)類型課件_第1頁
工學(xué)C++-第8章復(fù)雜數(shù)據(jù)類型課件_第2頁
工學(xué)C++-第8章復(fù)雜數(shù)據(jù)類型課件_第3頁
工學(xué)C++-第8章復(fù)雜數(shù)據(jù)類型課件_第4頁
工學(xué)C++-第8章復(fù)雜數(shù)據(jù)類型課件_第5頁
已閱讀5頁,還剩129頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C++面對對象程序設(shè)計(jì)授課老師:C++面對對象程序設(shè)計(jì)授課老師:1第8章復(fù)雜數(shù)據(jù)類型

本章要點(diǎn)8.1枚舉類型的定義及應(yīng)用8.2結(jié)構(gòu)體的定義及應(yīng)用8.3共用體的定義及應(yīng)用8.4鏈表8.5類型定義第8章復(fù)雜數(shù)據(jù)類型

本章要點(diǎn)2

本章要點(diǎn)枚舉類型的定義及應(yīng)用結(jié)構(gòu)體的定義及應(yīng)用共用體的定義及應(yīng)用用typedef定義類型名本章要點(diǎn)38.1枚舉類型在程序設(shè)計(jì)中,有時(shí)會用到由若干個(gè)有限數(shù)據(jù)元素組成的集合,如一周內(nèi)的星期一到星期日7個(gè)數(shù)據(jù)元素組成的集合,程序中某個(gè)變量取值僅限于集合中的元素。此時(shí),可將這些數(shù)據(jù)集合定義為枚舉類型。因此,枚舉類型是某類數(shù)據(jù)可能取值的集合,如一周內(nèi)星期可能取值的集合為:{Sun,Mon,Tue,Wed,Thu,F(xiàn)ri,Sat}該集合可定義為描述星期的枚舉類型,該枚舉類型共有7個(gè)元素,因而用枚舉類型定義的枚舉變量只能取集合中的某一元素值。由于枚舉類型是導(dǎo)出數(shù)據(jù)類型,因此,必須先定義枚舉類型,然后再用枚舉類型定義枚舉型變量。8.1枚舉類型在程序設(shè)計(jì)中,有時(shí)會用到由若干個(gè)有限數(shù)據(jù)元素組48.1.1枚舉類型的定義

枚舉類型的一般定義格式為:enum<枚舉類型名>{<枚舉元素表>};其中:關(guān)鍵字enum表示定義的是枚舉類型,枚舉類型名由標(biāo)識符組成。枚舉元素為常量時(shí)定義形式如下:enum<枚舉類型名>{<枚舉常量1,枚舉常量2,…,枚舉常量n};例如:enumseasons{spring,summer,autumn,winter};//定義枚舉類型enumseasons又如:enumcolors{red,blue,green,yellow,white,black};//定義枚舉類型enumcolors8.1.1枚舉類型的定義

枚舉類型的一般定義格式為:5說明:

(1)enum是定義枚舉類型的關(guān)鍵字,枚舉類型名應(yīng)符合標(biāo)識符定義的規(guī)則,enum和枚舉類型名構(gòu)成枚舉類型的類型名。(2)花括號{}中的值是該枚舉類型所有可能的枚舉常量列表,定義中枚舉常量不能同名。在系統(tǒng)默認(rèn)的情況下,枚舉常量值順序?yàn)?,l,2,…,即第一個(gè)枚舉常量的值為0,其后枚舉常量的值是前一個(gè)枚舉常量的值加1。例如示例中,spring,summer,autumn,winter的值分別為0,1,2,3,而red,blue,green,yellow,white,black的值分別為0,1,2,3,4,5。(3)也可以在定義時(shí),由用戶自行設(shè)定每一個(gè)枚舉常量的值。例如:enumseasons{spring=4,summer=1,autumn,winter};spring的值為4,summer的值為1,其后枚舉常量的值為前一個(gè)枚舉常量的值加1,順序?yàn)?,3。(4)不能給已經(jīng)定義過的枚舉常量賦值。例如:spring=1;是錯(cuò)誤的,因?yàn)槊杜e常量是常量而不是變量。說明:

(1)enum是定義枚舉類型的關(guān)鍵字,枚舉類型名應(yīng)符68.1.2枚舉類型變量的定義定義枚舉類型變量有三種方法;即:先定義類型后定義變量,定義類型的同時(shí)定義變量,直接定義變量,現(xiàn)介紹如下:1.先定義類型后定義變量格式:enum<枚舉類型名><變量1>〔,<變量2>,…,<變量n>〕2.定義類型的同時(shí)定義變量格式:enum<枚舉類型名>{<枚舉元素表>}<變量1>〔,<變量2>,…,<變量n>〕;3.直接定義枚舉變量格式:enum{<枚舉元素表>}<變量1>〔,<變量2>,…,<變量n>〕;8.1.2枚舉類型變量的定義定義枚舉類型變量有三種方法;即:78.1.3枚舉類型變量的引用

(1)枚舉變量的取值范圍只能是其枚舉類型定義時(shí)所枚舉的各個(gè)枚舉常量,所以枚舉常量可賦值給枚舉變量如“c1=white;c2[3]=green;”等。(2)枚舉類型變量不能直接被賦予一個(gè)整數(shù)數(shù)值。如“c1=4;”是錯(cuò)誤的,因?yàn)閏1是枚舉類型變量,4是整型常量,兩者的類型不同。經(jīng)過強(qiáng)制類型轉(zhuǎn)換后,是可以賦值的,如“c1=(enumcolors)4;”。(3)同類型的枚舉變量間、枚舉常量間、枚舉變量與枚舉常量間可以進(jìn)行算術(shù)運(yùn)算和關(guān)系運(yùn)算等。例如:if(c1>red)…。(4)枚舉變量也有作用域范圍,其含義與一般變量相同。(5)枚舉變量和枚舉常量可以作函數(shù)參數(shù),函數(shù)的返回值也可以是枚舉類型。8.1.3枚舉類型變量的引用

(1)枚舉變量的取值范圍只能是8先定義描述6種顏色的枚舉類型colors,然后再用該枚舉類型定義枚舉數(shù)組,任意輸入6個(gè)顏色號,轉(zhuǎn)換成對應(yīng)的顏色枚舉量后輸入到枚舉數(shù)組中,最后輸出枚舉數(shù)組中對應(yīng)的顏色#include"stdafx.h"#include"stdio.h"#include"iostream.h"#include"stdlib.h"http://使用exit(0)函數(shù)時(shí)必須包含stdlib.h頭文件enumcolors{red,blue,green,black,white,yellow};//定義有六種顏色元素的枚舉類型colorsvoidmain(){ colorscolor[6];//定義枚舉類型數(shù)組color[6] intj,n; cout<<"0:red,1:blue,2:green,3:black,4:white,5:yellow"<<endl; cout<<"請輸入六個(gè)顏色號:"<<endl;先定義描述6種顏色的枚舉類型colors,然后再用該枚舉類型9for(j=0;j<6;j++){ cin>>n; if(n<0||n>5) { cout<<"輸入顏色值出錯(cuò),請重新輸入!"<<endl; exit(0); } else switch(n)//將顏色號轉(zhuǎn)換成顏色元素存入數(shù)組 { case0: color[j]=red; break; case1: color[j]=blue; break;for(j=0;j<6;j++)10case2: color[j]=green; break; case3: color[j]=black; break; case4: color[j]=white; break; case5: color[j]=yellow; break; } }case11for(j=0;j<6;j++)//循環(huán)六次輸出數(shù)組元素對應(yīng)的顏色 { switch(color[j]) { casered: cout<<"red"; break; caseblue: cout<<"blue"; break; casegreen: cout<<"green"; break; caseblack: cout<<"black"; break;for(j=0;j<6;j++)12casewhite: cout<<"white"; break; caseyellow: cout<<"yellow"; break; } cout<<'\t'; } cout<<endl; getchar();}casewhite:13程序執(zhí)行時(shí),屏幕提示:0:red,1:blue,2:green,3:black,4:white,5:yellow請輸入6個(gè)顏色號:012345<Enter>屏幕輸出:redbluegreenblackwhiteyellow程序執(zhí)行時(shí),屏幕提示:0:red,1:blue,2:gree148.2結(jié)構(gòu)體類型到目前為止,所見到的數(shù)據(jù)類型都只包含一種類型信息,即使是多個(gè)元素的數(shù)組。但是,信息的邏輯關(guān)系,要求各個(gè)數(shù)據(jù)類型組合在一起考慮會更加方便。結(jié)構(gòu)就能表達(dá)這種數(shù)據(jù)聚集。另外,結(jié)構(gòu)是實(shí)現(xiàn)鏈表結(jié)構(gòu)的理想表現(xiàn)手段。

8.2結(jié)構(gòu)體類型到目前為止,所見到的數(shù)據(jù)類型都只包含一種類型158.2.1結(jié)構(gòu)體類型的定義

對于復(fù)雜的數(shù)據(jù),即包含有一個(gè)或多個(gè)數(shù)據(jù)項(xiàng),各數(shù)據(jù)項(xiàng)可以具有相同或不同的類型,并且每個(gè)數(shù)據(jù)項(xiàng)的含義不同,這就無法由預(yù)定義類型進(jìn)行整體描述,必須由用戶定義的類型來描述。如要描述一個(gè)人的記錄數(shù)據(jù),假定它包含姓名、性別、年齡和工資這四個(gè)數(shù)據(jù)項(xiàng),則可以使用一種結(jié)構(gòu)體類型來描述。

設(shè)該結(jié)構(gòu)體類型的名字用標(biāo)識符Person表示,其中的姓名數(shù)據(jù)項(xiàng)用標(biāo)識符name表示,對應(yīng)類型為字符串型;性別數(shù)據(jù)項(xiàng)用標(biāo)識符sex表示,對應(yīng)類型為布爾(邏輯)型,假定分別用布爾常量true和false表示男和女;年齡數(shù)據(jù)項(xiàng)用標(biāo)識符age表示,對應(yīng)類型為整型;工資數(shù)據(jù)項(xiàng)用標(biāo)識符pay表示,對應(yīng)類型為浮點(diǎn)型。

8.2.1結(jié)構(gòu)體類型的定義

對于復(fù)雜的數(shù)據(jù),即包含有一個(gè)或多16結(jié)構(gòu)體類型可定義為:structPerson{charname[10];//姓名boolsex;//性別intage;//年齡floatpay;//工資};結(jié)構(gòu)體類型可定義為:178.2.2結(jié)構(gòu)體變量的定義1.結(jié)構(gòu)體變量的定義(1)先定義類型后定義變量。格式:〔存儲類型〕<結(jié)構(gòu)體類型名><變量名1>〔,<變量名2>,…,<變量名n>〕;(2)定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量。格式:struct<結(jié)構(gòu)體類型名>{<成員列表>}<變量名1>〔,<變量名2>,…〕;(3)直接定義結(jié)構(gòu)體變量。格式:struct{<成員列表>}<變量名1>〔,<變量名2>,…〕;

8.2.2結(jié)構(gòu)體變量的定義1.結(jié)構(gòu)體變量的定義182.結(jié)構(gòu)體變量的初始化

與數(shù)組類似,在定義結(jié)構(gòu)體變量時(shí)可進(jìn)行初始化。例如:studentstu1={1001,"Zhang",90,95,80};studentstu2[3]={{1001,"Zhang",90,95,80},{1002,"Li",95,80,85},{1003,"Wang",95,85,90}};2.結(jié)構(gòu)體變量的初始化

與數(shù)組類似,在定義結(jié)構(gòu)體變量時(shí)可進(jìn)行198.2.3結(jié)構(gòu)體變量的引用

對結(jié)構(gòu)體變量的引用,一般情況下是通過對其成員的引用來實(shí)現(xiàn)的。1.引用結(jié)構(gòu)體變量中的一個(gè)成員引用結(jié)構(gòu)體變量成員的一般形式是:<結(jié)構(gòu)體變量名>.<成員名>其中圓點(diǎn)“.”稱為成員運(yùn)算符,用于引用一個(gè)結(jié)構(gòu)體變量中的某個(gè)成員說明:(1)如果成員本身又是一個(gè)結(jié)構(gòu)體類型,則必須使用多個(gè)成員運(yùn)算符,采取逐級引用的方式,直到引用最低一級的成員(2)結(jié)構(gòu)體變量的成員可以像同類型的簡單變量一樣進(jìn)行其數(shù)據(jù)類型允許的各種運(yùn)算2.引用結(jié)構(gòu)體變量在某些情況下允許對結(jié)構(gòu)體變量進(jìn)行整體操作3.結(jié)構(gòu)體變量的輸入和輸出C++不允許把一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入和輸出8.2.3結(jié)構(gòu)體變量的引用

對結(jié)構(gòu)體變量的引用,一般情況下是208.2.4結(jié)構(gòu)體數(shù)組

同定義結(jié)構(gòu)體變量相似,定義結(jié)構(gòu)體數(shù)組的方法有以下三種:(1)間接定義。即先定義結(jié)構(gòu)體類型,再用它定義結(jié)構(gòu)體數(shù)組.(2)直接定義。即在定義結(jié)構(gòu)體類型的同時(shí),定義結(jié)構(gòu)體數(shù)組。8.2.4結(jié)構(gòu)體數(shù)組

同定義結(jié)構(gòu)體變量相似,定義結(jié)構(gòu)體數(shù)組的218.3共用體類型

共用體類型,是指幾個(gè)不同(或相同)數(shù)據(jù)類型的數(shù)據(jù)項(xiàng)共同使用同一段內(nèi)存單元的數(shù)據(jù)結(jié)構(gòu)8.3.1共用體類型的定義共用體類型定義的一般形式是:union<共用體名>{<成員類型名1><成員名1>;<成員類型名2><成員名2>;┇┇<成員類型名n><成員名n>;};注意:同結(jié)構(gòu)體類型定義的方法相似,只是將關(guān)鍵字由struct換成了union8.3共用體類型

共用體類型,是指幾個(gè)不同(或相同)數(shù)據(jù)類228.3.2共用體變量的定義

同結(jié)構(gòu)體變量定義的方法相似,共用體變量的定義有直接定義、間接定義和無名定義三種形式。(1)直接定義。(2)間接定義(3)無名定義

8.3.2共用體變量的定義

同結(jié)構(gòu)體變量定義的方法相似,共用238.3.3共用體變量的引用

一般情況下不直接引用共用體變量,而是引用共用體變量的某個(gè)成員。與結(jié)構(gòu)體變量成員的引用一樣,共用體變量成員的引用(假定已經(jīng)執(zhí)行“uniondata1*p=&u;”語句)也有以下三種方式:(1)共用體變量名.成員名,如u.ch或u.i或u.d;(2)(*指針變量名).成員名,如(*p).ch或(*p).i或(*p).d;(3)指針變量名->成員名,如p->ch或p->i或p->d。8.3.3共用體變量的引用

一般情況下不直接引用共用體變量,24說明:(1)共用體變量中,可以包含若干個(gè)成員及若干種類型,但共用體成員不能同時(shí)使用。在每一時(shí)刻,只有一個(gè)成員及一種類型起作用,所以不能同時(shí)引用多個(gè)成員及多種類型。(2)共用體變量中起作用的成員值是最后一次存放的成員值,即共用體變量所有成員共用同一段內(nèi)存單元,后來存放的值將原先存放的值覆蓋,故只能使用最后一次給定的成員值。(3)共用體變量的地址和它的各個(gè)成員的地址相同.(4)不能企圖引用共用體變量名來得到某成員的值(5)共用體類型和結(jié)構(gòu)體類型可以相互嵌套,即結(jié)構(gòu)體可以出現(xiàn)在共用體類型中,共用體類型也可以出現(xiàn)在結(jié)構(gòu)體類型的定義中(6)C++允許在兩個(gè)同類型的共用體變量之間賦值。(7)共用體變量不能作函數(shù)參數(shù),函數(shù)的返回值也不能是共用體類型。說明:(1)共用體變量中,可以包含若干個(gè)成員及若干種類型,但258.3.4共用體類型的特點(diǎn)

共用體類型的特點(diǎn)就是多個(gè)相同數(shù)據(jù)類型或不同數(shù)據(jù)類型的數(shù)據(jù)項(xiàng)共同使用同一段內(nèi)存單元。在內(nèi)存中占用的字節(jié)數(shù)可能不同,但都是從同一地址開始存放,并且在同一時(shí)刻只能存放一個(gè)數(shù)據(jù)項(xiàng)。8.3.4共用體類型的特點(diǎn)

共用體類型的特點(diǎn)就是多個(gè)相同數(shù)據(jù)268.4鏈表

8.4.1鏈表的基本概念

1.鏈表的概念鏈表是由若干同類型結(jié)點(diǎn)用指針鏈接而成的數(shù)據(jù)結(jié)構(gòu)。鏈表由表頭、結(jié)點(diǎn)與鏈尾三部組成。(1)表頭head是指向鏈表的頭指針;(2)結(jié)點(diǎn)是用含有指針的結(jié)構(gòu)體類型node定義的結(jié)構(gòu)體變量。(3)鏈尾是鏈表中指針值為0的結(jié)點(diǎn),用于表示鏈表的結(jié)束。類似于字符串以0作為結(jié)束標(biāo)志。8.4鏈表

8.4.1鏈表的基本概念27鏈表的概念實(shí)例說明將學(xué)生的成績存放在不連續(xù)的內(nèi)存空間中,如學(xué)號為“1001”、“1002”、“1003”的學(xué)生成績依次的存放在首地址為1000、1040、1080的三個(gè)不連續(xù)內(nèi)存空間(每段空間稱為一個(gè)結(jié)點(diǎn)),如圖8-3所示。各學(xué)生結(jié)點(diǎn)用指針鏈接。首結(jié)點(diǎn)地址存放在頭指針head中。當(dāng)要?jiǎng)h除學(xué)生記錄結(jié)點(diǎn)時(shí),如刪除學(xué)號為“1002”學(xué)生結(jié)點(diǎn)時(shí),只要將其前一個(gè)結(jié)點(diǎn)(即學(xué)號為“1001”)的指針改為1080即可,所有數(shù)據(jù)不要作任何移動(dòng)。而當(dāng)要插入一個(gè)新的學(xué)生成績時(shí),只要將新結(jié)點(diǎn)的地址賦給前一個(gè)結(jié)點(diǎn)的指針,將其后一個(gè)結(jié)點(diǎn)的地址賦給新結(jié)點(diǎn)指針即可。所有數(shù)據(jù)不要作任何移動(dòng)。所以用鏈表可解決記錄增刪困難的問題。使記錄的增刪變得較為容易。鏈表的概念實(shí)例說明將學(xué)生的成績存放在不連續(xù)的內(nèi)存空間中,如學(xué)28鏈表圖鏈表圖298.4.2鏈表的基本操作

由于學(xué)生成績管理系統(tǒng)的主要操作是數(shù)據(jù)的輸入、輸出、查詢、插入、刪除等,所以鏈表的主要操作有鏈表的建立、查詢、輸出、刪除等。為方便后面的討論,將結(jié)點(diǎn)內(nèi)數(shù)據(jù)成員簡化為學(xué)號、成績與指針三項(xiàng),簡化后的結(jié)點(diǎn)類型node定義如下:structnode{intno;//學(xué)生學(xué)號intscore;//學(xué)生成績node*next;//指針變量};8.4.2鏈表的基本操作

由于學(xué)生成績管理系統(tǒng)的主要操作是數(shù)30為了用鏈表對學(xué)生成績進(jìn)行錄入、查詢、輸出、插入、刪除等操作,應(yīng)學(xué)會建立鏈表、輸出鏈表、刪除鏈表、查詢指定結(jié)點(diǎn)、刪除指定結(jié)點(diǎn)、插入結(jié)點(diǎn)、建立有序鏈表等鏈表的基本操作。而這些基本操作可以用以下函數(shù)來實(shí)現(xiàn)。(1)建立鏈表函數(shù):node*Create(void)(2)輸出鏈表函數(shù):voidPrint(node*head)(3)刪除鏈表函數(shù):voidDelchain(node*head)(4)刪除指定結(jié)點(diǎn)函數(shù):node*Delete(node*head,intno)(5)插入結(jié)點(diǎn)函數(shù):node*Insert(node*head,node*pn)(6)建立有序鏈表函數(shù):node*create_order()。為了用鏈表對學(xué)生成績進(jìn)行錄入、查詢、輸出、插入、刪除等操作,311.建立無序鏈表函數(shù)Create()建立無序鏈表應(yīng)用函數(shù)node*Create(void)實(shí)現(xiàn),建立無序鏈表的步驟如下。(1)定義三個(gè)node類型的指針變量:node*head,*pn,*pt;head為頭指針變量,用于存放鏈表首結(jié)點(diǎn)的地址,初值為0,表示鏈表初始時(shí)為空。pn為新結(jié)點(diǎn)指針變量,用于存放用new運(yùn)算符動(dòng)態(tài)建立的新結(jié)點(diǎn)地址。pt為尾結(jié)點(diǎn)的指針變量,用于存放鏈表尾結(jié)點(diǎn)地址。(2)新建結(jié)點(diǎn)、輸入學(xué)號與學(xué)生成績。用new運(yùn)算符動(dòng)態(tài)分配新結(jié)點(diǎn)空間,將pn指向該新結(jié)點(diǎn),給新結(jié)點(diǎn)輸入學(xué)號與成績。pn=newnode;cin>>pn->no>>pn->score;1.建立無序鏈表函數(shù)Create()建立無序鏈表應(yīng)用函數(shù)no321.建立無序鏈表函數(shù)Create()(3)將新結(jié)點(diǎn)加入到鏈尾。新結(jié)點(diǎn)加入到鏈尾有鏈表為空與非空兩種情況:①鏈表為空(head為0)。當(dāng)鏈表第一次加入結(jié)點(diǎn)時(shí)鏈表為空,此時(shí)鏈表頭指針head為0,如圖8-4(a)所示。應(yīng)將新結(jié)點(diǎn)的地址1000由pn賦給頭指針head與尾指針pt。即執(zhí)行:head=pn;pt=pn;兩條語句即可將新結(jié)點(diǎn)加入鏈表第一個(gè)結(jié)點(diǎn)處,如圖所示1.建立無序鏈表函數(shù)Create()(3)將新結(jié)點(diǎn)加入到鏈尾331.建立無序鏈表函數(shù)Create()②鏈表非空。當(dāng)鏈表非空時(shí),應(yīng)將新結(jié)點(diǎn)追加到鏈尾處。只要將新結(jié)點(diǎn)地址1040由pn賦給鏈尾結(jié)點(diǎn)的指針變量pt->next,就可使新結(jié)點(diǎn)連接到鏈尾。再將pn賦給pt,使pt指向新的鏈尾結(jié)點(diǎn)。此項(xiàng)操作只需執(zhí)行:pt->next=pn;pt=pn;兩條語句即可完成,如圖

1.建立無序鏈表函數(shù)Create()②鏈表非空。當(dāng)鏈表非空時(shí)341.建立無序鏈表函數(shù)Create()鏈表空與非空的兩種情況可用雙選if語句實(shí)現(xiàn)如下:if(head==0)//若鏈表為空{(diào)head=pn;pt=pn;)else//否則鏈表非空{(diào)pt->next=pn;pt=pn;}(4)重復(fù)(2)、(3)兩步,通過循環(huán)不斷向鏈表添加新結(jié)點(diǎn)直到學(xué)號為“-1”為止。(5)將鏈尾結(jié)點(diǎn)指針賦0。(6)返回鏈表頭指針head。1.建立無序鏈表函數(shù)Create()鏈表空與非空的兩種情況可35先寫出上述步驟中的關(guān)鍵語句,然后用循環(huán)結(jié)構(gòu)連接這些關(guān)鍵語句,即可寫出建立無序鏈表函數(shù)如下:node*Create(void){intno;//定義輸入學(xué)生學(xué)號臨時(shí)變量nonode*head,*pn,*pt;//定義鏈表頭指針、新結(jié)點(diǎn)指針、尾指針head、pn、pthead=0;//鏈表頭指針賦0,表示鏈表為空cout<<"產(chǎn)生無序鏈表,請輸入學(xué)生學(xué)號與成績,以-1為結(jié)束:"<<endl;cin>>no;//輸入學(xué)號while(no!=-1)//學(xué)號為-1時(shí)結(jié)束輸入{pn=newnode;//動(dòng)態(tài)分配新結(jié)點(diǎn)內(nèi)存空間,并將結(jié)點(diǎn)地址賦給pnpn->no=no;//輸入學(xué)號cin>>pn->score;//輸入成績先寫出上述步驟中的關(guān)鍵語句,然后用循環(huán)結(jié)構(gòu)連接這些關(guān)鍵語句,36程序接上頁if(head==0)//若鏈表為空{(diào)head=pn;//則將新結(jié)點(diǎn)地址由pn賦給頭指針head與尾指針ptpt=pn;//使新結(jié)點(diǎn)加入到鏈?zhǔn)讅else//否則鏈表非空{(diào)pt->next=pn;//將新結(jié)點(diǎn)地址由pn賦給鏈尾的next指針與尾指針ptpt=pn;//使新結(jié)點(diǎn)加入到鏈尾}cin>>no;//輸入學(xué)號}pt->next=0;//鏈尾指針變量賦0returnhead;//返回鏈表的頭指針}程序接上頁if(head==0)//若鏈表372.輸出鏈表函數(shù)Print()輸出鏈表中各結(jié)點(diǎn)成績應(yīng)用函數(shù)voidPrint(void)實(shí)現(xiàn)。保留輸出鏈表函數(shù)的步驟如下:(1)函數(shù)必須用形參node*head接收來自主函數(shù)的鏈表頭指針head。(2)定義指針變量node*p=head;將p指向鏈表首結(jié)點(diǎn)。(3)用循環(huán)語句依次輸出每個(gè)結(jié)點(diǎn)的學(xué)號與成績,直到鏈尾(p=0)為止。實(shí)現(xiàn)的語句為:while(p!=0){cout<<p->no<<'\t'<<p->score<<'\n';p=p->next;}2.輸出鏈表函數(shù)Print()輸出鏈表中各結(jié)點(diǎn)成績應(yīng)用函數(shù)38由步驟中的關(guān)鍵語句可編寫輸出鏈表函數(shù)如下:

voidPrint(node*head){node*p=head;cout<<"輸出鏈表中各結(jié)點(diǎn)值:"<<endl;while(p!=0){cout<<p->no<<'\t'<<p->score<<endl;p=p->next;}}由步驟中的關(guān)鍵語句可編寫輸出鏈表函數(shù)如下:

voidPrin39輸出鏈表各結(jié)點(diǎn)數(shù)據(jù)表輸出鏈表各結(jié)點(diǎn)數(shù)據(jù)表403.刪除鏈表函數(shù)Delchain()

刪除鏈表是指刪除鏈表全部結(jié)點(diǎn),并回收結(jié)點(diǎn)所占用的全部內(nèi)存空間。刪除鏈表用函數(shù)Delchain(node*head)實(shí)現(xiàn),主要操作步驟如下:(1)用形參node*head接受來自主函數(shù)的鏈表頭指針:(2)定義指針變量node*p=head:并使指針變量p指向鏈?zhǔn)?,如圖所示:3.刪除鏈表函數(shù)Delchain()

刪除鏈表是指刪除鏈表全41(3)用循環(huán)語句依次刪除鏈表的各結(jié)點(diǎn)刪除鏈表的函數(shù)如下:voidDelchain(node*head){node*p;p=head;//鏈表頭指針賦給pwhile(head)//當(dāng)鏈表非空時(shí)刪除結(jié)點(diǎn){head=p->next;//將鏈表下一個(gè)結(jié)點(diǎn)指針賦給headdeletep;//刪除鏈表第一個(gè)結(jié)點(diǎn)p=head;//再將頭指針賦給p}}(3)用循環(huán)語句依次刪除鏈表的各結(jié)點(diǎn)刪除鏈表的函數(shù)如下:424.刪除鏈表上指定結(jié)點(diǎn)函數(shù)Delete()刪除鏈表上指定值結(jié)點(diǎn)用函數(shù)Delete(node*head,intno)實(shí)現(xiàn)。函數(shù)形參應(yīng)有兩個(gè):第一個(gè)為鏈表頭指針head,第二個(gè)為要?jiǎng)h除結(jié)點(diǎn)的學(xué)生學(xué)號no。要?jiǎng)h除鏈表上指定學(xué)號的結(jié)點(diǎn),首先要找到要?jiǎng)h除的結(jié)點(diǎn),然后才能刪除該結(jié)點(diǎn)。刪除結(jié)點(diǎn)可能會遇到三種情況:(1)若鏈表為空,即head為0,則返回空指針。(2)若要?jiǎng)h除的結(jié)點(diǎn)為鏈表首結(jié)點(diǎn),則將該結(jié)點(diǎn)的指針值賦給鏈表頭指針head,然后刪除該結(jié)點(diǎn)即可(3)要?jiǎng)h除的結(jié)點(diǎn)不是鏈表首結(jié)點(diǎn)。4.刪除鏈表上指定結(jié)點(diǎn)函數(shù)Delete()刪除鏈表上指定值結(jié)435.插入結(jié)點(diǎn)函數(shù)Insert()假設(shè)鏈表各結(jié)點(diǎn)按成績score降序排列,插入結(jié)點(diǎn)后,仍要求按成績score降序排列。在插入函數(shù)Insert(node*head,node*pn)的形參中head為頭指針,pn為指向插入結(jié)點(diǎn)的指針。在插入函數(shù)體中:pc為指向插入點(diǎn)前一個(gè)結(jié)點(diǎn)的指針,pa為指向插入點(diǎn)后一個(gè)結(jié)點(diǎn)的指針,插入結(jié)點(diǎn)有兩種情況:(1)鏈表為空。(2)鏈表非空。5.插入結(jié)點(diǎn)函數(shù)Insert()假設(shè)鏈表各結(jié)點(diǎn)按成績scor446.建立有序鏈表函數(shù)Creat_Order()向一個(gè)空鏈表中不斷地插入新建立的結(jié)點(diǎn),并使新結(jié)點(diǎn)按序排列,就產(chǎn)生一條有序鏈表。建立一條有序鏈表的過程可分為兩步:首先建立一個(gè)新結(jié)點(diǎn),其次將新結(jié)點(diǎn)插入到鏈表中。函數(shù)如下:node*Create_Order(void){node*pn,*head=0;//定義指向新結(jié)點(diǎn)的指針變量pn及鏈表頭指針headintno;//定義輸入學(xué)生學(xué)號的臨時(shí)變量n。cout<<"產(chǎn)生一條有序鏈表,請輸入學(xué)生學(xué)號與成績,以-1結(jié)束!\n";cin>>no;while(no!=-1)//學(xué)號不等于-1則循環(huán){pn=newnode;//動(dòng)態(tài)分配node類型結(jié)點(diǎn)空間,并將其地址賦給pnpn->no=no;//給新結(jié)點(diǎn)輸入學(xué)號與成績cin>>pn->score;head=Insert(head,pn);//調(diào)用結(jié)點(diǎn)插入函數(shù),將新結(jié)點(diǎn)按成績降序插入鏈表cin>>no;//輸入學(xué)號}returnhead;//返回鏈表頭指針}6.建立有序鏈表函數(shù)Creat_Order()向一個(gè)空鏈表中457.完成鏈表處理的主程序#include"stdafx.h"#include"stdio.h"#include"iostream.h"#include"string.h"structnode{ intno; intscore; node*next;};7.完成鏈表處理的主程序#include"stdafx.h46程序接上頁node*Create()//建立無序鏈表的函數(shù){ intno; node*head,*pn,*pt; head=0; cout<<"產(chǎn)生無序鏈表,請輸入學(xué)生學(xué)號與成績,以-1為結(jié)束:"<<endl; cin>>no; while(no!=-1) { pn=newnode;

pn->no=no; cin>>pn->score; if(head==0)程序接上頁node*Create()47程序接上頁{ head=pn; pt=pn; } else { pt->next=pn; pt=pn; } cin>>no; } pt->next=0; returnhead;}程序接上頁{48程序接上頁voidPrint(node*head){ node*p=head; cout<<"輸出鏈表中各結(jié)點(diǎn)值:"<<endl; while(p!=0) { cout<<p->no<<'\t'<<p->score<<endl; p=p->next; }}程序接上頁voidPrint(node*head)49程序接上頁voidDelchain(node*head){ node*p; p=head; while(head) { head=p->next; deletep; p=head; }}node*Delete(node*head,intno){ node*pc,*pa; pc=pa=head; if(head==NULL) { cout<<"鏈表為空,無結(jié)點(diǎn)可刪!"<<endl; returnNULL; }程序接上頁voidDelchain(node*head)50程序接上頁elseif(pc->no==no) { head=pc->next; deletepc; cout<<"刪除了一個(gè)結(jié)點(diǎn)!"<<endl; } else { while(pc->no!=no) { pa=pc; pc=pc->next; }程序接上頁elseif(pc->no==no)51程序接上頁if(pc==NULL) cout<<"鏈表中沒有要?jiǎng)h除的結(jié)點(diǎn)!"<<endl; else { pa->next=pc->next; deletepc; cout<<"刪除了一個(gè)結(jié)點(diǎn)!"<<endl; } } returnhead;}程序接上頁if(pc==NULL)52程序接上頁node*Insert(node*head,node*pn){ node*pc,*pa; pc=pa=head; if(head==0) { head=pn; pn->next=0; returnhead; } if(pn->score>=head->score) { pn->next=head; head=pn; returnhead; }程序接上頁node*Insert(node*head,n53程序接上頁while(pc->next!=0&&pn->score<=pc->score) { pa=pc; pc=pc->next; } if(pn->score<=pc->score) { pc->next=pn; pn->next=0; } else { pn->next=pc; pa->next=pn; } returnhead;}程序接上頁while(pc->next!=0&&p54程序接上頁node*Create_Order(){ node*pn,*head=0; intno; cout<<"產(chǎn)生一條有序鏈表,請輸入學(xué)生學(xué)號與成績,以-1結(jié)束!"<<endl; cin>>no; while(no!=-1) { pn=newnode;

pn->no=no; cin>>pn->score; head=Insert(head,pn); cin>>no; } returnhead;}程序接上頁node*Create_Order()55程序接上頁voidmain(){ node*head; intno; head=Create(); Print(head); cout<<"輸入要?jiǎng)h除結(jié)點(diǎn)上學(xué)生學(xué)號:"<<endl; cin>>no; head=Delete(head,no); Print(head); Delchain(head); head=Create_Order(); Print(head); Delchain(head); getchar();}程序接上頁voidmain()56程序執(zhí)行后顯示:產(chǎn)生無序鏈表,請輸入學(xué)生學(xué)號與成績,以-l為結(jié)束:100190100280100370-1輸出鏈表中各結(jié)點(diǎn)值:100190100280100370輸入要?jiǎng)h除結(jié)點(diǎn)上學(xué)生學(xué)號:1002刪除了一個(gè)結(jié)點(diǎn)!程序執(zhí)行后顯示:產(chǎn)生無序鏈表,請輸入學(xué)生學(xué)號與成績,以-l為57程序執(zhí)行后顯示:輸出鏈表中各結(jié)點(diǎn)值:100190100370產(chǎn)生一條有序鏈表,請輸入學(xué)生學(xué)號與成績,以-1結(jié)束!100190100380100285-1輸出鏈表中各結(jié)點(diǎn)值:100190100285100380程序執(zhí)行后顯示:輸出鏈表中各結(jié)點(diǎn)值:588.5類型定義

用typedef定義類型名是由用戶自行對已經(jīng)存在的類型取新名字,而不是定義新類型,而且原有類型名依然有效。其目的主要是為了減少書寫工作量,增加程序可讀性,提高程序的可移植性。1.用typedef定義基本類型定義基本類型的新類型名的一般形式是:typedef基本類型名新類型名;2.定義數(shù)組類型定義數(shù)組類型的新類型名的一般形式為:typedef基本類型名新類型名;3.定義指針類型定義指針類型的新類型名的一般形式為:typedef基本類型名*新類型名;4.定義一個(gè)新類型名代表一個(gè)結(jié)構(gòu)體類型5.定義一個(gè)類型名代表一個(gè)共用體類型8.5類型定義

用typedef定義類型名是由用戶自行對已經(jīng)59用typedef定義一個(gè)新類型名的方法如下:

(1)先按定義變量的方法寫出定義體,例如:char*P;(2)將變量名換成新類型名,例如:char*POINTER;(3)在最前面加上typedef,例如:typedefchar*POINTER;(4)最后用新類型名去定義變量,例如:POINTERp1,p2;用typedef定義一個(gè)新類型名的方法如下:

(1)先按定義60本章小結(jié)本章介紹了枚舉型、結(jié)構(gòu)體和共用體三種導(dǎo)出數(shù)據(jù)類型的概念、定義格式與使用方法,還介紹了鏈表的建立、刪除、插入、輸出等基本操作。1.枚舉型枚舉型是某種數(shù)據(jù)可能取值的集合,其定義格式為:enum<枚舉類型名>{<枚舉元素表>};枚單元素表中,的各元素為數(shù)據(jù)可能取值的集合,每元素均有一個(gè)序號值與之對應(yīng),該序號值可以在定義枚舉類型時(shí)賦給元素,也可取其默認(rèn)序號,默認(rèn)序號從0開始依次加1。用枚舉類型可定義枚舉變量或枚舉數(shù)組,枚舉變量可進(jìn)行賦值運(yùn)算與比較運(yùn)算。枚舉變量不能用cin輸入枚舉元素值或序號值,只能用賦值運(yùn)算符將枚舉元素值賦給枚舉變量。而用cout可以輸出枚舉變量,但輸出的是其序號而不是元素值。枚舉變量之間的比較運(yùn)算是對其序號進(jìn)行的。本章小結(jié)本章介紹了枚舉型、結(jié)構(gòu)體和共用體三種導(dǎo)出數(shù)據(jù)類型的概612.結(jié)構(gòu)體結(jié)構(gòu)體是由若干數(shù)據(jù)成員組成的導(dǎo)出數(shù)據(jù)類型,其定義格式為:struct<結(jié)構(gòu)體類型名>{<類型>成員1;…<類型>成員n;};結(jié)構(gòu)體中成員的數(shù)據(jù)類型可以是基本類型,也可以是導(dǎo)出類型。2.結(jié)構(gòu)體結(jié)構(gòu)體是由若干數(shù)據(jù)成員組成的導(dǎo)出數(shù)據(jù)類型,其定義格622.結(jié)構(gòu)體用結(jié)構(gòu)體數(shù)據(jù)類型可定義結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組,定義結(jié)構(gòu)體變量有三種方法:先定義結(jié)構(gòu)體后定義結(jié)構(gòu)體變量,定義結(jié)構(gòu)體類型同時(shí)定義結(jié)構(gòu)體變量,直接定義結(jié)構(gòu)體變量。每個(gè)結(jié)構(gòu)體變量有若干數(shù)據(jù)成員,數(shù)據(jù)成員的引用格式為:結(jié)構(gòu)體變量名.成員名。不能對結(jié)構(gòu)體變量直接進(jìn)行輸入、輸出,只能對結(jié)構(gòu)體變量的數(shù)據(jù)成員進(jìn)行輸入、輸出。結(jié)構(gòu)體數(shù)組與數(shù)據(jù)庫中的二維表類似,數(shù)組中的每一個(gè)元素相當(dāng)于表中的一個(gè)記錄,元素中的每個(gè)成員相當(dāng)于表中一個(gè)數(shù)據(jù)項(xiàng)。因此,用結(jié)構(gòu)體數(shù)組可以實(shí)現(xiàn)數(shù)據(jù)庫中二維表的統(tǒng)計(jì)、排序、查詢等功能。2.結(jié)構(gòu)體用結(jié)構(gòu)體數(shù)據(jù)類型可定義結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組,定義63共用體和鏈表的基本操作

3.共用體共用體類型是指幾個(gè)不同數(shù)據(jù)類型的數(shù)據(jù)項(xiàng)共同使用同一段內(nèi)存單元的數(shù)據(jù)結(jié)構(gòu)。共用體變量所占用的內(nèi)存大小(字節(jié)數(shù))與成員中占用內(nèi)存最大(即具有最多字節(jié)數(shù))的成員的占用大小相同,而結(jié)構(gòu)體變量所占用的內(nèi)存大小是各個(gè)成員所占內(nèi)存長度之和。4.鏈表的基本操作鏈表由若干個(gè)結(jié)構(gòu)體類型的結(jié)點(diǎn)用指針鏈接而成,每個(gè)結(jié)點(diǎn)由數(shù)據(jù)與指針兩部分組成,其中指針用于鏈接下一個(gè)結(jié)點(diǎn)。鏈表的首結(jié)點(diǎn)地址存放在頭指針中,尾結(jié)點(diǎn)指針必須為0。鏈表的主要操作有鏈表的建立、插入、刪除、輸出等。共用體和鏈表的基本操作

3.共用體64鏈表的基本操作(1)建立無序鏈表的主要操作。先用new動(dòng)態(tài)分配一個(gè)結(jié)點(diǎn)空間,并用指針變量pn指向新結(jié)點(diǎn),輸入數(shù)據(jù)到結(jié)點(diǎn)內(nèi),然后將新結(jié)點(diǎn)加入到鏈尾,依次循環(huán)直到輸入結(jié)束標(biāo)志為止。若用pt指向鏈尾結(jié)點(diǎn),則將新結(jié)點(diǎn)加到鏈尾的主要操作是:pt->next=pn;//新結(jié)點(diǎn)加入到鏈尾pt=pn//使pt指向新的鏈尾(2)刪除整個(gè)鏈表的主要操作。先用指針變量p指向鏈表首結(jié)點(diǎn)(p=head),再將首結(jié)點(diǎn)從鏈表分離出來(head=p->next),最后刪除首結(jié)點(diǎn)(deletep),依次循環(huán)直到刪完(head==0)為止。鏈表的基本操作(1)建立無序鏈表的主要操作。先用new動(dòng)態(tài)分65鏈表的基本操作(3)刪除指定結(jié)點(diǎn)的主要操作。先用循環(huán)語句找到要?jiǎng)h除的結(jié)點(diǎn),如:while(pc->no!=no){pa=pc;pc=pc->next;}用pc指向要?jiǎng)h除的結(jié)點(diǎn),pa指向刪除結(jié)點(diǎn)的后一個(gè)結(jié)點(diǎn),只要執(zhí)行下面兩條語句:pa->next=pc->next;//要?jiǎng)h除結(jié)點(diǎn)前一個(gè)結(jié)點(diǎn)的地址賦給其后一個(gè)結(jié)點(diǎn)的指針deletepc;//動(dòng)態(tài)回收結(jié)點(diǎn)占用空間則指定結(jié)點(diǎn)被刪除。當(dāng)然,實(shí)際編程時(shí)還必須考慮其他許多情況,如鏈表為空,刪除首結(jié)點(diǎn)等特殊情況。鏈表的基本操作(3)刪除指定結(jié)點(diǎn)的主要操作。先用循環(huán)語句找到66鏈表的基本操作(4)插入結(jié)點(diǎn)的主要操作。先用循環(huán)語句找到插入點(diǎn)的位置,用pc指向插入點(diǎn)前一個(gè)結(jié)點(diǎn),pa指向插入點(diǎn)后一個(gè)結(jié)點(diǎn),用pn指向新結(jié)點(diǎn),只要執(zhí)行下面兩條語句:pn->next=pc;//將插入點(diǎn)前一個(gè)結(jié)點(diǎn)的地址賦給新結(jié)點(diǎn)的指針pa->next=pn;//將新結(jié)點(diǎn)的地址賦給插入點(diǎn)后一個(gè)結(jié)點(diǎn)的指針則新結(jié)點(diǎn)被插入到指定位置。鏈表的基本操作(4)插入結(jié)點(diǎn)的主要操作。先用循環(huán)語句找到插入67C++面對對象程序設(shè)計(jì)授課老師:C++面對對象程序設(shè)計(jì)授課老師:68第8章復(fù)雜數(shù)據(jù)類型

本章要點(diǎn)8.1枚舉類型的定義及應(yīng)用8.2結(jié)構(gòu)體的定義及應(yīng)用8.3共用體的定義及應(yīng)用8.4鏈表8.5類型定義第8章復(fù)雜數(shù)據(jù)類型

本章要點(diǎn)69

本章要點(diǎn)枚舉類型的定義及應(yīng)用結(jié)構(gòu)體的定義及應(yīng)用共用體的定義及應(yīng)用用typedef定義類型名本章要點(diǎn)708.1枚舉類型在程序設(shè)計(jì)中,有時(shí)會用到由若干個(gè)有限數(shù)據(jù)元素組成的集合,如一周內(nèi)的星期一到星期日7個(gè)數(shù)據(jù)元素組成的集合,程序中某個(gè)變量取值僅限于集合中的元素。此時(shí),可將這些數(shù)據(jù)集合定義為枚舉類型。因此,枚舉類型是某類數(shù)據(jù)可能取值的集合,如一周內(nèi)星期可能取值的集合為:{Sun,Mon,Tue,Wed,Thu,F(xiàn)ri,Sat}該集合可定義為描述星期的枚舉類型,該枚舉類型共有7個(gè)元素,因而用枚舉類型定義的枚舉變量只能取集合中的某一元素值。由于枚舉類型是導(dǎo)出數(shù)據(jù)類型,因此,必須先定義枚舉類型,然后再用枚舉類型定義枚舉型變量。8.1枚舉類型在程序設(shè)計(jì)中,有時(shí)會用到由若干個(gè)有限數(shù)據(jù)元素組718.1.1枚舉類型的定義

枚舉類型的一般定義格式為:enum<枚舉類型名>{<枚舉元素表>};其中:關(guān)鍵字enum表示定義的是枚舉類型,枚舉類型名由標(biāo)識符組成。枚舉元素為常量時(shí)定義形式如下:enum<枚舉類型名>{<枚舉常量1,枚舉常量2,…,枚舉常量n};例如:enumseasons{spring,summer,autumn,winter};//定義枚舉類型enumseasons又如:enumcolors{red,blue,green,yellow,white,black};//定義枚舉類型enumcolors8.1.1枚舉類型的定義

枚舉類型的一般定義格式為:72說明:

(1)enum是定義枚舉類型的關(guān)鍵字,枚舉類型名應(yīng)符合標(biāo)識符定義的規(guī)則,enum和枚舉類型名構(gòu)成枚舉類型的類型名。(2)花括號{}中的值是該枚舉類型所有可能的枚舉常量列表,定義中枚舉常量不能同名。在系統(tǒng)默認(rèn)的情況下,枚舉常量值順序?yàn)?,l,2,…,即第一個(gè)枚舉常量的值為0,其后枚舉常量的值是前一個(gè)枚舉常量的值加1。例如示例中,spring,summer,autumn,winter的值分別為0,1,2,3,而red,blue,green,yellow,white,black的值分別為0,1,2,3,4,5。(3)也可以在定義時(shí),由用戶自行設(shè)定每一個(gè)枚舉常量的值。例如:enumseasons{spring=4,summer=1,autumn,winter};spring的值為4,summer的值為1,其后枚舉常量的值為前一個(gè)枚舉常量的值加1,順序?yàn)?,3。(4)不能給已經(jīng)定義過的枚舉常量賦值。例如:spring=1;是錯(cuò)誤的,因?yàn)槊杜e常量是常量而不是變量。說明:

(1)enum是定義枚舉類型的關(guān)鍵字,枚舉類型名應(yīng)符738.1.2枚舉類型變量的定義定義枚舉類型變量有三種方法;即:先定義類型后定義變量,定義類型的同時(shí)定義變量,直接定義變量,現(xiàn)介紹如下:1.先定義類型后定義變量格式:enum<枚舉類型名><變量1>〔,<變量2>,…,<變量n>〕2.定義類型的同時(shí)定義變量格式:enum<枚舉類型名>{<枚舉元素表>}<變量1>〔,<變量2>,…,<變量n>〕;3.直接定義枚舉變量格式:enum{<枚舉元素表>}<變量1>〔,<變量2>,…,<變量n>〕;8.1.2枚舉類型變量的定義定義枚舉類型變量有三種方法;即:748.1.3枚舉類型變量的引用

(1)枚舉變量的取值范圍只能是其枚舉類型定義時(shí)所枚舉的各個(gè)枚舉常量,所以枚舉常量可賦值給枚舉變量如“c1=white;c2[3]=green;”等。(2)枚舉類型變量不能直接被賦予一個(gè)整數(shù)數(shù)值。如“c1=4;”是錯(cuò)誤的,因?yàn)閏1是枚舉類型變量,4是整型常量,兩者的類型不同。經(jīng)過強(qiáng)制類型轉(zhuǎn)換后,是可以賦值的,如“c1=(enumcolors)4;”。(3)同類型的枚舉變量間、枚舉常量間、枚舉變量與枚舉常量間可以進(jìn)行算術(shù)運(yùn)算和關(guān)系運(yùn)算等。例如:if(c1>red)…。(4)枚舉變量也有作用域范圍,其含義與一般變量相同。(5)枚舉變量和枚舉常量可以作函數(shù)參數(shù),函數(shù)的返回值也可以是枚舉類型。8.1.3枚舉類型變量的引用

(1)枚舉變量的取值范圍只能是75先定義描述6種顏色的枚舉類型colors,然后再用該枚舉類型定義枚舉數(shù)組,任意輸入6個(gè)顏色號,轉(zhuǎn)換成對應(yīng)的顏色枚舉量后輸入到枚舉數(shù)組中,最后輸出枚舉數(shù)組中對應(yīng)的顏色#include"stdafx.h"#include"stdio.h"#include"iostream.h"#include"stdlib.h"http://使用exit(0)函數(shù)時(shí)必須包含stdlib.h頭文件enumcolors{red,blue,green,black,white,yellow};//定義有六種顏色元素的枚舉類型colorsvoidmain(){ colorscolor[6];//定義枚舉類型數(shù)組color[6] intj,n; cout<<"0:red,1:blue,2:green,3:black,4:white,5:yellow"<<endl; cout<<"請輸入六個(gè)顏色號:"<<endl;先定義描述6種顏色的枚舉類型colors,然后再用該枚舉類型76for(j=0;j<6;j++){ cin>>n; if(n<0||n>5) { cout<<"輸入顏色值出錯(cuò),請重新輸入!"<<endl; exit(0); } else switch(n)//將顏色號轉(zhuǎn)換成顏色元素存入數(shù)組 { case0: color[j]=red; break; case1: color[j]=blue; break;for(j=0;j<6;j++)77case2: color[j]=green; break; case3: color[j]=black; break; case4: color[j]=white; break; case5: color[j]=yellow; break; } }case78for(j=0;j<6;j++)//循環(huán)六次輸出數(shù)組元素對應(yīng)的顏色 { switch(color[j]) { casered: cout<<"red"; break; caseblue: cout<<"blue"; break; casegreen: cout<<"green"; break; caseblack: cout<<"black"; break;for(j=0;j<6;j++)79casewhite: cout<<"white"; break; caseyellow: cout<<"yellow"; break; } cout<<'\t'; } cout<<endl; getchar();}casewhite:80程序執(zhí)行時(shí),屏幕提示:0:red,1:blue,2:green,3:black,4:white,5:yellow請輸入6個(gè)顏色號:012345<Enter>屏幕輸出:redbluegreenblackwhiteyellow程序執(zhí)行時(shí),屏幕提示:0:red,1:blue,2:gree818.2結(jié)構(gòu)體類型到目前為止,所見到的數(shù)據(jù)類型都只包含一種類型信息,即使是多個(gè)元素的數(shù)組。但是,信息的邏輯關(guān)系,要求各個(gè)數(shù)據(jù)類型組合在一起考慮會更加方便。結(jié)構(gòu)就能表達(dá)這種數(shù)據(jù)聚集。另外,結(jié)構(gòu)是實(shí)現(xiàn)鏈表結(jié)構(gòu)的理想表現(xiàn)手段。

8.2結(jié)構(gòu)體類型到目前為止,所見到的數(shù)據(jù)類型都只包含一種類型828.2.1結(jié)構(gòu)體類型的定義

對于復(fù)雜的數(shù)據(jù),即包含有一個(gè)或多個(gè)數(shù)據(jù)項(xiàng),各數(shù)據(jù)項(xiàng)可以具有相同或不同的類型,并且每個(gè)數(shù)據(jù)項(xiàng)的含義不同,這就無法由預(yù)定義類型進(jìn)行整體描述,必須由用戶定義的類型來描述。如要描述一個(gè)人的記錄數(shù)據(jù),假定它包含姓名、性別、年齡和工資這四個(gè)數(shù)據(jù)項(xiàng),則可以使用一種結(jié)構(gòu)體類型來描述。

設(shè)該結(jié)構(gòu)體類型的名字用標(biāo)識符Person表示,其中的姓名數(shù)據(jù)項(xiàng)用標(biāo)識符name表示,對應(yīng)類型為字符串型;性別數(shù)據(jù)項(xiàng)用標(biāo)識符sex表示,對應(yīng)類型為布爾(邏輯)型,假定分別用布爾常量true和false表示男和女;年齡數(shù)據(jù)項(xiàng)用標(biāo)識符age表示,對應(yīng)類型為整型;工資數(shù)據(jù)項(xiàng)用標(biāo)識符pay表示,對應(yīng)類型為浮點(diǎn)型。

8.2.1結(jié)構(gòu)體類型的定義

對于復(fù)雜的數(shù)據(jù),即包含有一個(gè)或多83結(jié)構(gòu)體類型可定義為:structPerson{charname[10];//姓名boolsex;//性別intage;//年齡floatpay;//工資};結(jié)構(gòu)體類型可定義為:848.2.2結(jié)構(gòu)體變量的定義1.結(jié)構(gòu)體變量的定義(1)先定義類型后定義變量。格式:〔存儲類型〕<結(jié)構(gòu)體類型名><變量名1>〔,<變量名2>,…,<變量名n>〕;(2)定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量。格式:struct<結(jié)構(gòu)體類型名>{<成員列表>}<變量名1>〔,<變量名2>,…〕;(3)直接定義結(jié)構(gòu)體變量。格式:struct{<成員列表>}<變量名1>〔,<變量名2>,…〕;

8.2.2結(jié)構(gòu)體變量的定義1.結(jié)構(gòu)體變量的定義852.結(jié)構(gòu)體變量的初始化

與數(shù)組類似,在定義結(jié)構(gòu)體變量時(shí)可進(jìn)行初始化。例如:studentstu1={1001,"Zhang",90,95,80};studentstu2[3]={{1001,"Zhang",90,95,80},{1002,"Li",95,80,85},{1003,"Wang",95,85,90}};2.結(jié)構(gòu)體變量的初始化

與數(shù)組類似,在定義結(jié)構(gòu)體變量時(shí)可進(jìn)行868.2.3結(jié)構(gòu)體變量的引用

對結(jié)構(gòu)體變量的引用,一般情況下是通過對其成員的引用來實(shí)現(xiàn)的。1.引用結(jié)構(gòu)體變量中的一個(gè)成員引用結(jié)構(gòu)體變量成員的一般形式是:<結(jié)構(gòu)體變量名>.<成員名>其中圓點(diǎn)“.”稱為成員運(yùn)算符,用于引用一個(gè)結(jié)構(gòu)體變量中的某個(gè)成員說明:(1)如果成員本身又是一個(gè)結(jié)構(gòu)體類型,則必須使用多個(gè)成員運(yùn)算符,采取逐級引用的方式,直到引用最低一級的成員(2)結(jié)構(gòu)體變量的成員可以像同類型的簡單變量一樣進(jìn)行其數(shù)據(jù)類型允許的各種運(yùn)算2.引用結(jié)構(gòu)體變量在某些情況下允許對結(jié)構(gòu)體變量進(jìn)行整體操作3.結(jié)構(gòu)體變量的輸入和輸出C++不允許把一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入和輸出8.2.3結(jié)構(gòu)體變量的引用

對結(jié)構(gòu)體變量的引用,一般情況下是878.2.4結(jié)構(gòu)體數(shù)組

同定義結(jié)構(gòu)體變量相似,定義結(jié)構(gòu)體數(shù)組的方法有以下三種:(1)間接定義。即先定義結(jié)構(gòu)體類型,再用它定義結(jié)構(gòu)體數(shù)組.(2)直接定義。即在定義結(jié)構(gòu)體類型的同時(shí),定義結(jié)構(gòu)體數(shù)組。8.2.4結(jié)構(gòu)體數(shù)組

同定義結(jié)構(gòu)體變量相似,定義結(jié)構(gòu)體數(shù)組的888.3共用體類型

共用體類型,是指幾個(gè)不同(或相同)數(shù)據(jù)類型的數(shù)據(jù)項(xiàng)共同使用同一段內(nèi)存單元的數(shù)據(jù)結(jié)構(gòu)8.3.1共用體類型的定義共用體類型定義的一般形式是:union<共用體名>{<成員類型名1><成員名1>;<成員類型名2><成員名2>;┇┇<成員類型名n><成員名n>;};注意:同結(jié)構(gòu)體類型定義的方法相似,只是將關(guān)鍵字由struct換成了union8.3共用體類型

共用體類型,是指幾個(gè)不同(或相同)數(shù)據(jù)類898.3.2共用體變量的定義

同結(jié)構(gòu)體變量定義的方法相似,共用體變量的定義有直接定義、間接定義和無名定義三種形式。(1)直接定義。(2)間接定義(3)無名定義

8.3.2共用體變量的定義

同結(jié)構(gòu)體變量定義的方法相似,共用908.3.3共用體變量的引用

一般情況下不直接引用共用體變量,而是引用共用體變量的某個(gè)成員。與結(jié)構(gòu)體變量成員的引用一樣,共用體變量成員的引用(假定已經(jīng)執(zhí)行“uniondata1*p=&u;”語句)也有以下三種方式:(1)共用體變量名.成員名,如u.ch或u.i或u.d;(2)(*指針變量名).成員名,如(*p).ch或(*p).i或(*p).d;(3)指針變量名->成員名,如p->ch或p->i或p->d。8.3.3共用體變量的引用

一般情況下不直接引用共用體變量,91說明:(1)共用體變量中,可以包含若干個(gè)成員及若干種類型,但共用體成員不能同時(shí)使用。在每一時(shí)刻,只有一個(gè)成員及一種類型起作用,所以不能同時(shí)引用多個(gè)成員及多種類型。(2)共用體變量中起作用的成員值是最后一次存放的成員值,即共用體變量所有成員共用同一段內(nèi)存單元,后來存放的值將原先存放的值覆蓋,故只能使用最后一次給定的成員值。(3)共用體變量的地址和它的各個(gè)成員的地址相同.(4)不能企圖引用共用體變量名來得到某成員的值(5)共用體類型和結(jié)構(gòu)體類型可以相互嵌套,即結(jié)構(gòu)體可以出現(xiàn)在共用體類型中,共用體類型也可以出現(xiàn)在結(jié)構(gòu)體類型的定義中(6)C++允許在兩個(gè)同類型的共用體變量之間賦值。(7)共用體變量不能作函數(shù)參數(shù),函數(shù)的返回值也不能是共用體類型。說明:(1)共用體變量中,可以包含若干個(gè)成員及若干種類型,但928.3.4共用體類型的特點(diǎn)

共用體類型的特點(diǎn)就是多個(gè)相同數(shù)據(jù)類型或不同數(shù)據(jù)類型的數(shù)據(jù)項(xiàng)共同使用同一段內(nèi)存單元。在內(nèi)存中占用的字節(jié)數(shù)可能不同,但都是從同一地址開始存放,并且在同一時(shí)刻只能存放一個(gè)數(shù)據(jù)項(xiàng)。8.3.4共用體類型的特點(diǎn)

共用體類型的特點(diǎn)就是多個(gè)相同數(shù)據(jù)938.4鏈表

8.4.1鏈表的基本概念

1.鏈表的概念鏈表是由若干同類型結(jié)點(diǎn)用指針鏈接而成的數(shù)據(jù)結(jié)構(gòu)。鏈表由表頭、結(jié)點(diǎn)與鏈尾三部組成。(1)表頭head是指向鏈表的頭指針;(2)結(jié)點(diǎn)是用含有指針的結(jié)構(gòu)體類型node定義的結(jié)構(gòu)體變量。(3)鏈尾是鏈表中指針值為0的結(jié)點(diǎn),用于表示鏈表的結(jié)束。類似于字符串以0作為結(jié)束標(biāo)志。8.4鏈表

8.4.1鏈表的基本概念94鏈表的概念實(shí)例說明將學(xué)生的成績存放在不連續(xù)的內(nèi)存空間中,如學(xué)號為“1001”、“1002”、“1003”的學(xué)生成績依次的存放在首地址為1000、1040、1080的三個(gè)不連續(xù)內(nèi)存空間(每段空間稱為一個(gè)結(jié)點(diǎn)),如圖8-3所示。各學(xué)生結(jié)點(diǎn)用指針鏈接。首結(jié)點(diǎn)地址存放在頭指針head中。當(dāng)要?jiǎng)h除學(xué)生記錄結(jié)點(diǎn)時(shí),如刪除學(xué)號為“1002”學(xué)生結(jié)點(diǎn)時(shí),只要將其前一個(gè)結(jié)點(diǎn)(即學(xué)號為“1001”)的指針改為1080即可,所有數(shù)據(jù)不要作任何移動(dòng)。而當(dāng)要插入一個(gè)新的學(xué)生成績時(shí),只要將新結(jié)點(diǎn)的地址賦給前一個(gè)結(jié)點(diǎn)的指針,將其后一個(gè)結(jié)點(diǎn)的地址賦給新結(jié)點(diǎn)指針即可。所有數(shù)據(jù)不要作任何移動(dòng)。所以用鏈表可解決記錄增刪困難的問題。使記錄的增刪變得較為容易。鏈表的概念實(shí)例說明將學(xué)生的成績存放在不連續(xù)的內(nèi)存空間中,如學(xué)95鏈表圖鏈表圖968.4.2鏈表的基本操作

由于學(xué)生成績管理系統(tǒng)的主要操作是數(shù)據(jù)的輸入、輸出、查詢、插入、刪除等,所以鏈表的主要操作有鏈表的建立、查詢、輸出、刪除等。為方便后面的討論,將結(jié)點(diǎn)內(nèi)數(shù)據(jù)成員簡化為學(xué)號、成績與指針三項(xiàng),簡化后的結(jié)點(diǎn)類型node定義如下:structnode{intno;//學(xué)生學(xué)號intscore;//學(xué)生成績node*next;//指針變量};8.4.2鏈表的基本操作

由于學(xué)生成績管理系統(tǒng)的主要操作是數(shù)97為了用鏈表對學(xué)生成績進(jìn)行錄入、查詢、輸出、插入、刪除等操作,應(yīng)學(xué)會建立鏈表、輸出鏈表、刪除鏈表、查詢指定結(jié)點(diǎn)、刪除指定結(jié)點(diǎn)、插入結(jié)點(diǎn)、建立有序鏈表等鏈表的基本操作。而這些基本操作可以用以下函數(shù)來實(shí)現(xiàn)。(1)建立鏈表函數(shù):node*Create(void)(2)輸出鏈表函數(shù):voidPrint(node*head)(3)刪除鏈表函數(shù):voidDelchain(node*head)(4)刪除指定結(jié)點(diǎn)函數(shù):node*Delete(node*head,intno)(5)插入結(jié)點(diǎn)函數(shù):node*Insert(node*head,node*pn)(6)建立有序鏈表函數(shù):node*create_order()。為了用鏈表對學(xué)生成績進(jìn)行錄入、查詢、輸出、插入、刪除等操作,981.建立無序鏈表函數(shù)Create()建立無序鏈表應(yīng)用函數(shù)node*Create(void)實(shí)現(xiàn),建立無序鏈表的步驟如下。(1)定義三個(gè)node類型的指針變量:node*head,*pn,*pt;head為頭指針變量,用于存放鏈表首結(jié)點(diǎn)的地址,初值為0,表示鏈表初始時(shí)為空。pn為新結(jié)點(diǎn)指針變量,用于存放用new運(yùn)算符動(dòng)態(tài)建立的新結(jié)點(diǎn)地址。pt為尾結(jié)點(diǎn)的指針變量,用于存放鏈表尾結(jié)點(diǎn)地址。(2)新建結(jié)點(diǎn)、輸入學(xué)號與學(xué)生成績。用new運(yùn)算符動(dòng)態(tài)分配新結(jié)點(diǎn)空間,將pn指向該新結(jié)點(diǎn),給新結(jié)點(diǎn)輸入學(xué)號與成績。pn=newnode;cin>>pn->no>>pn->score;1.建立無序鏈表函數(shù)Create()建立無序鏈表應(yīng)用函數(shù)no991.建立無序鏈表函數(shù)Create()(3)將新結(jié)點(diǎn)加入到鏈尾。新結(jié)點(diǎn)加入到鏈尾有鏈表為空與非空兩種情況:①鏈表為空(head為0)。當(dāng)鏈表第一次加入結(jié)點(diǎn)時(shí)鏈表為空,此時(shí)鏈表頭指針head為0,如圖8-4(a)所示。應(yīng)將新結(jié)點(diǎn)的地址1000由pn賦給頭指針head與尾指針pt。即執(zhí)行:head=pn;pt=pn;兩條語句即可將新結(jié)點(diǎn)加入鏈表第一個(gè)結(jié)點(diǎn)處,如圖所示1.建立無序鏈表函數(shù)Create()(3)將新結(jié)點(diǎn)加入到鏈尾1001.建立無序鏈表函數(shù)Create()②鏈表非空。當(dāng)鏈表非空時(shí),應(yīng)將新結(jié)點(diǎn)追加到鏈尾處。只要將新結(jié)點(diǎn)地址1040由pn賦給鏈尾結(jié)點(diǎn)的指針變量pt->next,就可使新結(jié)點(diǎn)連接到鏈尾。再將pn賦給pt,使pt指向新的鏈尾結(jié)點(diǎn)。此項(xiàng)操作只需執(zhí)行:pt->next=pn;pt=pn;兩條語句即可完成,如圖

1.建立無序鏈表函數(shù)Create()②鏈表非空。當(dāng)鏈表非空時(shí)1011.建立無序鏈表函數(shù)Create()鏈表空與非空的兩種情況可用雙選if語句實(shí)現(xiàn)如下:if(head==0)//若鏈表為空{(diào)head=pn;pt=pn;)else//否則鏈表非空{(diào)pt->next=pn;pt=pn;}(4)重復(fù)(2)、(3)兩步,通過循環(huán)不斷向鏈表添加新結(jié)點(diǎn)直到學(xué)號為“-1”為止。(5)將鏈尾結(jié)點(diǎn)指針賦0。(6)返回鏈表頭指針head。1.建立無序鏈表函數(shù)Create()鏈表空與非空的兩種情況可102先寫出上述步驟中的關(guān)鍵語句,然后用循環(huán)結(jié)構(gòu)連接這些關(guān)鍵語句,即可寫出建立無序鏈表函數(shù)如下:node*Create(void){intno;//定義輸入學(xué)生學(xué)號臨時(shí)變量nonode*head,*pn,*pt;//定義鏈表頭指針、新結(jié)點(diǎn)指針、尾指針head、pn、pthead=0;//鏈表頭指針賦0,表示鏈表為空cout<<"產(chǎn)生無序鏈表,請輸入學(xué)生學(xué)號與成績,以-1為結(jié)束:"<<endl;cin>>no;//輸入學(xué)號while(no!=-1)//學(xué)號為-1時(shí)結(jié)束輸入{pn=newnode;//動(dòng)態(tài)分配新結(jié)點(diǎn)內(nèi)存空間,并將結(jié)點(diǎn)地址賦給pnpn->no=no;//輸入學(xué)號cin>>pn->score;//輸入成績先寫出上述步驟中的關(guān)鍵語句,然后用循環(huán)結(jié)構(gòu)連接這些關(guān)鍵語句,103程序接上頁if(head==0)//若鏈表為空{(diào)head=pn;//則將新結(jié)點(diǎn)地址由pn賦給頭指針head與尾指針ptpt=pn;//使新結(jié)點(diǎn)加入到鏈?zhǔn)讅else//否則鏈表非空{(diào)pt->next=pn;//將新結(jié)點(diǎn)地址由pn賦給鏈尾的next指針與尾指針ptpt=pn;//使新結(jié)點(diǎn)加入到鏈尾}cin>>no;//輸入學(xué)號}pt->next=0;//鏈尾指針變量賦0returnhead;//返回鏈表的頭指針}程序接上頁if(head==0)//若鏈表1042.輸出鏈表函數(shù)Print()輸出鏈表中各結(jié)點(diǎn)成績應(yīng)用函數(shù)voidPrint(void)實(shí)現(xiàn)。保留輸出鏈表函數(shù)的步驟如下:(1)函數(shù)必須用形參node*head接收來自主函數(shù)的鏈表頭指針head。(2)定義指針變量node*p=head;將p指向鏈表首結(jié)點(diǎn)。(3)用循環(huán)語句依次輸出每個(gè)結(jié)點(diǎn)的學(xué)號與成績,直到鏈尾(p=0)為止。實(shí)現(xiàn)的語句為:while(p!=0){cout<<p->no<<'\t'<<p->score<<'\n';p=p->next;}2.輸出鏈表函數(shù)Print()輸出鏈表中各結(jié)點(diǎn)成績應(yīng)用函數(shù)105由步驟中的關(guān)鍵語句可編寫輸出鏈表函數(shù)如下:

voidPrint(node*head){node*p=head;cout<<"輸出鏈表中各結(jié)點(diǎn)值:"<<endl;while(p!=0){cout<<p->no<<'\t'<<p->score<<endl;p=p->next;}}由步驟中的關(guān)鍵語句可編寫輸出鏈表函數(shù)如下:

voidPrin106輸出鏈表各結(jié)點(diǎn)數(shù)據(jù)表輸出鏈表各結(jié)點(diǎn)數(shù)據(jù)表1073.刪除鏈表函數(shù)Delchain()

刪除鏈表是指刪除鏈表全部結(jié)點(diǎn),并回收結(jié)點(diǎn)所占用的全部內(nèi)存空間。刪除鏈表用函數(shù)Delchain(node*head)實(shí)現(xiàn),主要操作步驟如下:(1)用形參node*head接受來自主函數(shù)的鏈表頭指針:(2)定義指針變量node*p=head:并使指針變量p指向鏈?zhǔn)?,如圖所示:3.刪除鏈表函數(shù)Delchain()

刪除鏈表是指刪除鏈表全108(3)用循環(huán)語句依次刪除鏈表的各結(jié)點(diǎn)刪除鏈表的函數(shù)如下:voidDelchain(node*head){node*p;p=head;//鏈表頭指針賦給pwhile(head)//當(dāng)鏈表非空時(shí)刪除結(jié)點(diǎn){head=p->next;//將鏈表下一個(gè)結(jié)點(diǎn)指針賦給headdeletep;//刪除鏈表第一個(gè)結(jié)點(diǎn)p=head;//再將頭指針賦給p}}(3)用循環(huán)語句依次刪除鏈表的各結(jié)點(diǎn)刪除鏈表的函數(shù)如下:1094.刪除鏈表上指定結(jié)點(diǎn)函數(shù)Delete()刪除鏈表上指定值結(jié)點(diǎn)用函數(shù)Delete(node*head,intno)實(shí)現(xiàn)。函數(shù)形參應(yīng)有兩個(gè):第一個(gè)為鏈表頭指針head,第二個(gè)為要?jiǎng)h除結(jié)點(diǎn)的學(xué)生學(xué)號no。要?jiǎng)h除鏈表上指定學(xué)號的結(jié)點(diǎn),首先要找到要?jiǎng)h除的結(jié)點(diǎn),然后才能刪除該結(jié)點(diǎn)。刪除結(jié)點(diǎn)可能會遇到三種情況:(1)若鏈表為空,即head為0,則返回空指針。(2)若要?jiǎng)h除的結(jié)點(diǎn)為鏈表首結(jié)點(diǎn),則將該結(jié)點(diǎn)的指針值賦給鏈表頭指針head,然后刪除該結(jié)點(diǎn)即可(3)要?jiǎng)h除的結(jié)點(diǎn)不是鏈表首結(jié)點(diǎn)。4.刪除鏈表上指定結(jié)點(diǎn)函數(shù)Delete()刪除鏈表上指定值結(jié)1105.插入結(jié)點(diǎn)函數(shù)Insert()假設(shè)鏈表各結(jié)點(diǎn)按成績score降序排列,插入結(jié)點(diǎn)后,仍要求按成績score降序排列。在插入函數(shù)Insert(node*head,node*pn)的形參中head為頭指針,pn為指向插入結(jié)點(diǎn)的指針。在插入函數(shù)體中:pc為指向插入點(diǎn)前一個(gè)結(jié)點(diǎn)的指針,pa為指向插入點(diǎn)后一個(gè)結(jié)點(diǎn)的指針,插入結(jié)點(diǎn)有兩種情況:(1)鏈表為空。(2)鏈表非空。5.插入結(jié)點(diǎn)函數(shù)Insert()假設(shè)鏈表各結(jié)點(diǎn)按成績scor1116.建立有序鏈表函數(shù)Creat_Order()向一個(gè)空鏈表中不斷地插入新建立的結(jié)點(diǎn),并使新結(jié)點(diǎn)按序排列,就產(chǎn)生一條有序鏈表。建立一條有序鏈表的過程可分為兩步:首先建立一個(gè)新結(jié)點(diǎn),其次將新結(jié)點(diǎn)插入到鏈表中。函數(shù)如下:node*Create_Order(void){node*pn,*head=0;//定義指向新結(jié)點(diǎn)的指針變量pn及鏈表頭指針headintno;//定義輸入學(xué)生學(xué)號的臨時(shí)變量n。cout<<"產(chǎn)生一條有序鏈表,請輸入學(xué)生學(xué)號與成績,以-1結(jié)束!\n";cin>>no;while(no!=-1)//學(xué)號不等于-1則循環(huán){pn=newnode;//動(dòng)態(tài)分配node類型結(jié)點(diǎn)空間,并將其地址賦給pnpn->no=no;//給新結(jié)點(diǎn)輸入學(xué)號與成績cin>>pn->score;head=Insert(head,pn);//調(diào)用結(jié)點(diǎn)插入函數(shù),將新結(jié)點(diǎn)按成績降序插入鏈表cin>>no;//輸入學(xué)號}returnhead;//返回鏈表頭指針}6.建立有序鏈表函數(shù)Creat_Order()向一個(gè)空鏈表中1127.完成鏈表處理的主程序#inclu

溫馨提示

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

評論

0/150

提交評論