fortran指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)_第1頁(yè)
fortran指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)_第2頁(yè)
fortran指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)_第3頁(yè)
fortran指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)_第4頁(yè)
fortran指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)11.1 11.1 概述概述/ /概述概述l靜態(tài)數(shù)據(jù)結(jié)構(gòu)靜態(tài)數(shù)據(jù)結(jié)構(gòu): :在編譯時(shí)為其分配存儲(chǔ)空間在編譯時(shí)為其分配存儲(chǔ)空間, ,大小不能改變。大小不能改變。l靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn): :分配算法簡(jiǎn)單分配算法簡(jiǎn)單, ,易于實(shí)現(xiàn)易于實(shí)現(xiàn), ,使用方便。使用方便。l靜態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn)靜態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn): :易浪費(fèi)存儲(chǔ)空間易浪費(fèi)存儲(chǔ)空間, ,易產(chǎn)生下標(biāo)越界錯(cuò)誤。易產(chǎn)生下標(biāo)越界錯(cuò)誤。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu): :在運(yùn)行時(shí)為其分配存儲(chǔ)空間在運(yùn)行時(shí)為其分配存儲(chǔ)空間, ,大小可改變。大小可改變

2、。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn): :可節(jié)約存儲(chǔ)空間,靈活,應(yīng)用廣??晒?jié)約存儲(chǔ)空間,靈活,應(yīng)用廣。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn): :分配算法復(fù)雜分配算法復(fù)雜, ,實(shí)現(xiàn)難度大。實(shí)現(xiàn)難度大。 象象鏈表鏈表、樹(shù)結(jié)構(gòu)樹(shù)結(jié)構(gòu)、圖結(jié)構(gòu)圖結(jié)構(gòu)等數(shù)據(jù)結(jié)構(gòu)都適合用動(dòng)態(tài)數(shù)據(jù)等數(shù)據(jù)結(jié)構(gòu)都適合用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。 指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和靈活應(yīng)用指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)求解問(wèn)題,可使程序更加簡(jiǎn)潔、靈活應(yīng)用指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)求解問(wèn)題,可使程序更加簡(jiǎn)潔、緊湊、高效。緊湊

3、、高效。11.1 概述第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問(wèn)方式訪問(wèn)方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)11.1 11.1 概述概述/ /概述概述/ /動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)示例動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)示例l靜態(tài)數(shù)據(jù)結(jié)構(gòu)靜態(tài)數(shù)據(jù)結(jié)構(gòu): :在編譯時(shí)為其分配存儲(chǔ)空間在編譯時(shí)為其分配存儲(chǔ)空間, ,大小不能改變。大小不能改變。l靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn): :分配算法簡(jiǎn)單分配算法簡(jiǎn)單, ,易于實(shí)現(xiàn)易于實(shí)現(xiàn), ,使用方便。使用方便。l靜態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn)靜態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn): :易浪費(fèi)存儲(chǔ)空間易浪費(fèi)存儲(chǔ)空間, ,易產(chǎn)生下標(biāo)越界錯(cuò)誤。易產(chǎn)生下標(biāo)越界錯(cuò)誤。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu): :

4、在運(yùn)行時(shí)為其分配存儲(chǔ)空間在運(yùn)行時(shí)為其分配存儲(chǔ)空間, ,大小可改變。大小可改變。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn): :可節(jié)約存儲(chǔ)空間,靈活,應(yīng)用廣。可節(jié)約存儲(chǔ)空間,靈活,應(yīng)用廣。l動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn): :分配算法復(fù)雜分配算法復(fù)雜, ,實(shí)現(xiàn)難度大。實(shí)現(xiàn)難度大。 象象鏈表、樹(shù)結(jié)構(gòu)、圖結(jié)構(gòu)鏈表、樹(shù)結(jié)構(gòu)、圖結(jié)構(gòu)等數(shù)據(jù)結(jié)構(gòu)都適合用動(dòng)態(tài)數(shù)據(jù)等數(shù)據(jù)結(jié)構(gòu)都適合用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。 指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和靈活應(yīng)用指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)求解問(wèn)題,可使程序

5、更加簡(jiǎn)潔、靈活應(yīng)用指針和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)求解問(wèn)題,可使程序更加簡(jiǎn)潔、緊湊、高效。緊湊、高效。11.1 概述a a1 1a a2 2a an n 鏈表鏈表樹(shù)結(jié)構(gòu)樹(shù)結(jié)構(gòu)圖結(jié)構(gòu)圖結(jié)構(gòu)概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問(wèn)方式訪問(wèn)方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)11.1 11.1 概述概述/ /存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)l存儲(chǔ)單元地址存儲(chǔ)單元地址: :存儲(chǔ)單元在內(nèi)存中的排列序號(hào)(編號(hào))。存儲(chǔ)單元在內(nèi)存中的排列序號(hào)(編號(hào))。l存儲(chǔ)分配存儲(chǔ)分配: :系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針?lè)峙溥B續(xù)存儲(chǔ)系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針?lè)峙溥B續(xù)存儲(chǔ)單元,用于存儲(chǔ)有關(guān)數(shù)據(jù),其變量名、數(shù)組名

6、、結(jié)構(gòu)體名、單元,用于存儲(chǔ)有關(guān)數(shù)據(jù),其變量名、數(shù)組名、結(jié)構(gòu)體名、指針名代表連續(xù)存儲(chǔ)單元指針名代表連續(xù)存儲(chǔ)單元首地址首地址。l指針變量(指針)指針變量(指針): :為其分配的存儲(chǔ)單元用于保存其它變量、為其分配的存儲(chǔ)單元用于保存其它變量、數(shù)組、結(jié)構(gòu)體的地址。通過(guò)改變其所存儲(chǔ)的地址內(nèi)容實(shí)現(xiàn)數(shù)組、結(jié)構(gòu)體的地址。通過(guò)改變其所存儲(chǔ)的地址內(nèi)容實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。l示例:示例: INTEGER,TARGET : I=1255INTEGER,TARGET : I=1255 REAL : R=534.45 REAL : R=534.45 CHARACTER CHARACTER* *5 :S=CHINA

7、5 :S=CHINA INTEGER : A(3)=(/35,45,55/) INTEGER : A(3)=(/35,45,55/) INTEGER,POINTER : P INTEGER,POINTER : P P=I P=I11.1 概述第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問(wèn)方式訪問(wèn)方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)11.1 11.1 概述概述/ /存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)/ /示例示例l存儲(chǔ)單元地址存儲(chǔ)單元地址: :存儲(chǔ)單元在內(nèi)存中的排列序號(hào)(編號(hào))。存儲(chǔ)單元在內(nèi)存中的排列序號(hào)(編號(hào))。l存儲(chǔ)分配存儲(chǔ)分配: :系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針?lè)峙溥B續(xù)存

