當前位置:首頁 » 服務存儲 » 與圖的鄰接表存儲方式相比
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

與圖的鄰接表存儲方式相比

發布時間: 2022-01-12 06:27:54

Ⅰ 關於數據結構中圖的儲存方式的選擇

首先你要明白,鄰接鏈表存圖的空間復雜度與圖中邊的數量有關(O(N+E) E表示圖中邊的數目),而數組存圖空間復雜度與點數有關(O(N^2)N表示點數)
看點的數量,如果點的數量不是很大(比如幾百個左右或者更小)那麼二者都可以選擇。
如果點的數量過大的話,用數組存儲稀疏圖會造成大量的空間浪費,此時選擇使用鄰接表更好。

Ⅱ 圖的鄰接表存儲結構 表頭結點後面跟的鄰接結點的排列先後順序有要求嗎

可以,這個沒有什麼區別。
四種表示圖的方法:
1.鄰接矩陣
2.鄰接表
3.鄰接多重表
4.十字鏈表

Ⅲ 已知有向圖的鄰接表存儲結構如下圖所示

深度優先是從某個頂點出發,訪問完後,尋找一個未訪問的鄰接頂點繼續深度優先,如果此路不同就往回退,所以看鄰接表,首先訪問V1,完了後順鏈尋找沒有訪問的鄰接頂點,自然鏈表中的第一個結點就是v3,接著轉到v3再來深度優先,訪問v3後,在其鏈表中第一個鄰接頂點是v4
接著訪問v4,下面走不通,回到v3,繼續順鏈往後,自然是v5,v5的鄰接頂點中v2還沒有訪問
所以序列為v1, v3, v4, v5, v2
再看廣度優先,從某個頂點完成後,需要一口氣將其鄰接未訪問的所有頂點都訪問,後面類推
於是過程是先v1,再順鏈將v3,v2依次訪問完,然後再依次訪問v3和v2的各個未訪問鄰接頂點,v3鏈表中順鏈可以訪問v4,v5,所以最後訪問序列為v1, v3, v2, v4, v5

Ⅳ 無向圖的鄰接表存儲方式和深度優先遍歷的方法(代碼)

type
node=record
y:longint;
flag:boolean;
next:longint;
p:-1..1;
end;
var
n,m,i,j,x,y:longint;
map:array [0..40000] of node;
a:array [0..40000] of longint;
procere dfs(i:longint);
var
j:longint;
begin
j:=a[i];
while j>-1 do begin
if map[j].flag then begin
map[j].flag:=false;
map[j xor 1].flag:=false;
if map[j].p>-1 then begin
map[j].p:=0;
writeln(i);
dfs(map[j].y);
map[j].p:=1;
end;
end;
j:=map[j].next;
end;
end;

begin
readln(n,m);
for i:=1 to n do a[i]:=-1;
for j:=1 to m do begin
readln(x,y);
map[2*j-2].y:=y;
map[2*j-2].next:=a[x];
map[2*j-2].flag:=true;
a[x]:=2*j-2;
map[2*j-1].y:=x;
map[2*j-1].next:=a[y];
map[2*j-1].flag:=true;
a[y]:=2*j-1;
end;
map[a[1]].p:=0;
dfs(1);
map[a[1]].p:=1;
end.

Ⅳ 鄰接表存儲時,空間復雜度O( n+e),還是O(n)

O(n+e),取n次最小權,每次取完會進行n次更新。如果能達到o(n+e),就不需要O(n)。

在有向圖中,描述每個點向別的節點連的邊(點a->點b這種情況)。在無向圖中,描述每個點所有的邊。與鄰接表相對應的存圖方式叫做邊集表,這種方法用一個容器存儲所有的邊。

對於有向圖,vi的鄰接表中每個表結點都對應於以vi為始點射出的一條邊。因此,將有向圖的鄰接表稱為出邊表。



(5)與圖的鄰接表存儲方式相比擴展閱讀:

n個頂點e條邊的有向圖,它的鄰接表表示中有n個頂點表結點和e個邊表結點。(因為有向圖是單向的)

在有向圖中,為圖中每個頂點vi建立一個入邊表的方法稱逆鄰接表表示法。入邊表中的每個表結點均對應一條以vi為終點(即射入vi)的邊。

