![第8章自義數(shù)據(jù)類型ppt課件_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/30/585f6ee4-4847-4edd-9e07-39e125f00c8e/585f6ee4-4847-4edd-9e07-39e125f00c8e1.gif)
![第8章自義數(shù)據(jù)類型ppt課件_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/30/585f6ee4-4847-4edd-9e07-39e125f00c8e/585f6ee4-4847-4edd-9e07-39e125f00c8e2.gif)
![第8章自義數(shù)據(jù)類型ppt課件_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/30/585f6ee4-4847-4edd-9e07-39e125f00c8e/585f6ee4-4847-4edd-9e07-39e125f00c8e3.gif)
![第8章自義數(shù)據(jù)類型ppt課件_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/30/585f6ee4-4847-4edd-9e07-39e125f00c8e/585f6ee4-4847-4edd-9e07-39e125f00c8e4.gif)
![第8章自義數(shù)據(jù)類型ppt課件_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/30/585f6ee4-4847-4edd-9e07-39e125f00c8e/585f6ee4-4847-4edd-9e07-39e125f00c8e5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第8章 自定義數(shù)據(jù)類型2第8章 自定義數(shù)據(jù)類型數(shù)組是一種數(shù)據(jù)形式,其特點(diǎn)是多個(gè)相同類型元素集合起來(lái);結(jié)構(gòu)體是另一種重要的數(shù)據(jù)形式,其特點(diǎn)是不同類型成員組合起來(lái)。38.1 結(jié)構(gòu)體類型結(jié)構(gòu)體允許將不同類型的數(shù)據(jù)元素組合在一起形成一種新的數(shù)據(jù)類型,其聲明形式為:struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 成員列表成員列表;48.1 結(jié)構(gòu)體類型struct STUDENT /學(xué)生信息類型學(xué)生信息類型 int no; /聲明一個(gè)整型數(shù)據(jù)成員表示學(xué)號(hào)聲明一個(gè)整型數(shù)據(jù)成員表示學(xué)號(hào) char name21; /聲明一個(gè)字符串?dāng)?shù)據(jù)成員表示姓名聲明一個(gè)字符串?dāng)?shù)據(jù)成員表示姓名 char sex; /聲明一個(gè)字符數(shù)據(jù)成
2、員表示性別聲明一個(gè)字符數(shù)據(jù)成員表示性別 int age; /聲明一個(gè)整型數(shù)據(jù)成員年齡聲明一個(gè)整型數(shù)據(jù)成員年齡 char 11; /聲明一個(gè)字符串?dāng)?shù)據(jù)成員表示聲明一個(gè)字符串?dāng)?shù)據(jù)成員表示QQ號(hào)號(hào) double score; /聲明一個(gè)浮點(diǎn)型數(shù)據(jù)成員表示成績(jī)聲明一個(gè)浮點(diǎn)型數(shù)據(jù)成員表示成績(jī);例如可以通過(guò)如下聲明建立能表示學(xué)生信息的數(shù)據(jù)類型。58.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型聲明一般放在程序文件開頭,此時(shí)這個(gè)聲明是全局的。在全局作用域內(nèi),該聲明處處可見,因此同作用域內(nèi)的所有函數(shù)都可以使用它。結(jié)構(gòu)體類型聲明也可以放到函數(shù)內(nèi)部,此時(shí)這個(gè)聲明是局部的。若在函數(shù)內(nèi)部有同名的結(jié)構(gòu)體類型聲明,則全局聲明在該函數(shù)內(nèi)部是無(wú)
3、效的,有效的是局部聲明的。68.1 結(jié)構(gòu)體類型(1結(jié)構(gòu)體類型和普通數(shù)據(jù)類型如int、char、double等一樣是類型名稱,而不是該類型的一個(gè)實(shí)體,因此不會(huì)為結(jié)構(gòu)體類型分配存儲(chǔ)空間。(2結(jié)構(gòu)體類型聲明時(shí)成員可以又是是結(jié)構(gòu)體類型。struct DATA int year,month,day; ;78.1 結(jié)構(gòu)體類型(3C語(yǔ)言的結(jié)構(gòu)體類型只能用“struct 結(jié)構(gòu)體類型名表示,如“struct STUDENT”。C+兼容C語(yǔ)言的結(jié)構(gòu)體類型,既可以用C語(yǔ)言方式,又可以直接用“結(jié)構(gòu)體類型名表示,如“STUDENT”。建議C+程序員使用后一種方式。88.2 結(jié)構(gòu)體對(duì)象定義結(jié)構(gòu)體對(duì)象稱為結(jié)構(gòu)體類型實(shí)例化i
4、nstance),實(shí)例化會(huì)根據(jù)數(shù)據(jù)類型為結(jié)構(gòu)體對(duì)象分配內(nèi)存單元。98.2.1 結(jié)構(gòu)體對(duì)象的定義定義結(jié)構(gòu)體對(duì)象有三種形式。1先聲明結(jié)構(gòu)體類型再定義對(duì)象結(jié)構(gòu)體類型名 結(jié)構(gòu)體對(duì)象名列表; /C+方式struct 結(jié)構(gòu)體類型名 結(jié)構(gòu)體對(duì)象名列表; /兼容的C語(yǔ)言方式STUDENT a,b; /C+方式定義結(jié)構(gòu)體對(duì)象方式定義結(jié)構(gòu)體對(duì)象struct STUDENT x,y; /C語(yǔ)言方式定義結(jié)構(gòu)體對(duì)象語(yǔ)言方式定義結(jié)構(gòu)體對(duì)象108.2.1 結(jié)構(gòu)體對(duì)象的定義2聲明結(jié)構(gòu)體類型的同時(shí)定義對(duì)象一般形式為:struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 成員列表成員列表 結(jié)構(gòu)體對(duì)象名列表結(jié)構(gòu)體對(duì)象名列表;struct DAT
5、E /日期類型日期類型 int year,month,day; /年,月,日年,月,日 整型整型 d1,d2; /定義結(jié)構(gòu)體對(duì)象定義結(jié)構(gòu)體對(duì)象118.2.1 結(jié)構(gòu)體對(duì)象的定義3結(jié)構(gòu)體對(duì)象的內(nèi)存形式實(shí)例化結(jié)構(gòu)體對(duì)象后,對(duì)象會(huì)得到存儲(chǔ)空間。128.2.1 結(jié)構(gòu)體對(duì)象的定義圖8.1 結(jié)構(gòu)體對(duì)象的內(nèi)存結(jié)構(gòu)struct STUDENT /學(xué)生信息類型學(xué)生信息類型 int no; /聲明一個(gè)整型數(shù)據(jù)成員表示學(xué)號(hào)聲明一個(gè)整型數(shù)據(jù)成員表示學(xué)號(hào) char name21; /聲明一個(gè)字符串?dāng)?shù)據(jù)成員表示姓名聲明一個(gè)字符串?dāng)?shù)據(jù)成員表示姓名 char sex; /聲明一個(gè)字符數(shù)據(jù)成員表示性別聲明一個(gè)字符數(shù)據(jù)成員表示性別
6、 int age; /聲明一個(gè)整型數(shù)據(jù)成員年齡聲明一個(gè)整型數(shù)據(jù)成員年齡 char 11; /聲明一個(gè)字符串?dāng)?shù)據(jù)成員表示聲明一個(gè)字符串?dāng)?shù)據(jù)成員表示QQ號(hào)號(hào) double score; /聲明一個(gè)浮點(diǎn)型數(shù)據(jù)成員表示成績(jī)聲明一個(gè)浮點(diǎn)型數(shù)據(jù)成員表示成績(jī);138.2.2 結(jié)構(gòu)體對(duì)象的初始化STAFF s1=1001,“Li Min”,M,1980,10,6,2700.0;STAFF s2=1002,Ma Gang,M,1978,3,22,3100.0;struct STAFF /職員信息類型職員信息類型 int no; /工號(hào),整型工號(hào),整型 char name21; /姓名,字符串姓名,字符串 cha
7、r sex; /性別,字符型性別,字符型 DATA birthday; /出生日期,結(jié)構(gòu)體類型出生日期,結(jié)構(gòu)體類型 double salary; /薪水,浮點(diǎn)型薪水,浮點(diǎn)型;可以在結(jié)構(gòu)體對(duì)象定義時(shí)進(jìn)行初始化。148.2.3 結(jié)構(gòu)體對(duì)象的使用1結(jié)構(gòu)體對(duì)象成員引用使用結(jié)構(gòu)體對(duì)象主要是引用它的成員,其一般形式為:結(jié)構(gòu)體對(duì)象名結(jié)構(gòu)體對(duì)象名.成員名成員名158.2.3 結(jié)構(gòu)體對(duì)象的使用表8-1 對(duì)象成員引用運(yùn)算符運(yùn)算符運(yùn)算符功能功能目目結(jié)合性結(jié)合性用法用法對(duì)象成員引用運(yùn)算對(duì)象成員引用運(yùn)算 雙目雙目自左向右自左向右object.memberSTAFF a,b;a.no=10002; /將將10002賦值給
8、賦值給a對(duì)象中的對(duì)象中的no成員成員b.salary=a.salary+500.0; /在表達(dá)式中可以引用對(duì)象成員在表達(dá)式中可以引用對(duì)象成員a.no+; /按優(yōu)先級(jí)等價(jià)于按優(yōu)先級(jí)等價(jià)于(a.no)+168.2.3 結(jié)構(gòu)體對(duì)象的使用如果成員本身又是一個(gè)結(jié)構(gòu)體對(duì)象,就要用成員引用運(yùn)算符,一級(jí)一級(jí)地引用。例如:STAFF x;x.birthday.year=1990,x.birthday.month=5,x.birthday.day=12; /逐級(jí)引用成員逐級(jí)引用成員178.2.3 結(jié)構(gòu)體對(duì)象的使用2結(jié)構(gòu)體對(duì)象輸入與輸出不能將一個(gè)結(jié)構(gòu)體對(duì)象作為整體進(jìn)行輸入或輸出,只能對(duì)結(jié)構(gòu)體對(duì)象中的成員逐個(gè)進(jìn)行輸入
9、或輸出。例如:STAFF x;cinx.nox.sexx.salary; cinx.birthday.yearx.birthday.monthx.birthday.day;; 188.2.3 結(jié)構(gòu)體對(duì)象的使用3結(jié)構(gòu)體對(duì)象的運(yùn)算結(jié)構(gòu)體對(duì)象可以進(jìn)行賦值運(yùn)算,但不能對(duì)進(jìn)行算術(shù)運(yùn)算、關(guān)系運(yùn)算等,例如:COMPLEX m,n,k;m=n; /正確,結(jié)構(gòu)體對(duì)象允許賦值正確,結(jié)構(gòu)體對(duì)象允許賦值k=m+n; /錯(cuò)誤,結(jié)構(gòu)體對(duì)象不能做算術(shù)運(yùn)算錯(cuò)誤,結(jié)構(gòu)體對(duì)象不能做算術(shù)運(yùn)算mn; /錯(cuò)誤,結(jié)構(gòu)體對(duì)象不能做關(guān)系運(yùn)算錯(cuò)誤,結(jié)構(gòu)體對(duì)象不能做關(guān)系運(yùn)算回憶:19struct STAFF int no; c
10、har name21; char sex; DATA birthday; double salary; ;STAFF a,b;a.no=1101;b.birthdat.year=1988;a=b;sum=a.salary+b.salary;struct DATE int year,month,day; ; 定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體對(duì)象結(jié)構(gòu)體對(duì)象的內(nèi)存形式結(jié)構(gòu)體對(duì)象成員的引用結(jié)構(gòu)體對(duì)象的輸入輸出結(jié)構(gòu)體對(duì)象的運(yùn)算208.3 結(jié)構(gòu)體與數(shù)組數(shù)組元素可以是結(jié)構(gòu)體對(duì)象。218.3.1 結(jié)構(gòu)體數(shù)組數(shù)組元素可以是結(jié)構(gòu)體類型,稱為結(jié)構(gòu)體數(shù)組,如一維結(jié)構(gòu)體數(shù)組定義形式為:struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 結(jié)
11、構(gòu)體數(shù)組名結(jié)構(gòu)體數(shù)組名常量表達(dá)式常量表達(dá)式;例如表示平面上若干個(gè)點(diǎn)的數(shù)據(jù)對(duì)象,可以這樣定義:struct POINT /點(diǎn)類型點(diǎn)類型 int x,y; /平面上點(diǎn)的平面上點(diǎn)的x、y坐標(biāo)坐標(biāo);POINT points100; /表示表示100個(gè)點(diǎn)的數(shù)據(jù)對(duì)象個(gè)點(diǎn)的數(shù)據(jù)對(duì)象228.3.1 結(jié)構(gòu)體數(shù)組一維結(jié)構(gòu)體數(shù)組初始化形式為:其中初值序列必須按內(nèi)存形式做到類型、次序一一對(duì)應(yīng)。struct 結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名 結(jié)構(gòu)體數(shù)組名結(jié)構(gòu)體數(shù)組名常量表達(dá)式常量表達(dá)式 =初初值序列值序列;238.3.1 結(jié)構(gòu)體數(shù)組例如:初值寫法中除最外面的一對(duì)大括號(hào)外,其他大括號(hào)可以省略。例如:struct RECT /矩形
12、框類型矩形框類型 int left,top,right,bottom;RECT rects3=1,1,10,10, 5,5,25,32,100,100,105,200;RECT _rect3=1,1,10,10,5,5,25,32, 100,100,105,200;248.3.1 結(jié)構(gòu)體數(shù)組引用結(jié)構(gòu)體數(shù)組成員需要將數(shù)組下標(biāo)運(yùn)算、對(duì)象成員引用運(yùn)算結(jié)合起來(lái)操作,其一般形式為:數(shù)組對(duì)象數(shù)組對(duì)象下標(biāo)表達(dá)式下標(biāo)表達(dá)式.成員名成員名r0.left=10;/數(shù)組對(duì)象數(shù)組對(duì)象下標(biāo)表達(dá)式下標(biāo)表達(dá)式是結(jié)構(gòu)體對(duì)象是結(jié)構(gòu)體對(duì)象258.3.2 結(jié)構(gòu)體數(shù)組成員結(jié)構(gòu)體類型中可以包含數(shù)組成員,數(shù)組成員類型既可以是基本數(shù)據(jù)類型
13、又可以是指針類型或結(jié)構(gòu)體類型,例如表示平面三角形的數(shù)據(jù)對(duì)象,可以這樣定義:struct TRIANGLE /三角形類型三角形類型 POINT p3;/由由3個(gè)平面上的點(diǎn)描述三角形個(gè)平面上的點(diǎn)描述三角形;268.3.2 結(jié)構(gòu)體數(shù)組成員引用結(jié)構(gòu)體數(shù)組成員需要將對(duì)象成員引用運(yùn)算、數(shù)組下標(biāo)運(yùn)算結(jié)合起來(lái)操作,其一般形式為:結(jié)構(gòu)體對(duì)象結(jié)構(gòu)體對(duì)象.數(shù)組成員數(shù)組成員下標(biāo)表達(dá)式下標(biāo)表達(dá)式struct TRIANGLE tri;tri.p0.x=10,tri.p0.y=10;/結(jié)構(gòu)體對(duì)象結(jié)構(gòu)體對(duì)象.數(shù)組成員數(shù)組成員下標(biāo)表達(dá)式下標(biāo)表達(dá)式.成員名成員名278.3.2 結(jié)構(gòu)體數(shù)組成員例8.1 輸入20個(gè)學(xué)生信息,按成績(jī)
14、遞減排序;成績(jī)相同時(shí),按學(xué)號(hào)遞增排序。 1 #include 2 using namespace std; 3 #define N 20 4 struct tagSTUDENT /學(xué)生信息類型 5 int no; /學(xué)號(hào) 6 char name21; /姓名 7 double score; /成果 8 ;288.3.2 結(jié)構(gòu)體數(shù)組成員例8.1 9 int main() 10 11 struct tagSTUDENT AN , t; 12 int i , j=2.0; /消除浮點(diǎn)型bug 13 for (i=0; iAi.noAAi.score; 15 for (i=0; iN-1;
15、 i+) /排序 16 for (j=i; jN; j+) 17 if (Ai.scoreAj.no) 19 t=Ai, Ai=Aj, Aj=t; 298.3.2 結(jié)構(gòu)體數(shù)組成員例8.1 20 for (i=0; iN; i+) /輸出學(xué)生信息 21 coutAi.no,A ,Ai.score成員名。348.4.1 指向結(jié)構(gòu)體的指針表8-2 指針成員引用運(yùn)算符運(yùn)算符運(yùn)算符功能功能目目結(jié)合性結(jié)合性用法用法-指針成員引指針成員引用運(yùn)算用運(yùn)算雙目雙目 自左向右自左向右pointer-memberp-no=10002; /將將10002賦值給對(duì)象中的賦值給對(duì)象中的no成員,指針成成員,指針
16、成員引用運(yùn)算結(jié)果是左值即成員本身)員引用運(yùn)算結(jié)果是左值即成員本身)p-salary=p-salary+500.0; /在表達(dá)式中引用指針指向的在表達(dá)式中引用指針指向的成員成員p-no+; /按優(yōu)先級(jí)等價(jià)于按優(yōu)先級(jí)等價(jià)于(p-no)+358.4.1 指向結(jié)構(gòu)體的指針(1指針成員引用運(yùn)算符(-)左邊運(yùn)算對(duì)象必須是指向結(jié)構(gòu)體對(duì)象的指針,右邊member必須是結(jié)構(gòu)體對(duì)象中的成員名。其引用形式為:結(jié)構(gòu)體指針結(jié)構(gòu)體指針-成員名成員名368.4.1 指向結(jié)構(gòu)體的指針(2如果成員本身又是一個(gè)結(jié)構(gòu)體對(duì)象指針,就要用指針成員引用運(yùn)算符一級(jí)一級(jí)地引用成員。例如:DATE d=1981,1,1;TEACHER /教師
17、信息類型教師信息類型 int no; /工號(hào)工號(hào) char name21; /姓名姓名 DATE *pbirthday; /出生日期出生日期 a=1001,Li Min,&d, *p=&a;p-no=10001; /通過(guò)指針通過(guò)指針p引用引用a的的no成員成員p-pbirthday-year=2019; /通過(guò)指針通過(guò)指針p-pbirthday引引用用d的的year成員成員378.5 結(jié)構(gòu)體與函數(shù)將結(jié)構(gòu)體對(duì)象作為函數(shù)實(shí)參傳遞到函數(shù)中,采用值傳遞方式。例如:struct DATA int data; /整型成員整型成員 char name10; /數(shù)組成員數(shù)組成員;void fu
18、n1(DATA x); /函數(shù)原型函數(shù)原型void fun2() DATA a=1,LiMin; fun1(a); /函數(shù)調(diào)用函數(shù)調(diào)用388.5.2 結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)將結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù),采用地址傳遞方式。函數(shù)調(diào)用實(shí)參是數(shù)組名,形參必須是同類型的結(jié)構(gòu)體數(shù)組。例如:采用地址傳遞方式,形參數(shù)組的首地址與實(shí)參數(shù)組完全相同。void fun3(DATA X); /函數(shù)原型函數(shù)原型void fun4() DATA A3=1,LiMin,2,MaGang,3,ZhangKun; fun3(A); /函數(shù)調(diào)用函數(shù)調(diào)用398.5.3 結(jié)構(gòu)體指針或引用作為函數(shù)參數(shù)將結(jié)構(gòu)體指針作為函數(shù)參數(shù),采用地址傳遞
19、方式。例如:void fun5(DATA *p); /函數(shù)原型函數(shù)原型void fun6() DATA a=1,LiMin; fun3(&a); /函數(shù)調(diào)用函數(shù)調(diào)用408.5.4 函數(shù)返回結(jié)構(gòu)體對(duì)象、指針或引用函數(shù)的返回類型可以是結(jié)構(gòu)體類型,這時(shí)函數(shù)將返回一個(gè)結(jié)構(gòu)體對(duì)象。例如:DATA fun8() DATA a=1,LiMin; return a; /返回結(jié)構(gòu)體對(duì)象,復(fù)制到臨時(shí)對(duì)象中返回結(jié)構(gòu)體對(duì)象,復(fù)制到臨時(shí)對(duì)象中void fun9() DATA b; b=fun8(); /函數(shù)返回結(jié)構(gòu)體對(duì)象,并且賦值函數(shù)返回結(jié)構(gòu)體對(duì)象,并且賦值418.10 鏈表鏈表是一種存儲(chǔ)空間能動(dòng)態(tài)進(jìn)行增長(zhǎng)或縮
20、小的數(shù)據(jù)結(jié)構(gòu)。鏈表廣泛地運(yùn)用于數(shù)據(jù)管理中。428.10.1 鏈表的概念首先設(shè)計(jì)一種稱為結(jié)點(diǎn)node的數(shù)據(jù)類型:這個(gè)結(jié)構(gòu)體類型中,data成員表示數(shù)據(jù)域,代表結(jié)點(diǎn)的數(shù)據(jù)信息。struct NODE /結(jié)點(diǎn)數(shù)據(jù)類型結(jié)點(diǎn)數(shù)據(jù)類型 ElemType data; /數(shù)據(jù)域數(shù)據(jù)域 NODE *link; /指針域指針域;438.10.1 鏈表的概念圖8.7 鏈表結(jié)構(gòu)link成員表示指針域,存放另一個(gè)結(jié)點(diǎn)的地址,是鏈表中的組織者。通常,鏈表包含創(chuàng)建、遍歷、插入、刪除等運(yùn)算。448.10.2 單鏈表與雙鏈表1單鏈表單鏈表每個(gè)結(jié)點(diǎn)包含一個(gè)指向直接后繼結(jié)點(diǎn)的指針域,其形式為:next指向直接后繼結(jié)點(diǎn),由它構(gòu)成了一
21、條鏈。struct LNode /單鏈表結(jié)點(diǎn)類型單鏈表結(jié)點(diǎn)類型 int data; /數(shù)據(jù)域數(shù)據(jù)域 LNode *next; /指針域:指向直接后繼結(jié)點(diǎn)指針域:指向直接后繼結(jié)點(diǎn);typedef LNode* LinkList; /LNode為單鏈表結(jié)構(gòu)體類型,為單鏈表結(jié)構(gòu)體類型,LinkList為單鏈表指針類型為單鏈表指針類型458.10.2 單鏈表與雙鏈表圖8.8 單鏈表結(jié)構(gòu)指針L指向單鏈表頭結(jié)點(diǎn),頭結(jié)點(diǎn)指向開始結(jié)點(diǎn),開始結(jié)點(diǎn)又指向下一個(gè)結(jié)點(diǎn),直到最后一個(gè)尾結(jié)點(diǎn)。尾結(jié)點(diǎn)的next為0,表示NULL指針,約定單鏈表的結(jié)點(diǎn)的next為0時(shí)表示尾結(jié)點(diǎn)。468.10.3 創(chuàng)建與銷毀鏈表通過(guò)第7章介紹
22、的內(nèi)存動(dòng)態(tài)分配技術(shù)可以產(chǎn)生新結(jié)點(diǎn)的內(nèi)存單元,例如:LinkList p; /鏈表指針鏈表指針p=new LNode;/分配分配LNode類型內(nèi)存單元且將地址保存到類型內(nèi)存單元且將地址保存到p中中478.10.3 創(chuàng)建與銷毀鏈表創(chuàng)建鏈表常用兩種方法:頭插法和尾插法。(1頭插法建立鏈表CreateLinkF(&L,n,input()步驟:創(chuàng)建頭結(jié)點(diǎn)*L,設(shè)置*L的next為0。動(dòng)態(tài)分配一個(gè)結(jié)點(diǎn)s,輸入s的數(shù)據(jù)域。將s插入到開始結(jié)點(diǎn)之前,頭結(jié)點(diǎn)之后,即: s-next=p-next,p-next=s。反復(fù)步驟加入更多結(jié)點(diǎn)。488.10.3 創(chuàng)建與銷毀鏈表采用頭插法創(chuàng)建單鏈表的算法如下: 1
23、void CreateLinkF(LinkList *L,int n) 2 /頭插法創(chuàng)建單鏈表,調(diào)用input輸入函數(shù)輸入數(shù)據(jù) 3 LinkList s; 4 *L=new LNode;/創(chuàng)建頭結(jié)點(diǎn) 5 (*L)-next=NULL; /初始時(shí)為空表 6 for (; n0; n-) /創(chuàng)建n個(gè)結(jié)點(diǎn)鏈表 7 s=new LNode; /創(chuàng)建新結(jié)點(diǎn) 8 cins-data; 9 s-next=(*L)-next; 10 (*L)-next=s; /頭結(jié)點(diǎn)之后 11 12 498.10.3 創(chuàng)建與銷毀鏈表圖8.11 頭插法建立的單鏈表L運(yùn)行時(shí)若輸入5個(gè)元素:1、2、3、4、5,則調(diào)用建立的單鏈表如
24、圖所示。LinkList L;CreateLinkF(&L,5); /創(chuàng)建單鏈表創(chuàng)建單鏈表L508.10.3 創(chuàng)建與銷毀鏈表(2銷毀鏈表DestroyList(&L)將鏈表所占用的所有內(nèi)存釋放掉,即銷毀鏈表。銷毀鏈表的步驟如下:假設(shè)*L為0,表示已到鏈尾,銷毀鏈表結(jié)束。令指針p指向結(jié)點(diǎn)*L的next,釋放內(nèi)存*L。*L置換為p,即*L指向直接后繼結(jié)點(diǎn),反復(fù)步驟直至銷毀鏈表結(jié)束。518.10.3 創(chuàng)建與銷毀鏈表應(yīng)用遍歷算法銷毀鏈表的算法如下: 1 void DestroyList(LinkList *L) /銷毀單鏈表L 2 3 LinkList q,p=*L;/p指向頭結(jié)點(diǎn) 4
25、 while(p!=NULL) /若不是鏈尾繼續(xù) 5 q=p-next; /指向直接后繼結(jié)點(diǎn) 6 delete p; /釋放結(jié)點(diǎn)存儲(chǔ)空間 7 p=q; /直接后繼結(jié)點(diǎn) 8 9 *L=NULL;/置為空表 10 528.10.4 鏈表的運(yùn)算(1鏈表遍歷鏈表的輸出、銷毀、查找和逆序等運(yùn)算都需要遍歷鏈表。鏈表遍歷算法的實(shí)現(xiàn)步驟為:令指針p指向L的開始結(jié)點(diǎn)。若p為0,表示已到鏈尾,遍歷結(jié)束。令p指向直接后繼結(jié)點(diǎn),即p=p-next。反復(fù)步驟直至遍歷結(jié)束。538.10.4 鏈表的運(yùn)算鏈表遍歷的算法如下:其中visit是函數(shù)指針。當(dāng)調(diào)用ListTraverse遍歷結(jié)點(diǎn)時(shí),通過(guò)調(diào)用visit()對(duì)每個(gè)結(jié)點(diǎn)完
26、成定制的操作。 1 void ListTraverse(LinkList L, void(*visit)(ElemType*) 2 /遍歷L中的每個(gè)元素且調(diào)用函數(shù)visit訪問(wèn)它 3 LinkList p=L-next; /p指向開始結(jié)點(diǎn) 4 while(p!=NULL) /若不是鏈尾繼續(xù) 5 visit(&(p-data); 6 p=p-next; /p指向直接后繼結(jié)點(diǎn) 7 8 548.10.4 鏈表的運(yùn)算(2輸出鏈表設(shè)計(jì)遍歷結(jié)點(diǎn)時(shí)的visit函數(shù):調(diào)用ListTraverse(L,visit)時(shí)掃描鏈表中的每個(gè)結(jié)點(diǎn),并調(diào)用visit()輸出結(jié)點(diǎn)的數(shù)據(jù)域。 1 void visit(ElemType *ep) /實(shí)現(xiàn)鏈表遍歷時(shí)結(jié)點(diǎn)訪問(wèn)的定制函數(shù) 2 /在函數(shù)中對(duì)結(jié)點(diǎn)*ep實(shí)現(xiàn)定制的操作,例如輸出 3 cout*epne
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度物流倉(cāng)儲(chǔ)安全保證金合同
- 2025年度美食街特色餐飲品牌租賃合同
- 剎車材料公司人力資源管理手冊(cè)
- 2025年度股東致行動(dòng)協(xié)議書:新能源儲(chǔ)能項(xiàng)目股權(quán)投資與技術(shù)研發(fā)協(xié)議
- 二零二五年度閣樓產(chǎn)權(quán)置換與買賣協(xié)議
- 二零二五年度新能源車輛充電樁獨(dú)家招商代理協(xié)議
- 中國(guó)車載泵行業(yè)市場(chǎng)深度分析及投資策略研究報(bào)告
- 二零二五年度白酒行業(yè)技術(shù)交流與合作研發(fā)合同集合
- 橡膠制品裝卸搬運(yùn)合同
- 二年級(jí)數(shù)學(xué)兩位數(shù)加兩位數(shù)計(jì)算題綜合監(jiān)控習(xí)題帶答案
- 部編版初中語(yǔ)文7-9年級(jí)教材必背古詩(shī)詞、古文99篇詳細(xì)解析及欣賞
- 保障性住房補(bǔ)貼委托書范本
- DB36T 1393-2021 生產(chǎn)安全風(fēng)險(xiǎn)分級(jí)管控體系建設(shè)通則
- 檔案三合一制度培訓(xùn)
- 公益捐助活動(dòng)影響力評(píng)估方法
- 國(guó)家電網(wǎng)安全培訓(xùn)
- Unit 1 I go to school by bus. Period 4(說(shuō)課稿)-2023-2024學(xué)年教科版(廣州)英語(yǔ)二年級(jí)下冊(cè)
- 《市場(chǎng)營(yíng)銷學(xué)》講稿
- 《中醫(yī)養(yǎng)生學(xué)》課件
- 學(xué)校安全隱患報(bào)告和舉報(bào)獎(jiǎng)懲制度
- 福建師范大學(xué)《廣告作品賞析》2022-2023學(xué)年第一學(xué)期期末試卷
評(píng)論
0/150
提交評(píng)論