8、儲(chǔ)系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針?lè)峙溥B續(xù)存儲(chǔ)單元,用于存儲(chǔ)有關(guān)數(shù)據(jù),其變量名、數(shù)組名、結(jié)構(gòu)體名、單元,用于存儲(chǔ)有關(guān)數(shù)據(jù),其變量名、數(shù)組名、結(jié)構(gòu)體名、指針名代表連續(xù)存儲(chǔ)單元首地址。指針名代表連續(xù)存儲(chǔ)單元首地址。l指針變量(指針)指針變量(指針): :為其分配的存儲(chǔ)單元用于保存其它變量、為其分配的存儲(chǔ)單元用于保存其它變量、數(shù)組、結(jié)構(gòu)體的地址。通過(guò)改變其所存儲(chǔ)的地址內(nèi)容實(shí)現(xiàn)數(shù)組、結(jié)構(gòu)體的地址。通過(guò)改變其所存儲(chǔ)的地址內(nèi)容實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。l示例:示例: INTEGER,TARGET : I=1255INTEGER,TARGET : I=1255 REAL : R=534.45 REAL

9、: R=534.45 CHARACTER CHARACTER* *5 :S=CHINA5 :S=CHINA INTEGER : A(3)=(/35,45,55/) INTEGER : A(3)=(/35,45,55/) INTEGER,POINTER : P INTEGER,POINTER : P P=I P=I11.1 概述第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu) 12551255534.45534.45CHINACHINA35354545555510001000整型變量整型變量I,I,地址地址1000,41000,4字節(jié)字節(jié), ,值值12551255實(shí)型變量實(shí)型變量R,R,地

10、址地址1004,41004,4字節(jié)字節(jié), ,值值534.45534.45字符型變量字符型變量S,S,地址地址1008,51008,5字節(jié)字節(jié), ,值值CHINACHINA整型數(shù)組整型數(shù)組A,A,地址地址1013,121013,12字節(jié)字節(jié), ,值值3535、4545、5555指針變量指針變量P,P,地址地址1025,41025,4字節(jié)字節(jié), ,值為值為100010000 01 11000100010041004100810081013101310251025n n概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問(wèn)方式訪問(wèn)方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)11.1 11.1 概述概述/ /訪問(wèn)方式訪問(wèn)方式11.1

11、概述第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)l直接訪問(wèn)直接訪問(wèn): :直接訪問(wèn)存儲(chǔ)單元中的內(nèi)容。如對(duì)普通變量、數(shù)直接訪問(wèn)存儲(chǔ)單元中的內(nèi)容。如對(duì)普通變量、數(shù)組元素、結(jié)構(gòu)體成員的訪問(wèn),采用直接訪問(wèn)方式。如圖組元素、結(jié)構(gòu)體成員的訪問(wèn),采用直接訪問(wèn)方式。如圖12-12-2 2所示。所示。l間接訪問(wèn)間接訪問(wèn): :先從存儲(chǔ)單元中得到被訪問(wèn)存儲(chǔ)單元地址,然后先從存儲(chǔ)單元中得到被訪問(wèn)存儲(chǔ)單元地址,然后通過(guò)該地址訪問(wèn)被訪問(wèn)存儲(chǔ)單元中的內(nèi)容。如對(duì)指針變量通過(guò)該地址訪問(wèn)被訪問(wèn)存儲(chǔ)單元中的內(nèi)容。如對(duì)指針變量的訪問(wèn),采用間接訪問(wèn)方式。如圖的訪問(wèn),采用間接訪問(wèn)方式。如圖12-312-3所示。所示。l指針變量存

12、儲(chǔ)單元中保存目標(biāo)變量地址,通常用箭頭表示。指針變量存儲(chǔ)單元中保存目標(biāo)變量地址,通常用箭頭表示。F90F90指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。l指針變量聲明后指針變量聲明后, ,未分配存儲(chǔ)空間未分配存儲(chǔ)空間, ,訪問(wèn)前需分配存儲(chǔ)空間。訪問(wèn)前需分配存儲(chǔ)空間。 ( (示例示例) )I I125125125125J J3753753 3* *125125I=125I=125J=3J=3* *I IP PI I125125125125J J3753753 3* *1251253 3* *P PI I地址地址I=125I=125P=IP=IJ=

13、3J=3* *I I概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問(wèn)方式訪問(wèn)方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)11.1 11.1 概述概述/ /訪問(wèn)方式訪問(wèn)方式/ /示例示例11.1 概述第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)l直接訪問(wèn)直接訪問(wèn): :直接訪問(wèn)存儲(chǔ)單元中的內(nèi)容。如對(duì)普通變量、數(shù)直接訪問(wèn)存儲(chǔ)單元中的內(nèi)容。如對(duì)普通變量、數(shù)組元素、結(jié)構(gòu)體成員的訪問(wèn),采用直接訪問(wèn)方式。如圖組元素、結(jié)構(gòu)體成員的訪問(wèn),采用直接訪問(wèn)方式。如圖12-12-2 2所示。所示。l間接訪問(wèn)間接訪問(wèn): :先從存儲(chǔ)單元中得到被訪問(wèn)存儲(chǔ)單元地址,然后先從存儲(chǔ)單元中得到被訪問(wèn)存儲(chǔ)單元地址,然后通過(guò)該地址訪問(wèn)被訪問(wèn)存儲(chǔ)單元中的內(nèi)

14、容。如對(duì)指針變量通過(guò)該地址訪問(wèn)被訪問(wèn)存儲(chǔ)單元中的內(nèi)容。如對(duì)指針變量的訪問(wèn),采用間接訪問(wèn)方式。如圖的訪問(wèn),采用間接訪問(wèn)方式。如圖12-312-3所示。所示。l指針變量存儲(chǔ)單元中保存目標(biāo)變量地址,通常用箭頭表示。指針變量存儲(chǔ)單元中保存目標(biāo)變量地址,通常用箭頭表示。F90F90指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。l指針變量聲明后指針變量聲明后, ,未分配存儲(chǔ)空間未分配存儲(chǔ)空間, ,訪問(wèn)前需分配存儲(chǔ)空間。訪問(wèn)前需分配存儲(chǔ)空間。 ( (示例示例) )I I125125125125J J3753753 3* *125125I=125I=125J=

