




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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): :在編譯時為其分配存儲空間在編譯時為其分配存儲空間, ,大小不能改變。大小不能改變。l靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎ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)存儲空間易浪費(fèi)存儲空間, ,易產(chǎn)生下標(biāo)越界錯誤。易產(chǎn)生下標(biāo)越界錯誤。l動態(tài)數(shù)據(jù)結(jié)構(gòu)動態(tài)數(shù)據(jù)結(jié)構(gòu): :在運(yùn)行時為其分配存儲空間在運(yùn)行時為其分配存儲空間, ,大小可改變。大小可改變
2、。l動態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)動態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn): :可節(jié)約存儲空間,靈活,應(yīng)用廣??晒?jié)約存儲空間,靈活,應(yīng)用廣。l動態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn)動態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn): :分配算法復(fù)雜分配算法復(fù)雜, ,實(shí)現(xiàn)難度大。實(shí)現(xiàn)難度大。 象象鏈表鏈表、樹結(jié)構(gòu)樹結(jié)構(gòu)、圖結(jié)構(gòu)圖結(jié)構(gòu)等數(shù)據(jù)結(jié)構(gòu)都適合用動態(tài)數(shù)據(jù)等數(shù)據(jù)結(jié)構(gòu)都適合用動態(tài)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。 指針和動態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和指針和動態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和靈活應(yīng)用指針和動態(tài)數(shù)據(jù)結(jié)構(gòu)求解問題,可使程序更加簡潔、靈活應(yīng)用指針和動態(tài)數(shù)據(jù)結(jié)構(gòu)求解問題,可使程序更加簡潔、緊湊、高效。緊湊
3、、高效。11.1 概述第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述存儲結(jié)構(gòu)存儲結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)11.1 11.1 概述概述/ /概述概述/ /動態(tài)數(shù)據(jù)結(jié)構(gòu)示例動態(tài)數(shù)據(jù)結(jié)構(gòu)示例l靜態(tài)數(shù)據(jù)結(jié)構(gòu)靜態(tài)數(shù)據(jù)結(jié)構(gòu): :在編譯時為其分配存儲空間在編譯時為其分配存儲空間, ,大小不能改變。大小不能改變。l靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)靜態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎ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)存儲空間易浪費(fèi)存儲空間, ,易產(chǎn)生下標(biāo)越界錯誤。易產(chǎn)生下標(biāo)越界錯誤。l動態(tài)數(shù)據(jù)結(jié)構(gòu)動態(tài)數(shù)據(jù)結(jié)構(gòu): :
4、在運(yùn)行時為其分配存儲空間在運(yùn)行時為其分配存儲空間, ,大小可改變。大小可改變。l動態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn)動態(tài)數(shù)據(jù)結(jié)構(gòu)優(yōu)點(diǎn): :可節(jié)約存儲空間,靈活,應(yīng)用廣??晒?jié)約存儲空間,靈活,應(yīng)用廣。l動態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn)動態(tài)數(shù)據(jù)結(jié)構(gòu)缺點(diǎn): :分配算法復(fù)雜分配算法復(fù)雜, ,實(shí)現(xiàn)難度大。實(shí)現(xiàn)難度大。 象象鏈表、樹結(jié)構(gòu)、圖結(jié)構(gòu)鏈表、樹結(jié)構(gòu)、圖結(jié)構(gòu)等數(shù)據(jù)結(jié)構(gòu)都適合用動態(tài)數(shù)據(jù)等數(shù)據(jù)結(jié)構(gòu)都適合用動態(tài)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。結(jié)構(gòu)實(shí)現(xiàn),指針是實(shí)現(xiàn)動態(tài)數(shù)據(jù)結(jié)構(gòu)的有效手段。 指針和動態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和指針和動態(tài)數(shù)據(jù)結(jié)構(gòu)廣泛應(yīng)用于軟件設(shè)計(jì),熟練掌握和靈活應(yīng)用指針和動態(tài)數(shù)據(jù)結(jié)構(gòu)求解問題,可使程序
5、更加簡潔、靈活應(yīng)用指針和動態(tài)數(shù)據(jù)結(jié)構(gòu)求解問題,可使程序更加簡潔、緊湊、高效。緊湊、高效。11.1 概述a a1 1a a2 2a an n 鏈表鏈表樹結(jié)構(gòu)樹結(jié)構(gòu)圖結(jié)構(gòu)圖結(jié)構(gòu)概述概述存儲結(jié)構(gòu)存儲結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)11.1 11.1 概述概述/ /存儲結(jié)構(gòu)存儲結(jié)構(gòu)l存儲單元地址存儲單元地址: :存儲單元在內(nèi)存中的排列序號(編號)。存儲單元在內(nèi)存中的排列序號(編號)。l存儲分配存儲分配: :系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針分配連續(xù)存儲系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針分配連續(xù)存儲單元,用于存儲有關(guān)數(shù)據(jù),其變量名、數(shù)組名
6、、結(jié)構(gòu)體名、單元,用于存儲有關(guān)數(shù)據(jù),其變量名、數(shù)組名、結(jié)構(gòu)體名、指針名代表連續(xù)存儲單元指針名代表連續(xù)存儲單元首地址首地址。l指針變量(指針)指針變量(指針): :為其分配的存儲單元用于保存其它變量、為其分配的存儲單元用于保存其它變量、數(shù)組、結(jié)構(gòu)體的地址。通過改變其所存儲的地址內(nèi)容實(shí)現(xiàn)數(shù)組、結(jié)構(gòu)體的地址。通過改變其所存儲的地址內(nèi)容實(shí)現(xiàn)動態(tài)數(shù)據(jù)結(jié)構(gòu)。動態(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 概述第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述存儲結(jié)構(gòu)存儲結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)11.1 11.1 概述概述/ /存儲結(jié)構(gòu)存儲結(jié)構(gòu)/ /示例示例l存儲單元地址存儲單元地址: :存儲單元在內(nèi)存中的排列序號(編號)。存儲單元在內(nèi)存中的排列序號(編號)。l存儲分配存儲分配: :系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針分配連續(xù)存
8、儲系統(tǒng)為變量、數(shù)組、結(jié)構(gòu)體、指針分配連續(xù)存儲單元,用于存儲有關(guān)數(shù)據(jù),其變量名、數(shù)組名、結(jié)構(gòu)體名、單元,用于存儲有關(guān)數(shù)據(jù),其變量名、數(shù)組名、結(jié)構(gòu)體名、指針名代表連續(xù)存儲單元首地址。指針名代表連續(xù)存儲單元首地址。l指針變量(指針)指針變量(指針): :為其分配的存儲單元用于保存其它變量、為其分配的存儲單元用于保存其它變量、數(shù)組、結(jié)構(gòu)體的地址。通過改變其所存儲的地址內(nèi)容實(shí)現(xiàn)數(shù)組、結(jié)構(gòu)體的地址。通過改變其所存儲的地址內(nèi)容實(shí)現(xiàn)動態(tài)數(shù)據(jù)結(jié)構(gòu)。動態(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 概述第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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概述概述存儲結(jié)構(gòu)存儲結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)11.1 11.1 概述概述/ /訪問方式訪問方式11.1
11、概述第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)l直接訪問直接訪問: :直接訪問存儲單元中的內(nèi)容。如對普通變量、數(shù)直接訪問存儲單元中的內(nèi)容。如對普通變量、數(shù)組元素、結(jié)構(gòu)體成員的訪問,采用直接訪問方式。如圖組元素、結(jié)構(gòu)體成員的訪問,采用直接訪問方式。如圖12-12-2 2所示。所示。l間接訪問間接訪問: :先從存儲單元中得到被訪問存儲單元地址,然后先從存儲單元中得到被訪問存儲單元地址,然后通過該地址訪問被訪問存儲單元中的內(nèi)容。如對指針變量通過該地址訪問被訪問存儲單元中的內(nèi)容。如對指針變量的訪問,采用間接訪問方式。如圖的訪問,采用間接訪問方式。如圖12-312-3所示。所示。l指針變量存
12、儲單元中保存目標(biāo)變量地址,通常用箭頭表示。指針變量存儲單元中保存目標(biāo)變量地址,通常用箭頭表示。F90F90指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。l指針變量聲明后指針變量聲明后, ,未分配存儲空間未分配存儲空間, ,訪問前需分配存儲空間。訪問前需分配存儲空間。 ( (示例示例) )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概述概述存儲結(jié)構(gòu)存儲結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)11.1 11.1 概述概述/ /訪問方式訪問方式/ /示例示例11.1 概述第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)l直接訪問直接訪問: :直接訪問存儲單元中的內(nèi)容。如對普通變量、數(shù)直接訪問存儲單元中的內(nèi)容。如對普通變量、數(shù)組元素、結(jié)構(gòu)體成員的訪問,采用直接訪問方式。如圖組元素、結(jié)構(gòu)體成員的訪問,采用直接訪問方式。如圖12-12-2 2所示。所示。l間接訪問間接訪問: :先從存儲單元中得到被訪問存儲單元地址,然后先從存儲單元中得到被訪問存儲單元地址,然后通過該地址訪問被訪問存儲單元中的內(nèi)
14、容。如對指針變量通過該地址訪問被訪問存儲單元中的內(nèi)容。如對指針變量的訪問,采用間接訪問方式。如圖的訪問,采用間接訪問方式。如圖12-312-3所示。所示。l指針變量存儲單元中保存目標(biāo)變量地址,通常用箭頭表示。指針變量存儲單元中保存目標(biāo)變量地址,通常用箭頭表示。F90F90指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。指針保存目標(biāo)變量名稱,將指針看成目標(biāo)變量的別名。l指針變量聲明后指針變量聲明后, ,未分配存儲空間未分配存儲空間, ,訪問前需分配存儲空間。訪問前需分配存儲空間。 ( (示例示例) )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概述概述存儲結(jié)構(gòu)存儲結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)! !例例11.1 11.1 使用指針實(shí)現(xiàn)兩個整數(shù)交換使用指針實(shí)現(xiàn)兩個整數(shù)交換INTEGER,TARGET : I,J INTEGER,TARGET : I,J ! !聲明兩個目標(biāo)變量聲明兩個目標(biāo)變量I I和和J JINTEGER,POINTER : P1,P2,P3 INTEGER,POINTER : P1,P2,P3 ! !聲明三個指針
16、變量聲明三個指針變量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 ! !給指針分配指向給指針分配指向I I和和J J的存儲空間的存儲空間 WRITE(WRITE(* *, ,* *) ) 未交換數(shù)據(jù):未交換數(shù)據(jù):,P1,P2 ,P1,P2 ! !通過指針變量間接輸出通過指針變量間接輸出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 ! !通過指針變量間接輸出通過指針變量間接輸出J J和和I I的值的值ENDENDI I2525P1P1圖圖12-4 12-4 指針交換指針交換J J3535P2P2J J3535P2P2P1P1P3P3交換前交換前交換后交換后I I252511.1 11.1 概述概述/ /指針聲明指針聲明11.1 概述第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)lPOINTERPOINTER屬性屬性: :通過通過POINTERPOINTER屬性聲明指針變量。屬性聲明指針變量。lTARGETTARGET屬性屬性: :通過通過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 概述概述存儲結(jié)構(gòu)存儲結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明指針狀態(tài)指針狀態(tài)11.1 11.1 概述概述/ /指針狀態(tài)指針狀態(tài)11.1 概述第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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)變量別名。概述概述存儲結(jié)構(gòu)存儲結(jié)構(gòu)訪問方式訪問方式指針聲明指針聲明
20、指針狀態(tài)指針狀態(tài)11.2 11.2 指針引用和賦值指針引用和賦值/ /指針引用指針引用l指針引用:指針引用:引用指針?biāo)改繕?biāo)變量。引用指針?biāo)改繕?biāo)變量。11.2 指針引用和賦值第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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 指針引用和賦值第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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 指針引用和賦值第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)
24、指針與動態(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ù)對待的指針。整型指針可參與字節(jié)整數(shù)對待的指針。整型指針可參與整數(shù)運(yùn)算。整數(shù)運(yùn)算。l整型指針組成整型指針組成: :指針、基變量、目標(biāo)對象。指針、基變量、目標(biāo)對象。l創(chuàng)建指針步驟創(chuàng)建指針步
27、驟: :u第一步:將一個指針基變量鏈接在一個整型指針上。第一步:將一個指針基變量鏈接在一個整型指針上。 POINTER(POINTER( , )u第二步:將目標(biāo)對象地址賦值給整型指針。第二步:將目標(biāo)對象地址賦值給整型指針。 =LOC(=LOC() =MALLOC(=MALLOC()l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)LOCLOC功能功能: :獲得目標(biāo)對象起始內(nèi)存地址。獲得目標(biāo)對象起始內(nèi)存地址。l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)MALLOCMALLOC功能功能: :計(jì)算表達(dá)式值計(jì)算表達(dá)式值n n,分配,分配n n個字節(jié)存儲單個字節(jié)存儲單元,獲得存儲單元起始地址。元,獲得存儲單元起始地址。 (示例示例)11.3 整型指針第十一講第
28、十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)概述概述例例11.611.6例例11.711.711.3 11.3 整型指針整型指針/ /概述概述/ /示例示例l整型指針整型指針: :地址按地址按4 4字節(jié)整數(shù)對待的指針。整型指針可參與字節(jié)整數(shù)對待的指針。整型指針可參與整數(shù)運(yùn)算。整數(shù)運(yùn)算。l整型指針組成整型指針組成: :指針、基變量、目標(biāo)對象。指針、基變量、目標(biāo)對象。l創(chuàng)建指針步驟創(chuàng)建指針步驟: :u第一步:將一個指針基變量鏈接在一個整型指針上。第一步:將一個指針基變量鏈接在一個整型指針上。 POINTER(POINTER( , )u第二步:將目標(biāo)對象地址賦值給整型指針。第二步:將目標(biāo)對象地址賦值
29、給整型指針。 =LOC(=LOC() =MALLOC(=MALLOC()l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)LOCLOC功能功能: :獲得目標(biāo)對象起始內(nèi)存地址。獲得目標(biāo)對象起始內(nèi)存地址。l標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)MALLOCMALLOC功能功能: :計(jì)算表達(dá)式值計(jì)算表達(dá)式值n n,分配,分配n n個字節(jié)存儲單個字節(jié)存儲單元,獲得存儲單元起始地址。元,獲得存儲單元起始地址。 (示例示例)11.3 概述第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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)對象和目標(biāo)對象J J的等價關(guān)系的等價關(guān)系P=LOC(J) P=LOC(J) ! !將目標(biāo)對象將目標(biāo)對象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 ! !等價于設(shè)置等價于設(shè)置B(2)B(2)為為125.0125.0 WRITE(WRITE(* *, ,* *) ) B(2) B(2) END END通過通過POINTERPOINTER語句語句, ,將指針基數(shù)組將指針基數(shù)組
32、B B與目標(biāo)對象數(shù)組與目標(biāo)對象數(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 整型指針第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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 通過指針運(yùn)算和指針基變量通過指針運(yùn)算和指針基變量B B的賦值操作的賦值操作, ,生成數(shù)組生成數(shù)組A A的的5 5個元個元素值。通過指針運(yùn)算和指針基變量素值。通過指針運(yùn)算和指針基變量B B的賦值操作的賦值操作, ,生成數(shù)組生成數(shù)組A A的的5 5個元素值。整型指針個元素值。整型指針P P增加增加
34、4,4,相當(dāng)于把數(shù)組的下標(biāo)加相當(dāng)于把數(shù)組的下標(biāo)加1 1。11.3 整型指針第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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ù)和語句/NULLIFY/NULLIFYlNULLIFY:NULLIFY:將指針設(shè)置為空狀態(tài)??諣顟B(tài)可用標(biāo)準(zhǔn)函數(shù)將指針設(shè)置為空狀態(tài)??諣顟B(tài)可用標(biāo)準(zhǔn)函數(shù)ASSOCIATEDASSOCIATED進(jìn)行檢測。進(jìn)行檢測。 指針聲明后,一般應(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ù)和語句第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATE11.411.4與指針相關(guān)的函數(shù)和語句/ASSOCIATED/ASSOCIATEDlASSOCIATED:ASSOCIATED:判定是否有目標(biāo)對象與指針鏈接。判定是否有目標(biāo)對象與指針鏈接。 如:如: 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ù)和語句第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATE11.411.4與指針相關(guān)的函數(shù)和語句/ALLOCATE/ALLOCATElALLOCATE:ALLOCATE:為指針分配所指向的存儲空間。為指針分配所指向的存儲空間。 如:如: REALREAL,POINTER : P1POINTER : P1 ALLOCA
38、TE(P1) ALLOCATE(P1) P1=911.911 P1=911.91111.4 與指針相關(guān)的函數(shù)和語句第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATEP1P1P1P1911.911911.91111.411.4與指針相關(guān)的函數(shù)和語句/DEALLOCATE/DEALLOCATElDEALLOCATE:DEALLOCATE:釋放指針?biāo)复鎯臻g。釋放指針?biāo)复鎯臻g。 如:如: REALREAL,POINTER : P1POINTER : P
39、1 ALLOCATE(P1) ALLOCATE(P1) P1=911.911 P1=911.911 DEALLOCATE DEALLOCATE(P1P1)11.4 與指針相關(guān)的函數(shù)和語句第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)P1P1P1P1911.911911.911NULLIFYNULLIFYASSOCIATEDASSOCIATEDALLOCATEALLOCATEDEALLOCATEDEALLOCATE11.5 11.5 指針數(shù)組指針數(shù)組/ /指針數(shù)組指針數(shù)組11.5 指針數(shù)組第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針數(shù)組指針數(shù)組函數(shù)返回函數(shù)返回l指針數(shù)組指針
40、數(shù)組: :具有具有POINTERPOINTER屬性的數(shù)組。指針數(shù)組類似動態(tài)數(shù)屬性的數(shù)組。指針數(shù)組類似動態(tài)數(shù)組,聲明時,指針數(shù)組不指定數(shù)組維的上下界。如:組,聲明時,指針數(shù)組不指定數(shù)組維的上下界。如: REAL,DIMENSION(:),POINTER : AREAL,DIMENSION(:),POINTER : A l存儲分配存儲分配: :指針數(shù)組需通過指針數(shù)組需通過ALLOCATEALLOCATE語句分配存儲空間。如:語句分配存儲空間。如: ALLOCATEALLOCATE(A A(5050) 例:使用指針數(shù)組存儲下三角矩陣。例:使用指針數(shù)組存儲下三角矩陣。 (程序程序)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ù)組第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針數(shù)組指針數(shù)組函數(shù)返回函數(shù)返回l指針數(shù)組指針數(shù)組: :具有具有POINTERPOINTER屬性的數(shù)組。指針數(shù)組類似動態(tài)數(shù)屬性的數(shù)組。指針數(shù)組類似動態(tài)數(shù)組,聲明時,指針數(shù)組不指定數(shù)組維的上下界。如:組,聲明時,指針數(shù)組不指定數(shù)組維的上下界。如: REAL,DIMENSION(:),POINTER : AREAL
42、,DIMENSION(:),POINTER : A l存儲分配存儲分配: :指針數(shù)組需通過指針數(shù)組需通過ALLOCATEALLOCATE語句分配存儲空間。如:語句分配存儲空間。如: ALLOCATEALLOCATE(A A(5050) 例:使用指針數(shù)組存儲下三角矩陣。例:使用指針數(shù)組存儲下三角矩陣。 (程序程序)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ù)組第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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ù)組分配存儲單元數(shù)組分配存儲單元 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 動態(tài)鏈表動態(tài)鏈表/ /概述概述11.6 動態(tài)鏈表第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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、鏈表是通過結(jié)點(diǎn)中的指針成員將若干個具有相同派生類型鏈表是通過結(jié)點(diǎn)中的指針成員將若干個具有相同派生類型的結(jié)點(diǎn)拉成鏈,從而對一些在內(nèi)存中不連續(xù)的數(shù)據(jù)進(jìn)行動的結(jié)點(diǎn)拉成鏈,從而對一些在內(nèi)存中不連續(xù)的數(shù)據(jù)進(jìn)行動態(tài)處理的一種方式。鏈表中的第一個結(jié)點(diǎn)稱為頭結(jié)點(diǎn),指態(tài)處理的一種方式。鏈表中的第一個結(jié)點(diǎn)稱為頭結(jié)點(diǎn),指向頭結(jié)點(diǎn)的指針稱為頭指針。向頭結(jié)點(diǎn)的指針稱為頭指針。該派生類型的成員中至少有該派生類型的成員中至少有一個指向本派生類型的指針,鏈表中最后一個表目的成員一個指向本派生類型的指針,鏈表中最后一個表目的成員的指針值為空,其余表目的成員的指針均指向下一個表目。的指針值為空,其余表目的成員的指針均指向下一個表
49、目。為了便于對鏈表的操作,需要引入另一個派生類型,它用為了便于對鏈表的操作,需要引入另一個派生類型,它用于存放鏈表的頭指針。鏈表的頭指針表示鏈表的存在與否于存放鏈表的頭指針。鏈表的頭指針表示鏈表的存在與否( (頭指針為空表示空鏈表,否則表示鏈表中至少有一個以上頭指針為空表示空鏈表,否則表示鏈表中至少有一個以上的表目的表目) )。如果鏈表尾結(jié)點(diǎn)的指針成員指向了頭結(jié)點(diǎn),這樣。如果鏈表尾結(jié)點(diǎn)的指針成員指向了頭結(jié)點(diǎn),這樣的鏈表稱為的鏈表稱為“循環(huán)鏈表循環(huán)鏈表”。在本節(jié)主要討論單向鏈表。在本節(jié)主要討論單向鏈表( (簡稱簡稱鏈表鏈表) )。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 動態(tài)鏈表動態(tài)鏈表/ /創(chuàng)建和搜索創(chuàng)建和搜索11.6 動態(tài)鏈表第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu) 創(chuàng)建鏈表的過程就是把一個個結(jié)點(diǎn)插入鏈表的過程。因而創(chuàng)建鏈表的過程就是把一個個結(jié)點(diǎn)插入鏈表的過程。因而創(chuàng)建鏈表的操作實(shí)際上就是不斷地插入的過程。創(chuàng)建鏈表的操作實(shí)
51、際上就是不斷地插入的過程。 ALLOCATE(Q) !ALLOCATE(Q) !創(chuàng)建一個新結(jié)點(diǎn)創(chuàng)建一個新結(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上述四條語句執(zhí)行后上述四條語句執(zhí)行后, ,建立了有一個結(jié)點(diǎn)的鏈表建立了有一個結(jié)點(diǎn)的鏈表, ,如圖如圖11-111-1所示。所示。 ALLOCATE(P) !ALLOCATE(P) !創(chuàng)建一個
52、新結(jié)點(diǎn)創(chuàng)建一個新結(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上述四條語句執(zhí)行后上述四條語句執(zhí)行后, ,建立了有二個結(jié)點(diǎn)的鏈表建立了有二個結(jié)點(diǎn)的鏈表, ,如圖如圖11-211-2所示。所示。 圖圖11-1 11-1 一個結(jié)點(diǎn)的鏈表一個結(jié)點(diǎn)的鏈表 圖圖11-2 11-2 二個結(jié)點(diǎn)的鏈表二個結(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)開始搜索鏈表需要從表頭結(jié)點(diǎn)開始搜索鏈表, ,完成修改、輸完成修改、輸出、統(tǒng)計(jì)等有關(guān)處理操作。若出、統(tǒng)計(jì)等有關(guān)處理操作。若headhead為表頭結(jié)點(diǎn)指針為表頭結(jié)點(diǎn)指針, ,則一般則一般通過下面語句完成搜索操作。通過下面語句完成搜索操作。 Q=headQ=head DO WHILE (ASSOCIATED(Q) DO WHILE (ASSOCIATED(Q) ! !有關(guān)處理操作語句有關(guān)處理操作語句 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 動態(tài)鏈表動態(tài)鏈表/ /插入節(jié)點(diǎn)插入節(jié)點(diǎn)11.6 動態(tài)鏈表第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)執(zhí)行下面語句創(chuàng)建新結(jié)點(diǎn)執(zhí)行下面語句創(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í)行賦值語執(zhí)行賦值語句句head=Qhead=Q實(shí)現(xiàn)插入實(shí)現(xiàn)插入 2 2、假設(shè)鏈表為非空表假設(shè)鏈表為非空表, ,在表頭在表頭headhead前插入前插入, ,執(zhí)行下面賦值語執(zhí)行下面賦值語句實(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í)行下面賦值語句實(shí)執(zhí)行下面賦值語句實(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 動態(tài)鏈表動態(tài)鏈表/ /刪除節(jié)點(diǎn)刪除節(jié)點(diǎn)11.6 動態(tài)鏈表第十一講第十一講 指針與動態(tài)數(shù)據(jù)結(jié)構(gòu)指針與動態(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)語句將結(jié)點(diǎn)釋放語句將結(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í)行賦值語句執(zhí)行賦值語句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í) 行 賦 值 語 句執(zhí) 行 賦 值 語 句 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語句,為主調(diào)程序提供外部子程語句,為主調(diào)程序提供外部子程序有關(guān)接口信息,接口界面可看作是序有關(guān)接口信息,接口界面可看作是EXTERNALEXTERNAL語句的擴(kuò)充,語句的擴(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、口/ /說明說明12.1 接口 對于一些常規(guī)函數(shù)和子例行程序?qū)τ谝恍┏R?guī)函數(shù)和子例行程序, ,使用時不需要用使用時不需要用INTERFACEINTERFACE接口聲明它們的接口信息接口聲明它們的接口信息, ,但遇到以下情況必須在主調(diào)程序中但遇到以下情況必須在主調(diào)程序中使用接口界面塊使用接口界面塊: :l外部函數(shù)返回結(jié)果是一個數(shù)組外部函數(shù)返回結(jié)果是一個數(shù)組, ,即外部函數(shù)名類型為數(shù)組。即外部函數(shù)名類型為數(shù)組。l外部函數(shù)返回結(jié)果是一個字符串外部函數(shù)返回結(jié)果是一個字符串, ,且長度不是常數(shù)且長度不是常數(shù), ,也不是假也不是假定長度定長度( (* *) )。l外部函數(shù)返回結(jié)果是一個指針。外部函數(shù)返回結(jié)
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年留置針項(xiàng)目立項(xiàng)申請報(bào)告
- 2025至2030年中國凍釀鯪魚行業(yè)投資前景及策略咨詢報(bào)告
- 2025至2030年中國以太網(wǎng)雙絞線信號防雷器行業(yè)投資前景及策略咨詢報(bào)告
- 2025年衛(wèi)生院及社區(qū)醫(yī)療服務(wù)項(xiàng)目立項(xiàng)申請報(bào)告
- 大班飲食安全課件
- 數(shù)學(xué)理論考試題庫及答案
- 教育學(xué)心里試題及答案
- 車位銷售買賣合同協(xié)議書
- 導(dǎo)游高級考試題庫及答案
- 設(shè)備拆除合同協(xié)議書模板
- 酒店質(zhì)檢分析報(bào)告
- 我國圓明園文化遺產(chǎn)的資料
- 《血氨的檢測與臨床》課件
- AOI直通率持續(xù)提升報(bào)告
- 2023年高考海南卷化學(xué)試卷真題(含答案)
- 醫(yī)保按病種分值付費(fèi)(DIP)院內(nèi)培訓(xùn)
- 部編版小學(xué)道德與法治四年級下冊期末復(fù)習(xí)簡答及分析題專練(含答案)
- 合肥軌道3號線8標(biāo)創(chuàng)建標(biāo)準(zhǔn)化工地實(shí)施方案
- 【5A】Word2016全套高級培訓(xùn)教程
- 物業(yè)組織機(jī)構(gòu)設(shè)置及人員配置方案
- 機(jī)械設(shè)計(jì)課程設(shè)計(jì)鑄造車間碾砂機(jī)的傳動裝置-一級圓柱圓錐齒輪減速器設(shè)計(jì)
評論
0/150
提交評論