版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
圖的幾種存儲(chǔ)結(jié)構(gòu)比較研究
班級:軟件工程六班
姓名:馬盛國
學(xué)號:140120010168圖的幾種主要存儲(chǔ)結(jié)構(gòu)
1.鄰接矩陣2.鄰接表3.十字鏈表4.鄰接多重表
1.鄰接矩陣
對于無向圖,(vi,vj)和(vj,vi)表示同一條邊,因此,在鄰接矩陣中aij=aji。對有向圖,弧<vi,vj>和<vj,vi>表示方向不同的兩條弧,所以aij≠aji。
在圖的頂點(diǎn)確定的情況下,其鄰接矩陣表示是唯一的。鄰接矩陣(AdjacencyMatrix)是表示圖中頂點(diǎn)之間相鄰關(guān)系的矩陣。設(shè)G=(V,E)是具有n個(gè)頂點(diǎn)的圖,則G的鄰接矩陣是具有如下性質(zhì)的n階方陣An×n:
無向圖的鄰接矩陣是以主對角線對稱的,第i行(列)1的個(gè)數(shù)就是頂點(diǎn)vi
的度。即上圖中:D(1)=2 D(2)=3 D(3)=2 D(4)=3 D(5)=2
有向圖的鄰接矩陣可能是不對稱的。在有向圖中:▲第i
行中1的個(gè)數(shù)就是頂點(diǎn)i
的出度。▲第j列中1的個(gè)數(shù)就是頂點(diǎn)j
的入度。▲有向圖中各頂點(diǎn)的入度之和等于出度之和。ID(vi)=
OD(vi)=
上圖中:D(1)=OD(1)+ID(1)=3D(2)=OD(2)+ID(2)=3 D(3)=OD(3)+ID(3)=3D(4)=OD(4)+ID(4)=3 ■帶權(quán)值的鄰接矩陣總結(jié):(1)因?yàn)椴豢紤]頂點(diǎn)到自身的邊或弧,所以鄰接矩陣的對角線必為0;(2)無向圖的鄰接矩陣為對稱矩陣,所以可用特殊矩陣壓縮方式存儲(chǔ);(3)無向圖的頂點(diǎn)的度為鄰接矩陣中該頂點(diǎn)對應(yīng)的行(列)中非零元個(gè)數(shù);(5)有向圖的鄰接矩陣不一定為對稱矩陣;(6)有向圖中頂點(diǎn)的入度為該頂點(diǎn)對應(yīng)列中非零元的個(gè)數(shù),出度為該頂點(diǎn)對應(yīng)行中為非零元的個(gè)數(shù)。鄰接矩陣表示法中圖的類型定義:#defineMAXSIZE100/*圖的頂點(diǎn)個(gè)數(shù)*/typedefstruc{intno;//頂點(diǎn)編號
infotypeinfo;//頂點(diǎn)其它信息}vertextype;//頂點(diǎn)類型typedefstruct//圖的定義{vertextypevexs[MAXSIZE];/*頂點(diǎn)信息表*/intedges[MAXSIZE][MAXSIZE];/*鄰接矩陣*/intn;/*頂點(diǎn)數(shù)*/inte;/*邊數(shù)*/}mgraph;21435無向圖t->n=5t->e=6mgraph*t;BADCE有向圖mgraph*t;t->n=5t->e=6注:用兩個(gè)數(shù)組分別存儲(chǔ)頂點(diǎn)表和鄰接矩陣#defineINFINITYINT_MAX//最大值∞#defineMAX_VERTEX_NUM20//假設(shè)的最大頂點(diǎn)數(shù)Typedefenum{DG,DN,AG,AN}GraphKind;
//有向/無向圖,有向/無向網(wǎng)Typedefstruct
ArcCell{//弧(邊)結(jié)點(diǎn)的定義
VRTypeadj;//頂點(diǎn)間關(guān)系,無權(quán)圖取1或0;有權(quán)圖取權(quán)值類型
InfoType*info;//該弧相關(guān)信息的指針}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];Typedefstruct{//圖的定義VertexTypevexs[MAX_VERTEX_NUM];//頂點(diǎn)表,用一維向量即可AdjMatrixarcs;//鄰接矩陣IntVernum,arcnum;//頂點(diǎn)總數(shù),弧(邊)總數(shù)GraphKindkind;//圖的種類標(biāo)志}Mgraph;
圖的鄰接矩陣存儲(chǔ)表示(參見教材P161)對于n個(gè)頂點(diǎn)的圖或網(wǎng),空間效率=O(n2)StatusCreateUDN(Mgraph&G){//無向網(wǎng)的構(gòu)造,用鄰接矩陣表示scanf(&G.vexnum,&G.arcnum,&IncInfo);//輸入總頂點(diǎn)數(shù),總弧數(shù)和信息for(i=0;i<G.vexnum,;++i)scanf(&G.vexs[i]);//輸入頂點(diǎn)值,存入一維向量中for(i=0;i<G.vexnum;++i)//對鄰接矩陣n*n個(gè)單元初始化,adj=∞,info=NULLfor(j=0;j<G.vexnum;++j)G.arcs[i][j]={INFINITY,NULL};for(k=0;k<G.arcnum;++k){
//給鄰接矩陣有關(guān)單元賦初值(循環(huán)次數(shù)=弧數(shù)
scanf(&v1,&v2,&w);
//輸入弧的兩頂點(diǎn)以及對應(yīng)權(quán)值
i=LocateVex(G,v1);j=LocateVex(G,v2);
//找到兩頂點(diǎn)在矩陣中的位置(n次?
G.arcs[i][j].adj=w;
//輸入對應(yīng)權(quán)值
If(IncInfo)Input(*G.arcs[i][j].info);
//如果弧有信息則填入
G.arcs[i][j]=G.arcs[j][i];
//無向網(wǎng)是對稱矩陣
}returnOK;}//CreateUDN
例:用鄰接矩陣生成無向網(wǎng)的算法對于n個(gè)頂點(diǎn)e條弧的網(wǎng),建網(wǎng)時(shí)間效率=O(n2+n+e*n)7.2.2鄰接表
鄰接表是圖的一種鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。在鄰接表中為圖中每個(gè)頂點(diǎn)建立一個(gè)單鏈表,用單鏈表中的一個(gè)結(jié)點(diǎn)表示依附于該頂點(diǎn)的一條邊(或表示以該頂點(diǎn)為弧尾的一條?。Q為邊(或?。┙Y(jié)點(diǎn)。
因此鄰接表是由單鏈表的表頭形成的頂點(diǎn)表和單鏈表其余結(jié)點(diǎn)形成的邊表兩部分組成。圖的鄰接表表表示不唯一。
圖的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)特征:(1)為每個(gè)頂點(diǎn)建立一個(gè)單鏈表;(2)第i個(gè)單鏈表中包含頂點(diǎn)Vi的所有鄰接頂點(diǎn)。
無向圖的鄰接表(不帶權(quán))表結(jié)點(diǎn)表頭結(jié)點(diǎn)datafirstareadjvexnextare
每個(gè)鏈表的前邊附設(shè)一個(gè)表頭結(jié)點(diǎn)。把同一個(gè)頂點(diǎn)發(fā)出的邊鏈接在同一個(gè)邊鏈表中,鏈表的每一個(gè)結(jié)點(diǎn)代表一條邊,叫做表結(jié)點(diǎn)。假設(shè)數(shù)組下標(biāo)自1開始1234
有向圖的鄰接表和逆鄰接表2^13^V1V2V3^2^1^2^V1V2V3G鄰接表逆鄰接表v1v2v3123123在有向圖的鄰接表中,第i
個(gè)邊鏈表鏈接的邊都是頂點(diǎn)i
發(fā)出的邊。也叫做出邊表。在有向圖的逆鄰接表中,第i
個(gè)邊鏈表鏈接的邊都是進(jìn)入頂點(diǎn)i
的邊。也叫做入邊表。鄰接表的類型定義說明:在鄰接表的邊鏈表中,各個(gè)表結(jié)點(diǎn)的鏈入順序任意,視表結(jié)點(diǎn)輸入次序而定(不唯一)。設(shè)圖中有
n
個(gè)頂點(diǎn),e
條邊,則用鄰接表表示無向圖時(shí),需要
n個(gè)表頭結(jié)點(diǎn),2e個(gè)表結(jié)點(diǎn);用鄰接表表示有向圖時(shí),若不考慮逆鄰接表,只需n個(gè)表頭結(jié)點(diǎn),e個(gè)表結(jié)點(diǎn)。帶權(quán)圖的邊表結(jié)點(diǎn)中還應(yīng)保存該邊上的權(quán)值
info。網(wǎng)絡(luò)(帶權(quán)圖)的鄰接表邊表結(jié)點(diǎn)adjvexinfonextareadjvex:頂點(diǎn)號info:邊上所帶的權(quán)nextare:指針圖的鄰接表存儲(chǔ)表示#defineMAX_VERTEX_NUM20//假設(shè)的最大頂點(diǎn)數(shù)TypedefstructArcNode{
intadjvex;//該弧所指向的頂點(diǎn)位置
structArcNode*nextarcs;//指向下一條弧的指針
InfoArc*info;//該弧相關(guān)信息的指針}ArcNode;TypedefstructVNode{
//頂點(diǎn)結(jié)構(gòu)
VertexTypedata;//頂點(diǎn)信息
ArcNode*firstarc;//指向依附該頂點(diǎn)的第一條弧的指針}VNode,AdjList[MAX_VERTEX_NUM];
Typedefstruct{//圖結(jié)構(gòu)
AdjListvertics;//應(yīng)包含鄰接表
intvexnum,arcnum;//應(yīng)包含頂點(diǎn)總數(shù)和弧總數(shù)
intkind;//還應(yīng)說明圖的種類(用標(biāo)志)}ALGraph;
//圖結(jié)構(gòu)空間效率為O(n+2e)或O(n+e)時(shí)間效率為O(n+e)
它是有向圖的另一種鏈?zhǔn)浇Y(jié)構(gòu)。
思路:將鄰接矩陣用鏈表存儲(chǔ),是鄰接表、逆鄰接表的結(jié)合。1、每條弧對應(yīng)一個(gè)結(jié)點(diǎn)(稱為弧結(jié)點(diǎn),設(shè)5個(gè)域)2、每個(gè)頂點(diǎn)也對應(yīng)一個(gè)結(jié)點(diǎn)(稱為頂點(diǎn)結(jié)點(diǎn),設(shè)3個(gè)域)tailvexheadvexHlinktlinkinfo頂點(diǎn)結(jié)點(diǎn)弧結(jié)點(diǎn)三、十字鏈表tailvex:
弧尾頂點(diǎn)位置headvex:
弧頭頂點(diǎn)位置hlink:
弧頭相同的下一弧位置tlink:
弧尾相同的下一弧位置info:
弧信息n個(gè)頂點(diǎn)—用順序存儲(chǔ)結(jié)構(gòu)data:存儲(chǔ)頂點(diǎn)信息。Firstin:
以頂點(diǎn)為弧頭的第一條弧結(jié)點(diǎn)。Firstout:
以頂點(diǎn)為弧尾的第一條弧結(jié)點(diǎn)。dataFirstinFirstout——適用于有向圖#defineMAX_VERTEX_NUM20TypedefstructArcBox{//弧結(jié)點(diǎn)結(jié)構(gòu)
inttailvex,headvex;structArcBox*hlink,*tlink;InfoType*info;}ArcBox;TypedefstructVexNode{//頂點(diǎn)結(jié)構(gòu)
VertexTypedata;ArcBox*firstin,*firstout;}VexNode;Typedefstruct{VexNodexlist[MAX_VERTEX_NUM];//表頭向量
intvexnum,arcnum;}OLGraph;//圖結(jié)構(gòu)十字鏈表存儲(chǔ)結(jié)構(gòu)描述:0v11v22v33v4v1v2v3v4010^2202^^3例:畫出有向圖的十字鏈表。十字鏈表優(yōu)點(diǎn):容易操作,如求頂點(diǎn)的入度、出度等??臻g復(fù)雜度與鄰接表相同;建立的時(shí)間復(fù)雜度與鄰接表相同。3^03^^13^^2^數(shù)組下標(biāo)不屬結(jié)點(diǎn)分量這是無向圖的另一種存儲(chǔ)結(jié)構(gòu),當(dāng)對邊操作時(shí),無向圖應(yīng)采用此種結(jié)構(gòu)存儲(chǔ)。
1、每條邊只對應(yīng)一個(gè)結(jié)點(diǎn)(稱為邊結(jié)點(diǎn)),設(shè)立6個(gè)域;2、每個(gè)頂點(diǎn)也對應(yīng)一個(gè)結(jié)點(diǎn)(頂點(diǎn)結(jié)點(diǎn)),設(shè)立2個(gè)域;markivexilinkjvexjlinkinfo邊結(jié)點(diǎn)四、鄰接多重表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林藝術(shù)學(xué)院《外國文學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 文言主觀簡答試題專訓(xùn)(二)-2025新高考語文一輪復(fù)習(xí)
- 吉林藝術(shù)學(xué)院《概念設(shè)計(jì)》2021-2022學(xué)年第一學(xué)期期末試卷
- 手工品訂單承攬協(xié)議書范文范本
- 2024年大學(xué)生接活互助協(xié)議書模板
- 吉林師范大學(xué)《習(xí)近平總書記關(guān)于教育的重要論述研究》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年處理廢石協(xié)議書模板
- 農(nóng)村地基自建房轉(zhuǎn)讓協(xié)議書范文
- 畜牧業(yè)對氣候變化的影響分析報(bào)告
- 企業(yè)衛(wèi)生安全檢查管理制度
- 上海市浦東新區(qū)2023-2024學(xué)年六年級上學(xué)期期中考試英語試題
- 責(zé)任保險(xiǎn)行業(yè)研究報(bào)告
- (高清版)JGT 225-2020 預(yù)應(yīng)力混凝土用金屬波紋管
- 化學(xué)實(shí)驗(yàn)室安全考試試題-及答案
- 體質(zhì)健康成績測試全自動(dòng)化計(jì)算模板
- 一般跨越架搭設(shè)施工方案
- 《羊道春牧場》讀后感作文5篇
- 上消化道大出血的護(hù)理PPT課件
- RPG游戲概要設(shè)計(jì)文檔
- 鐵塔安裝施工方案(完整版)
- RFQ及新產(chǎn)品開發(fā)流程(參考模板)
評論
0/150
提交評論