15、3J=3* *I IP PI I125125125125J J3753753 3* *1251253 3* *P PI I地址地址I=125I=125P=IP=IJ=3J=3* *I I概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問(wèn)方式訪問(wèn)方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)! !例例11.1 11.1 使用指針實(shí)現(xiàn)兩個(gè)整數(shù)交換使用指針實(shí)現(xiàn)兩個(gè)整數(shù)交換INTEGER,TARGET : I,J INTEGER,TARGET : I,J ! !聲明兩個(gè)目標(biāo)變量聲明兩個(gè)目標(biāo)變量I I和和J JINTEGER,POINTER : P1,P2,P3 INTEGER,POINTER : P1,P2,P3 ! !聲明三個(gè)指針

16、變量聲明三個(gè)指針變量P1P1、P2P2和和P3P3I=25;J=35 I=25;J=35 ! !給目標(biāo)變量給目標(biāo)變量I I和和J J直接賦值直接賦值P1=I;P2=JP1=I;P2=J ! !給指針?lè)峙渲赶蚪o指針?lè)峙渲赶騃 I和和J J的存儲(chǔ)空間的存儲(chǔ)空間 WRITE(WRITE(* *, ,* *) ) 未交換數(shù)據(jù):未交換數(shù)據(jù):,P1,P2 ,P1,P2 ! !通過(guò)指針變量間接輸出通過(guò)指針變量間接輸出I I和和J J的值的值P3=P1;P1=P2;P2=P3 P3=P1;P1=P2;P2=P3 ! !交換指針交換指針P1P1和和P2P2指向的目標(biāo)變量指向的目標(biāo)變量PRINTPRINT* *,

17、 ,已交換數(shù)據(jù):已交換數(shù)據(jù): ,P1,P2 ,P1,P2 ! !通過(guò)指針變量間接輸出通過(guò)指針變量間接輸出J J和和I I的值的值ENDENDI I2525P1P1圖圖12-4 12-4 指針交換指針交換J J3535P2P2J J3535P2P2P1P1P3P3交換前交換前交換后交換后I I252511.1 11.1 概述概述/ /指針聲明指針聲明11.1 概述第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)lPOINTERPOINTER屬性屬性: :通過(guò)通過(guò)POINTERPOINTER屬性聲明指針變量。屬性聲明指針變量。lTARGETTARGET屬性屬性: :通過(guò)通過(guò)TARGETTAR

18、GET屬性聲明指針可指的目標(biāo)變量。屬性聲明指針可指的目標(biāo)變量。l一般格式:一般格式: ,POINTER:,POINTER:, 或或 POINTER POINTER , 例:例: REAL Q1,Q2REAL Q1,Q2 INTEGER,POINTER:P1,P2 INTEGER,POINTER:P1,P2! !聲明指向整型變量的指針聲明指向整型變量的指針P1P1和和P2P2 POINTER Q1POINTER Q1 ! !聲明指向?qū)嵭妥兞康闹羔樎暶髦赶驅(qū)嵭妥兞康闹羔楺1Q1 POINTER IQ1,IQ2POINTER IQ1,IQ2! !聲明指向整型變量的指針聲明指向整型變量的指針I(yè)Q1IQ

19、1和和IQ2IQ2 概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問(wèn)方式訪問(wèn)方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)11.1 11.1 概述概述/ /指針狀態(tài)指針狀態(tài)11.1 概述第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)l指針有三種狀態(tài)指針有三種狀態(tài): :未定義、空指針、被關(guān)聯(lián)。未定義、空指針、被關(guān)聯(lián)。u未定義:程序在初始狀態(tài)中未定義所有指針。未定義:程序在初始狀態(tài)中未定義所有指針。u空指針:指針已定義,但未成為目標(biāo)變量別名??罩羔槪褐羔樢讯x,但未成為目標(biāo)變量別名。u被關(guān)聯(lián):指針已定義,已成為目標(biāo)變量別名。被關(guān)聯(lián):指針已定義,已成為目標(biāo)變量別名。概述概述存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)訪問(wèn)方式訪問(wèn)方式指針聲明指針聲明

20、指針狀態(tài)指針狀態(tài)11.2 11.2 指針引用和賦值指針引用和賦值/ /指針引用指針引用l指針引用:指針引用:引用指針?biāo)改繕?biāo)變量。引用指針?biāo)改繕?biāo)變量。11.2 指針引用和賦值第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針引用指針引用指針賦值指針賦值結(jié)構(gòu)體指針結(jié)構(gòu)體指針! !例例11.211.2INTEGER,TARGET : R=25INTEGER,TARGET : R=25INTEGER,POINTER : PINTEGER,POINTER : PP=RP=RM=3M=3* *P-4P-4WRITE(WRITE(* *, ,* *) ) P,MP,MENDEND! !結(jié)果:結(jié)果

21、:2525,7171! !例例11.311.3INTEGER,POINTERINTEGER,POINTER:P1,PP1,PINTEGER,TARGETINTEGER,TARGET:R=12R=12P=RP=RR=2R=2* *P PWRITE(WRITE(* *, ,* *) ) P,RP,RENDEND! !結(jié)果:結(jié)果:2424,2424! !例例11.411.4INTEGER,TARGETINTEGER,TARGET:R=13R=13INTEGER,POINTERINTEGER,POINTER:P1,P2P1,P2P1=RP1=RP2=P1P2=P1WRITE(WRITE(* *, ,*

22、 *) P1,P2,R ) P1,P2,R ENDEND ! !結(jié)果:結(jié)果:1313,1313,131311.2 11.2 指針引用和賦值指針引用和賦值/ /指針賦值指針賦值l別名賦值:別名賦值:將目標(biāo)變量名作為別名賦值給指針。將目標(biāo)變量名作為別名賦值給指針。l數(shù)據(jù)賦值:數(shù)據(jù)賦值:將數(shù)據(jù)表達(dá)式值賦值給指針?biāo)改繕?biāo)變量。將數(shù)據(jù)表達(dá)式值賦值給指針?biāo)改繕?biāo)變量。l一般格式:一般格式: = = = = 11.2 指針引用和賦值第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)! !例例11.511.5INTEGER,TARGETINTEGER,TARGET:R1=25R1=25INTEGER,TA