n個頂點e條邊的有向圖,它的逆鄰接表表示中有n個頂點表結點和e個邊表結點。

Ⅵ 圖的鄰接矩陣和鄰接表的存儲結構各有什麼特點

圖的鄰接表數據類型描述如下:
const int N=maxn; // maxn表示圖中最大頂點數
const int E=maxe ; // maxe圖中最大邊數
struct Edge{
int u,v; //邊所鄰接的兩個頂點
int w; //邊的權值
int next; //邊指針,指向下一條邊的內存池地址
}edge[E]; // 靜態內存池,用於分配邊
int head[N]; // 表頭
int num; // 內存池的指針

Ⅶ 在線急求熟悉圖的兩種常用的存儲結構,鄰接矩陣和鄰接表。

#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define maxvernum 100
typedef struct node
{
int adjvex;
struct node *next;
}nodetype;
typedef struct frontnode
{
int data;
struct node *next;
}frontnodetype;
frontnodetype adjlist[maxvernum];
/*********************************************/
void main()
{
void bfs(frontnodetype g[],int v,int c[]);
void travelgraph(frontnodetype g[],int n);
frontnodetype adjlist[6];
int i,j,m;
for(i=1;i<=5;i++)
{
adjlist[i].data=i;
adjlist[i].next=NULL;
}
for(j=1;j<=5;j++)
{
printf("進入第%d次循環\n",j);
printf("開始輸入前請輸入一個不為0的m值以便輸入\n");
scanf("%d",&m);
while(m!=0)
{
int x;
printf("請輸入結點序號(x=0表示後面沒有結點):\n");
if(x!=0)
{
scanf("%d",&x);
nodetype *p;
p=(nodetype *)malloc(sizeof(nodetype));
p->adjvex=x;p->next=NULL;
p->next=adjlist[j].next;
adjlist[j].next=p;
}
else break;
printf("是否停止?(m為0時停止輸入,m為1時繼續輸入。)\n");
scanf("%d",&m);
}
}
printf("廣度優先搜索序列為:\n");
travelgraph(adjlist,5);
}
/************************************************/
void bfs(frontnodetype g[],int v,int c[])
{
int q[6],r=0,f=0;
nodetype *p;
c[v]=1;
printf("%d\n",v);
q[0]=v;
whille(f<=r)
{
v=q[f++];
p=g[v].next;
while(p!=NNLL)
{
v=p->adjvex;
if(c[v]==0)
{
c[v]=1;
printf("%d\n",v);
}
p=p->next;
}
}
}
/************************************************/
void travelgraph(frontnodetype g[],int n)
{
int v;
int c[6];
for(v=1;v<=n;v++)
c[v]=0;
for(v=1;v<=n;v++)
if(c[v]==0)
dfs(g,v,c);

}

Ⅷ 無向連通圖的鄰接表的存儲

最近在看這部分,可惜沒記住無向連通圖鄰接表的定義。

你的程序,我看看出了1點問題:
1、typedef struct ArcNode{ //邊(表結點)
int adjvex; //該弧所指向的頂點的位置
struct ArcNode *nextarc; //指向下一條弧的指針
int info; //該弧相關信息的指針
};
缺東西呢,typedef 是要給 struct ArcNode 起個別名,但是你並沒有做。
可改成 typedef struct ArcNode {.....} ArcNode, *pArcNode; 之類的。或者把 typedef 去了
===============================================
void buildhead(ALGraph &G) //創建一個頭結點表
{
int i=65;
while(i < G.vernum+65)
{
G.vertices[i].data = (char)i;
G.vertices[i].firstarc->nextarc=NULL;
i++;
} // 這個過程為什麼要從65 開始呢?不是最大有20個節點嗎?G.vernum的下標應該是 0 - 19 猜對吧?
}

Ⅸ 一個單循環鏈表改寫為雙循環鏈表演算法和按圖的鄰接表存儲方式給出圖的深度優先演算法dsf求助,著急啊!!

sdgsa

Ⅹ 在有向圖的鄰接表和逆鄰接表兩種存儲中,那種便於頂點出度計算

逆鄰接表。所謂逆鄰接表就是在有向圖的鄰接表中,對每個頂點鏈接的是指向該頂點的邊。表結點中頂點v出現的次數就是該頂點v的出度。