23、RGETINTEGER,TARGET:R2=35R2=35INTEGER,POINTERINTEGER,POINTER:P1,P2P1,P2P1=R1P1=R1P2=R2P2=R2P1=P2P1=P2WRITE(WRITE(* *, ,* *) ) P1,P2P1,P2ENDEND! !結(jié)果:結(jié)果:3535,3535P1P1P1P1R1R12525R2R2P2P23535R1R13535R2R2P2P23535指針引用指針引用指針賦值指針賦值結(jié)構(gòu)體指針結(jié)構(gòu)體指針11.2 11.2 指針引用和賦值指針引用和賦值/ /結(jié)構(gòu)體指針結(jié)構(gòu)體指針11.2 指針引用和賦值第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)

24、指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)l結(jié)構(gòu)體指針:結(jié)構(gòu)體指針:指向結(jié)構(gòu)體的指針。指針可為結(jié)構(gòu)體別名。指向結(jié)構(gòu)體的指針。指針可為結(jié)構(gòu)體別名。 例:例: TYPE date_recordTYPE date_record INTEGER(2) year INTEGER(2) year INTEGER(1) month,day INTEGER(1) month,day END TYPE date_record END TYPE date_record TYPE(date_record),TARGET : date TYPE(date_record),TARGET : date TYPE(date_record),POI

25、NTER : P TYPE(date_record),POINTER : P P=dateP=date P.year=1995 P.year=1995;P.month=12P.month=12;P.day=25P.day=25 y=3+P.year y=3+P.year; m=P.month-2m=P.month-2;d=5+P.dayd=5+P.day WRITE(WRITE(* *, ,* *) ) datedate WRITE(WRITE(* *, ,* *) ) P P WRITE(WRITE(* *, ,* *) ) y,m,dy,m,d END END ! !輸出結(jié)果:輸出結(jié)果:

26、!1995 12 25!1995 12 25 !1995 12 25 !1995 12 25 !1998 10 30 !1998 10 30YearYearMonthMonthdaydayP Pdatedate1995199512122525P Pdatedate指針引用指針引用指針賦值指針賦值結(jié)構(gòu)體指針結(jié)構(gòu)體指針11.3 11.3 整型指針整型指針/ /概述概述l整型指針整型指針: :地址按地址按4 4字節(jié)整數(shù)對(duì)待的指針。整型指針可參與字節(jié)整數(shù)對(duì)待的指針。整型指針可參與整數(shù)運(yùn)算。整數(shù)運(yùn)算。l整型指針組成整型指針組成: :指針、基變量、目標(biāo)對(duì)象。指針、基變量、目標(biāo)對(duì)象。l創(chuàng)建指針步驟創(chuàng)建指針步

27、驟: :u第一步:將一個(gè)指針基變量鏈接在一個(gè)整型指針上。第一步:將一個(gè)指針基變量鏈接在一個(gè)整型指針上。 POINTER(POINTER( , )u第二步:將目標(biāo)對(duì)象地址賦值給整型指針。第二步:將目標(biāo)對(duì)象地址賦值給整型指針。 =LOC(=LOC() =MALLOC(=MALLOC()l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)LOCLOC功能功能: :獲得目標(biāo)對(duì)象起始內(nèi)存地址。獲得目標(biāo)對(duì)象起始內(nèi)存地址。l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)MALLOCMALLOC功能功能: :計(jì)算表達(dá)式值計(jì)算表達(dá)式值n n,分配,分配n n個(gè)字節(jié)存儲(chǔ)單個(gè)字節(jié)存儲(chǔ)單元,獲得存儲(chǔ)單元起始地址。元,獲得存儲(chǔ)單元起始地址。 (示例示例)11.3 整型指針第十一講第

28、十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述例例11.611.6例例11.711.711.3 11.3 整型指針整型指針/ /概述概述/ /示例示例l整型指針整型指針: :地址按地址按4 4字節(jié)整數(shù)對(duì)待的指針。整型指針可參與字節(jié)整數(shù)對(duì)待的指針。整型指針可參與整數(shù)運(yùn)算。整數(shù)運(yùn)算。l整型指針組成整型指針組成: :指針、基變量、目標(biāo)對(duì)象。指針、基變量、目標(biāo)對(duì)象。l創(chuàng)建指針步驟創(chuàng)建指針步驟: :u第一步:將一個(gè)指針基變量鏈接在一個(gè)整型指針上。第一步:將一個(gè)指針基變量鏈接在一個(gè)整型指針上。 POINTER(POINTER( , )u第二步:將目標(biāo)對(duì)象地址賦值給整型指針。第二步:將目標(biāo)對(duì)象地址賦值

29、給整型指針。 =LOC(=LOC() =MALLOC(=MALLOC()l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)LOCLOC功能功能: :獲得目標(biāo)對(duì)象起始內(nèi)存地址。獲得目標(biāo)對(duì)象起始內(nèi)存地址。l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)MALLOCMALLOC功能功能: :計(jì)算表達(dá)式值計(jì)算表達(dá)式值n n,分配,分配n n個(gè)字節(jié)存儲(chǔ)單個(gè)字節(jié)存儲(chǔ)單元,獲得存儲(chǔ)單元起始地址。元,獲得存儲(chǔ)單元起始地址。 (示例示例)11.3 概述第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述例例11.611.6例例11.711.7INTEGER INTEGER :I,J=20I,J=20POINTERPOINTER(P,IP,I)! !建立指針基變量

30、建立指針基變量I I和目標(biāo)對(duì)象和目標(biāo)對(duì)象J J的等價(jià)關(guān)系的等價(jià)關(guān)系P=LOC(J) P=LOC(J) ! !將目標(biāo)對(duì)象將目標(biāo)對(duì)象J J的地址賦予整型指針變量的地址賦予整型指針變量P PWRITE(WRITE(* *, ,* *) ) P,I,J P,I,J ! !輸出結(jié)果為:輸出結(jié)果為:4442932 20 204442932 20 20I=30I=30WRITE(WRITE(* *, ,* *) ) P,I,J P,I,J ! !輸出結(jié)果為:輸出結(jié)果為:4442932 30 304442932 30 30J=40J=40WRITE(WRITE(* *, ,* *) ) P,I,J P,I,J

31、 ! !輸出結(jié)果為:輸出結(jié)果為:4442932 40 404442932 40 40ENDEND11.3 11.3 整型指針整型指針/ /例例11.611.6分析下面程序分析下面程序 REAL A(10),B(5) REAL A(10),B(5) POINTER POINTER(P,BP,B) P=LOC(A)P=LOC(A) A(2)=125.0 A(2)=125.0 ! !等價(jià)于設(shè)置等價(jià)于設(shè)置B(2)B(2)為為125.0125.0 WRITE(WRITE(* *, ,* *) ) B(2) B(2) END END通過(guò)通過(guò)POINTERPOINTER語(yǔ)句語(yǔ)句, ,將指針基數(shù)組將指針基數(shù)組

32、B B與目標(biāo)對(duì)象數(shù)組與目標(biāo)對(duì)象數(shù)組A A建立聯(lián)系建立聯(lián)系, ,即指針即指針P P中存放的數(shù)組中存放的數(shù)組A A的起始地址就是數(shù)組的起始地址就是數(shù)組B B的起始地址的起始地址, ,所所以運(yùn)行程序后以運(yùn)行程序后, ,輸出輸出B(2)B(2)的值為的值為125.0125.0。 11.3 整型指針第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述例例11.611.6例例11.711.711.3 11.3 整型指針整型指針/ /例例11.711.7分析下面程序分析下面程序 INTEGER : A(5),BINTEGER : A(5),B POINTER POINTER(P,BP,B) P=L

33、OC(A)P=LOC(A) DO I=1,5 DO I=1,5 B=I B=I* *1010 P=P+4 P=P+4 ENDDO ENDDO WRITE(WRITE(* *, ,* *) ) A A END END ! !輸出結(jié)果為:輸出結(jié)果為: 10 20 30 40 5010 20 30 40 50 通過(guò)指針運(yùn)算和指針基變量通過(guò)指針運(yùn)算和指針基變量B B的賦值操作的賦值操作, ,生成數(shù)組生成數(shù)組A A的的5 5個(gè)元個(gè)元素值。通過(guò)指針運(yùn)算和指針基變量素值。通過(guò)指針運(yùn)算和指針基變量B B的賦值操作的賦值操作, ,生成數(shù)組生成數(shù)組A A的的5 5個(gè)元素值。整型指針個(gè)元素值。整型指針P P增加增加

34、4,4,相當(dāng)于把數(shù)組的下標(biāo)加相當(dāng)于把數(shù)組的下標(biāo)加1 1。11.3 整型指針第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)A AB B1 2 3 4 51 2 3 4 5P PP PP PP PP P概述概述例例11.611.6例例11.711.711.411.4與指針相關(guān)的函數(shù)和語(yǔ)句/NULLIFY/NULLIFYlNULLIFY:NULLIFY:將指針設(shè)置為空狀態(tài)??諣顟B(tài)可用標(biāo)準(zhǔn)函數(shù)將指針設(shè)置為空狀態(tài)。空狀態(tài)可用標(biāo)準(zhǔn)函數(shù)ASSOCIATEDASSOCIATED進(jìn)行檢測(cè)。進(jìn)行檢測(cè)。 指針聲明后,一般應(yīng)將其設(shè)置為空狀態(tài)。指針聲明后,一般應(yīng)將其設(shè)置為空狀態(tài)。 如:如:INTEGERINTE

35、GER,POINTER : PPOINTER : P NULLIFY NULLIFY(P P)11.4 與指針相關(guān)的函數(shù)和語(yǔ)句第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATE11.411.4與指針相關(guān)的函數(shù)和語(yǔ)句/ASSOCIATED/ASSOCIATEDlASSOCIATED:ASSOCIATED:判定是否有目標(biāo)對(duì)象與指針鏈接。判定是否有目標(biāo)對(duì)象與指針鏈接。 如:如: REAL A1(:),A2(:),A3(5)REAL A1(:),A2(:),A

36、3(5) POINTER A1,A2 POINTER A1,A2 TARGET A3 TARGET A3 LOGICAL S1,S2,S3 LOGICAL S1,S2,S3 A1=A3 A1=A3 !指針賦值!指針賦值 A2=A3 A2=A3 !指針賦值!指針賦值 S1=ASSOCIATED(A1)S1=ASSOCIATED(A1)!結(jié)果!結(jié)果TRUE;TRUE;指針指針A1A1已指向目標(biāo)變量已指向目標(biāo)變量 S2=ASSOCIATED(A1,A3) S2=ASSOCIATED(A1,A3) !結(jié)果!結(jié)果TRUE;A1TRUE;A1已指向已指向A3A3 S3=ASSOCIATED(A1,A2)

37、S3=ASSOCIATED(A1,A2) !結(jié)果!結(jié)果TRUE;A1TRUE;A1和和A2A2都指向都指向A3A311.4 與指針相關(guān)的函數(shù)和語(yǔ)句第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATE11.411.4與指針相關(guān)的函數(shù)和語(yǔ)句/ALLOCATE/ALLOCATElALLOCATE:ALLOCATE:為指針?lè)峙渌赶虻拇鎯?chǔ)空間。為指針?lè)峙渌赶虻拇鎯?chǔ)空間。 如:如: REALREAL,POINTER : P1POINTER : P1 ALLOCA

38、TE(P1) ALLOCATE(P1) P1=911.911 P1=911.91111.4 與指針相關(guān)的函數(shù)和語(yǔ)句第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATEP1P1P1P1911.911911.91111.411.4與指針相關(guān)的函數(shù)和語(yǔ)句/DEALLOCATE/DEALLOCATElDEALLOCATE:DEALLOCATE:釋放指針?biāo)复鎯?chǔ)空間。釋放指針?biāo)复鎯?chǔ)空間。 如:如: REALREAL,POINTER : P1POINTER : P

39、1 ALLOCATE(P1) ALLOCATE(P1) P1=911.911 P1=911.911 DEALLOCATE DEALLOCATE(P1P1)11.4 與指針相關(guān)的函數(shù)和語(yǔ)句第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)P1P1P1P1911.911911.911NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATE11.5 11.5 指針數(shù)組指針數(shù)組/ /指針數(shù)組指針數(shù)組11.5 指針數(shù)組第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針數(shù)組指針數(shù)組函數(shù)返回函數(shù)返回l指針數(shù)組指針

40、數(shù)組: :具有具有POINTERPOINTER屬性的數(shù)組。指針數(shù)組類似動(dòng)態(tài)數(shù)屬性的數(shù)組。指針數(shù)組類似動(dòng)態(tài)數(shù)組,聲明時(shí),指針數(shù)組不指定數(shù)組維的上下界。如:組,聲明時(shí),指針數(shù)組不指定數(shù)組維的上下界。如: REAL,DIMENSION(:),POINTER : AREAL,DIMENSION(:),POINTER : A l存儲(chǔ)分配存儲(chǔ)分配: :指針數(shù)組需通過(guò)指針數(shù)組需通過(guò)ALLOCATEALLOCATE語(yǔ)句分配存儲(chǔ)空間。如:語(yǔ)句分配存儲(chǔ)空間。如: ALLOCATEALLOCATE(A A(5050) 例:使用指針數(shù)組存儲(chǔ)下三角矩陣。例:使用指針數(shù)組存儲(chǔ)下三角矩陣。 (程序程序)1 0 0 01 0

41、 0 01 1 0 01 1 0 01 1 1 01 1 1 01 1 1 11 1 1 1R R RRR11111111111 12 23 34 4T11.5 11.5 指針數(shù)組指針數(shù)組/ /概述概述/ /程序程序11.5 指針數(shù)組第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針數(shù)組指針數(shù)組函數(shù)返回函數(shù)返回l指針數(shù)組指針數(shù)組: :具有具有POINTERPOINTER屬性的數(shù)組。指針數(shù)組類似動(dòng)態(tài)數(shù)屬性的數(shù)組。指針數(shù)組類似動(dòng)態(tài)數(shù)組,聲明時(shí),指針數(shù)組不指定數(shù)組維的上下界。如:組,聲明時(shí),指針數(shù)組不指定數(shù)組維的上下界。如: REAL,DIMENSION(:),POINTER : AREAL

42、,DIMENSION(:),POINTER : A l存儲(chǔ)分配存儲(chǔ)分配: :指針數(shù)組需通過(guò)指針數(shù)組需通過(guò)ALLOCATEALLOCATE語(yǔ)句分配存儲(chǔ)空間。如:語(yǔ)句分配存儲(chǔ)空間。如: ALLOCATEALLOCATE(A A(5050) 例:使用指針數(shù)組存儲(chǔ)下三角矩陣。例:使用指針數(shù)組存儲(chǔ)下三角矩陣。 (程序程序)1 0 0 01 0 0 01 1 0 01 1 0 01 1 1 01 1 1 01 1 1 11 1 1 1R R RRR11111111111 12 23 34 4TPROGRAM exam129PROGRAM exam129 TYPE row TYPE row INTEGER,

43、DIMENSION(:),POINTER : R INTEGER,DIMENSION(:),POINTER : R END TYPE END TYPE INTEGER,PARAMETER : N=4 INTEGER,PARAMETER : N=4 TYPE(row),DIMENSION(N) : T TYPE(row),DIMENSION(N) : T ! !聲明類型為聲明類型為rowrow的數(shù)組的數(shù)組T T DO I=1,N DO I=1,N ALLOCATE(T(I)%R(1:I) ALLOCATE(T(I)%R(1:I) ! !為數(shù)組元素分配空間為數(shù)組元素分配空間 ENDDOENDDO

44、DO I=1,N DO I=1,N T(I)%R(1:I)=1 T(I)%R(1:I)=1 ! !為下三角矩陣為下三角矩陣T T賦值賦值 ENDDOENDDO DO I=1,N DO I=1,N WRITE(WRITE(* *, ,* *) ) T(I)%R(1:I) T(I)%R(1:I) ! !打印矩陣打印矩陣T T ENDDO ENDDOENDEND11.5 11.5 指針數(shù)組指針數(shù)組/ /函數(shù)返回函數(shù)返回11.5 指針數(shù)組第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)lFORTRAN90FORTRAN90允許指針數(shù)組作為函數(shù)值返回。允許指針數(shù)組作為函數(shù)值返回。PROGRAM e

45、xam1210PROGRAM exam1210 IMPLICIT NONE IMPLICIT NONE INTEGER,DIMENSION(10): X=(/11,8,15,4,20,3,5,18,21,17/) INTEGER,DIMENSION(10): X=(/11,8,15,4,20,3,5,18,21,17/) WRITE( WRITE(* *,(20I3) array(X),(20I3) array(X)CONTAINS CONTAINS FUNCTION array(A) FUNCTION array(A) INTEGER,DIMENSION(:), POINTER : arra

46、y INTEGER,DIMENSION(:), POINTER : array INTEGER,DIMENSION(:) : A INTEGER,DIMENSION(:) : A INTEGER I,J,T INTEGER I,J,T ALLOCATE(array(SIZE(A) ALLOCATE(array(SIZE(A) ! !為為arrayarray數(shù)組分配存儲(chǔ)單元數(shù)組分配存儲(chǔ)單元 array=Aarray=A DO I=1,SIZE(A)-1 DO I=1,SIZE(A)-1 DO J=I+1,SIZE(A) DO J=I+1,SIZE(A) IF (array(I)array(J)

47、THEN IF (array(I)array(J) THEN T=array(J) T=array(J) array(J)=array(I) array(J)=array(I) array(I)=T array(I)=T ENDIF ENDIF ENDDO ENDDO ENDDO ENDDO END FUNCTION array END FUNCTION arrayENDEND指針數(shù)組指針數(shù)組函數(shù)返回函數(shù)返回11.6 11.6 動(dòng)態(tài)鏈表動(dòng)態(tài)鏈表/ /概述概述11.6 動(dòng)態(tài)鏈表第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述創(chuàng)建搜索創(chuàng)建搜索u 插入節(jié)點(diǎn)插入節(jié)點(diǎn)u 刪除節(jié)點(diǎn)刪除節(jié)點(diǎn)

48、鏈表是通過(guò)結(jié)點(diǎn)中的指針成員將若干個(gè)具有相同派生類型鏈表是通過(guò)結(jié)點(diǎn)中的指針成員將若干個(gè)具有相同派生類型的結(jié)點(diǎn)拉成鏈,從而對(duì)一些在內(nèi)存中不連續(xù)的數(shù)據(jù)進(jìn)行動(dòng)的結(jié)點(diǎn)拉成鏈,從而對(duì)一些在內(nèi)存中不連續(xù)的數(shù)據(jù)進(jìn)行動(dòng)態(tài)處理的一種方式。鏈表中的第一個(gè)結(jié)點(diǎn)稱為頭結(jié)點(diǎn),指態(tài)處理的一種方式。鏈表中的第一個(gè)結(jié)點(diǎn)稱為頭結(jié)點(diǎn),指向頭結(jié)點(diǎn)的指針?lè)Q為頭指針。向頭結(jié)點(diǎn)的指針?lè)Q為頭指針。該派生類型的成員中至少有該派生類型的成員中至少有一個(gè)指向本派生類型的指針,鏈表中最后一個(gè)表目的成員一個(gè)指向本派生類型的指針,鏈表中最后一個(gè)表目的成員的指針值為空,其余表目的成員的指針均指向下一個(gè)表目。的指針值為空,其余表目的成員的指針均指向下一個(gè)表

49、目。為了便于對(duì)鏈表的操作,需要引入另一個(gè)派生類型,它用為了便于對(duì)鏈表的操作,需要引入另一個(gè)派生類型,它用于存放鏈表的頭指針。鏈表的頭指針表示鏈表的存在與否于存放鏈表的頭指針。鏈表的頭指針表示鏈表的存在與否( (頭指針為空表示空鏈表,否則表示鏈表中至少有一個(gè)以上頭指針為空表示空鏈表,否則表示鏈表中至少有一個(gè)以上的表目的表目) )。如果鏈表尾結(jié)點(diǎn)的指針成員指向了頭結(jié)點(diǎn),這樣。如果鏈表尾結(jié)點(diǎn)的指針成員指向了頭結(jié)點(diǎn),這樣的鏈表稱為的鏈表稱為“循環(huán)鏈表循環(huán)鏈表”。在本節(jié)主要討論單向鏈表。在本節(jié)主要討論單向鏈表( (簡(jiǎn)稱簡(jiǎn)稱鏈表鏈表) )。TYPE nodeTYPE node INTEGER data I

50、NTEGER data TYPE(node),POINTER : next TYPE(node),POINTER : nextEND TYPE nodeEND TYPE node TYPE(node),POINTER : head,P,Q,LTYPE(node),POINTER : head,P,Q,L 11.6 11.6 動(dòng)態(tài)鏈表動(dòng)態(tài)鏈表/ /創(chuàng)建和搜索創(chuàng)建和搜索11.6 動(dòng)態(tài)鏈表第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu) 創(chuàng)建鏈表的過(guò)程就是把一個(gè)個(gè)結(jié)點(diǎn)插入鏈表的過(guò)程。因而創(chuàng)建鏈表的過(guò)程就是把一個(gè)個(gè)結(jié)點(diǎn)插入鏈表的過(guò)程。因而創(chuàng)建鏈表的操作實(shí)際上就是不斷地插入的過(guò)程。創(chuàng)建鏈表的操作實(shí)

51、際上就是不斷地插入的過(guò)程。 ALLOCATE(Q) !ALLOCATE(Q) !創(chuàng)建一個(gè)新結(jié)點(diǎn)創(chuàng)建一個(gè)新結(jié)點(diǎn) Q.data=95 !Q.data=95 !或或Q%data=95Q%data=95 NULLIFY(Q%next) ! NULLIFY(Q%next) !將結(jié)點(diǎn)中將結(jié)點(diǎn)中nextnext置為空指針置為空指針 head=Q !head=Q !將指針將指針Q Q賦予表頭指針賦予表頭指針headhead上述四條語(yǔ)句執(zhí)行后上述四條語(yǔ)句執(zhí)行后, ,建立了有一個(gè)結(jié)點(diǎn)的鏈表建立了有一個(gè)結(jié)點(diǎn)的鏈表, ,如圖如圖11-111-1所示。所示。 ALLOCATE(P) !ALLOCATE(P) !創(chuàng)建一個(gè)

52、新結(jié)點(diǎn)創(chuàng)建一個(gè)新結(jié)點(diǎn) P.data=85 !P.data=85 !或或 P%data=85P%data=85 P%next=head ! P%next=head !將原表頭結(jié)點(diǎn)指針將原表頭結(jié)點(diǎn)指針headhead賦予指針賦予指針P P的的nextnext指針域指針域 head=P !head=P !將指針將指針P P賦予表頭指針賦予表頭指針headhead上述四條語(yǔ)句執(zhí)行后上述四條語(yǔ)句執(zhí)行后, ,建立了有二個(gè)結(jié)點(diǎn)的鏈表建立了有二個(gè)結(jié)點(diǎn)的鏈表, ,如圖如圖11-211-2所示。所示。 圖圖11-1 11-1 一個(gè)結(jié)點(diǎn)的鏈表一個(gè)結(jié)點(diǎn)的鏈表 圖圖11-2 11-2 二個(gè)結(jié)點(diǎn)的鏈表二個(gè)結(jié)點(diǎn)的鏈表概述概

53、述創(chuàng)建搜索創(chuàng)建搜索u 插入節(jié)點(diǎn)插入節(jié)點(diǎn)u 刪除節(jié)點(diǎn)刪除節(jié)點(diǎn)head95 Q85 Q95 headhead鏈表創(chuàng)建后鏈表創(chuàng)建后, ,需要從表頭結(jié)點(diǎn)開(kāi)始搜索鏈表需要從表頭結(jié)點(diǎn)開(kāi)始搜索鏈表, ,完成修改、輸完成修改、輸出、統(tǒng)計(jì)等有關(guān)處理操作。若出、統(tǒng)計(jì)等有關(guān)處理操作。若headhead為表頭結(jié)點(diǎn)指針為表頭結(jié)點(diǎn)指針, ,則一般則一般通過(guò)下面語(yǔ)句完成搜索操作。通過(guò)下面語(yǔ)句完成搜索操作。 Q=headQ=head DO WHILE (ASSOCIATED(Q) DO WHILE (ASSOCIATED(Q) ! !有關(guān)處理操作語(yǔ)句有關(guān)處理操作語(yǔ)句 Q=Q.next !Q=Q.next !搜索下一結(jié)點(diǎn)搜索下

54、一結(jié)點(diǎn) ENDDOENDDO ASSOCIATED(Q) ASSOCIATED(Q)函數(shù)用于判定指針函數(shù)用于判定指針Q Q是否為空指針。是否為空指針。 11.6 11.6 動(dòng)態(tài)鏈表動(dòng)態(tài)鏈表/ /插入節(jié)點(diǎn)插入節(jié)點(diǎn)11.6 動(dòng)態(tài)鏈表第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)執(zhí)行下面語(yǔ)句創(chuàng)建新結(jié)點(diǎn)執(zhí)行下面語(yǔ)句創(chuàng)建新結(jié)點(diǎn)Q,Q,結(jié)點(diǎn)結(jié)點(diǎn)Q Q插入鏈表有三種情況插入鏈表有三種情況: : ALLOCATE(Q) ALLOCATE(Q) Q.data=num Q.data=num NULLIFY(Q%next) NULLIFY(Q%next)1 1、假設(shè)鏈表為空表假設(shè)鏈表為空表, ,即表頭指針即

55、表頭指針headhead為空指針為空指針, ,執(zhí)行賦值語(yǔ)執(zhí)行賦值語(yǔ)句句head=Qhead=Q實(shí)現(xiàn)插入實(shí)現(xiàn)插入 2 2、假設(shè)鏈表為非空表假設(shè)鏈表為非空表, ,在表頭在表頭headhead前插入前插入, ,執(zhí)行下面賦值語(yǔ)執(zhí)行下面賦值語(yǔ)句實(shí)現(xiàn)插入句實(shí)現(xiàn)插入 Q.next=headQ.next=headhead=Qhead=Q 3 3、假設(shè)已創(chuàng)建部分鏈表假設(shè)已創(chuàng)建部分鏈表, ,表頭指針為表頭指針為head,head,指針指針P P指向鏈表中指向鏈表中某結(jié)點(diǎn)某結(jié)點(diǎn), ,將新結(jié)點(diǎn)將新結(jié)點(diǎn)Q Q插入到插入到P P結(jié)點(diǎn)之后結(jié)點(diǎn)之后, ,執(zhí)行下面賦值語(yǔ)句實(shí)執(zhí)行下面賦值語(yǔ)句實(shí)現(xiàn)插入現(xiàn)插入 Q.next=P.ne

56、xtQ.next=P.next P.next=QP.next=Q 概述概述創(chuàng)建搜索創(chuàng)建搜索u 插入節(jié)點(diǎn)插入節(jié)點(diǎn)u 刪除節(jié)點(diǎn)刪除節(jié)點(diǎn)11.6 11.6 動(dòng)態(tài)鏈表動(dòng)態(tài)鏈表/ /刪除節(jié)點(diǎn)刪除節(jié)點(diǎn)11.6 動(dòng)態(tài)鏈表第十一講第十一講 指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)從 鏈 表 中 刪 除 結(jié) 點(diǎn)從 鏈 表 中 刪 除 結(jié) 點(diǎn) Q Q 有 兩 種 情 況有 兩 種 情 況 , , 結(jié) 點(diǎn) 刪 除 后結(jié) 點(diǎn) 刪 除 后 , , 要 用要 用DEALLOCATE(Q)DEALLOCATE(Q)語(yǔ)句將結(jié)點(diǎn)釋放語(yǔ)句將結(jié)點(diǎn)釋放 1.1. 待刪除結(jié)點(diǎn)待刪除結(jié)點(diǎn)Q Q為表頭結(jié)點(diǎn)為表頭結(jié)點(diǎn)假設(shè)鏈表為非空表假設(shè)鏈表為非

57、空表, ,表頭指針為表頭指針為head,head,執(zhí)行賦值語(yǔ)句執(zhí)行賦值語(yǔ)句head=Q.nexthead=Q.next實(shí)現(xiàn)刪除實(shí)現(xiàn)刪除 2.2. 待刪除結(jié)點(diǎn)待刪除結(jié)點(diǎn)Q Q為非表頭結(jié)點(diǎn)為非表頭結(jié)點(diǎn)假設(shè)鏈表為非空表假設(shè)鏈表為非空表, ,表頭指針為表頭指針為head,head,待刪除結(jié)點(diǎn)待刪除結(jié)點(diǎn)Q Q的前趨結(jié)的前趨結(jié)點(diǎn) 指 針 為點(diǎn) 指 針 為 P ,P , 執(zhí) 行 賦 值 語(yǔ) 句執(zhí) 行 賦 值 語(yǔ) 句 P . n e x t = Q . n e x tP . n e x t = Q . n e x t 或或P.next=P.next.nextP.next=P.next.next實(shí)現(xiàn)刪除實(shí)現(xiàn)刪除

58、 概述概述創(chuàng)建搜索創(chuàng)建搜索u 插入節(jié)點(diǎn)插入節(jié)點(diǎn)u 刪除節(jié)點(diǎn)刪除節(jié)點(diǎn)12.1 12.1 接口接口/ /概述概述l接口界面功能類似接口界面功能類似EXTERNALEXTERNAL語(yǔ)句,為主調(diào)程序提供外部子程語(yǔ)句,為主調(diào)程序提供外部子程序有關(guān)接口信息,接口界面可看作是序有關(guān)接口信息,接口界面可看作是EXTERNALEXTERNAL語(yǔ)句的擴(kuò)充,語(yǔ)句的擴(kuò)充,提供的信息比提供的信息比EXTERNALEXTERNAL豐富。豐富。l使用接口界面塊可提高程序可讀性。使用接口界面塊可提高程序可讀性。l接口界面塊可用在主程序單元、模塊單元、外部子程序單元接口界面塊可用在主程序單元、模塊單元、外部子程序單元中中, ,

59、以指明主調(diào)程序與被調(diào)用外部子程序之間的接口信息以指明主調(diào)程序與被調(diào)用外部子程序之間的接口信息, ,以以便保證外部子程序的正確使用。便保證外部子程序的正確使用。12.1 接口概述概述格式格式示例示例12.1 12.1 接口接口/ /格式格式12.1 接口 INTERFACEINTERFACE END INTERFACE END INTERFACE FUNCTION FUNCTION () END FUNCTION END FUNCTION SUBROUTINE SUBROUTINE () END SUBROUTINE END SUBROUTINE概述概述格式格式示例示例12.1 12.1 接口接

60、口/ /說(shuō)明說(shuō)明12.1 接口 對(duì)于一些常規(guī)函數(shù)和子例行程序?qū)τ谝恍┏R?guī)函數(shù)和子例行程序, ,使用時(shí)不需要用使用時(shí)不需要用INTERFACEINTERFACE接口聲明它們的接口信息接口聲明它們的接口信息, ,但遇到以下情況必須在主調(diào)程序中但遇到以下情況必須在主調(diào)程序中使用接口界面塊使用接口界面塊: :l外部函數(shù)返回結(jié)果是一個(gè)數(shù)組外部函數(shù)返回結(jié)果是一個(gè)數(shù)組, ,即外部函數(shù)名類型為數(shù)組。即外部函數(shù)名類型為數(shù)組。l外部函數(shù)返回結(jié)果是一個(gè)字符串外部函數(shù)返回結(jié)果是一個(gè)字符串, ,且長(zhǎng)度不是常數(shù)且長(zhǎng)度不是常數(shù), ,也不是假也不是假定長(zhǎng)度定長(zhǎng)度( (* *) )。l外部函數(shù)返回結(jié)果是一個(gè)指針。外部函數(shù)返回結(jié)

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論