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

鄰接表用於什麼圖的存儲

發布時間: 2022-09-03 10:29:39

Ⅰ 用鄰接表表示圖的廣度優先搜索時的存儲結構,通常採用()結構來實現演算法

B。

廣度優先搜索相當於層次遍歷,深度優先搜索相當於先序優先遍歷,所以答案選擇B。

鄰接表表示的圖的廣度優先搜索一般採用隊列結構來實現演算法:

首先選擇一個起始節點,把它的臨界表中節點加入到隊列中,每次取出隊首元素,然後把該元素的鄰接表中的節點加入到隊列末尾,標記已遍歷過的節點,直到隊列中沒有節點為止,一般棧用於深度優先搜索,隊列用於廣度優先搜索。

(1)鄰接表用於什麼圖的存儲擴展閱讀:

深度優先搜索用一個數組存放產生的所有狀態。

(1) 把初始狀態放入數組中,設為當前狀態;

(2) 擴展當前的狀態,產生一個新的狀態放入數組中,同時把新產生的狀態設為當前狀態;

(3) 判斷當前狀態是否和前面的重復,如果重復則回到上一個狀態,產生它的另一狀態;

(4) 判斷當前狀態是否為目標狀態,如果是目標,則找到一個解答,結束演算法。

Ⅱ 數據結構:無向圖適合鄰接矩陣,有向圖適合鄰接表

這句話不對,鄰接表和鄰接矩陣,即可以存儲無向圖也可以存儲有向圖,稠密圖適合用鄰接矩陣,稀疏圖適合用鄰接表存儲

Ⅲ 稀疏圖為什麼用鄰接表存儲而不用鄰接矩陣我知道是空間效率問題,怎麼個說啊謝謝大神!

鄰接表只需存儲非零節點,而矩陣的話是不是要把所有節點的信息都保存上啊,而稀疏圖的非零節點不多啊。所以存儲效率高

Ⅳ 如何用鄰接表存儲圖結構

我看不太懂這個程序,不過我有些過圖的鄰接表表示,看對你有沒有幫助吧。
#include <iostream>
#include <fstream>
#include <vector>

typedef int QElemTyep;
#include "queue.h"
using namespace std;
typedef int Status;
#define MAX_VERTEX_NUM 30 //圖的最大頂點數
enum BOOL {False,True};
BOOL visited[MAX_VERTEX_NUM]; //全局變數--訪問標志數組

typedef struct ArcNode{
//弧結點
int adjvex; //該弧所指向的頂點的位置
struct ArcNode *nextarc; //指向下一條弧的指針
InfoType *info; //保存邊的信息,可以簡單的改為 int w;
}ArcNode;
typedef struct VNode{
VertexType data;
ArcNode *firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];

class Graph{
public: AdjList vertices; //記錄頂點信息,指向第一條依附該頂點的弧的指針
int vexnum,arcnum; //圖的當前頂點和弧數
int GraphKind; //圖的種類,0---無向圖,1---有向圖
Graph(int vexnum,int arcnum,int kind)
{
this->vexnum=vexnum;
this->arcnum=arcnum;
this->GraphKind=kind;
}
};
void CreateGraph(Graph &G,VertexType *V,ArcType *VR){
//構造鄰接表結構的圖G

int i;
ArcNode *s;
for(i=1;i<=G.vexnum;i++) //初始化指針數組
{
G.vertices[i].data=V[i];
G.vertices[i].firstarc=NULL;
}
for(i=1;i<=G.arcnum;i++)
{
s=(ArcNode *)malloc(sizeof(ArcNode)); //生成一個弧結點
s->nextarc=G.vertices[VR[i].start].firstarc; //插入到鄰接表中
s->adjvex=VR[i].end;
G.vertices[VR[i].start].firstarc=s;

if(G.GraphKind==0) {
//若是無向圖,再插入到終點的弧鏈中
s=(ArcNode *)malloc(sizeof(ArcNode));
s->nextarc=G.vertices[VR[i].end].firstarc;
s->adjvex=VR[i].start;
G.vertices[VR[i].end].firstarc=s;
}
}
}

Ⅳ 什麼叫鄰接表

鄰接表是圖的一種鏈式存儲結構。對圖的每個頂點建立一個單鏈表(n個頂點建立n個單鏈表),第i個單鏈表中的結點包含頂點Vi的所有鄰接頂點。

Ⅵ 數據結構問題 在鄰接表中什麼是表節點什麼是表頭節點什麼是頭節點

鄰接表,存儲方法跟樹的孩子鏈表示法相類似,是一種順序分配和鏈式分配相結合的存儲結構。如這個表頭結點所對應的頂點存在相鄰頂點,則把相鄰頂點依次存放於表頭結點所指向的單向鏈表中。

對於無向圖來說,使用鄰接表進行存儲也會出現數據冗餘,表頭結點A所指鏈表中存在一個指向C的表結點的同時,表頭結點C所指鏈表也會存在一個指向A的表結點。

數據結構中,在單鏈表的第一個結點之前附設一個結點,它沒有直接前驅,稱之為頭結點。

(6)鄰接表用於什麼圖的存儲擴展閱讀:

頭結點是鏈表裡面第一個結點,他的數據域可以不存放任何信息(有時候也會存放鏈表的長度等等信息),他的指針區域存放的是鏈表中第一個數據元素的結點(就是傳說中的首元結點)存放的地址。

1、防止單鏈表是空的而設的.當鏈表為空的時候,帶頭結點的頭指針就指向頭結點.如果當鏈表為空的時候,頭結點的指針域的數值為NULL.

2、是為了方便單鏈表的特殊操作,插入在表頭或者刪除第一個結點.這樣就保持了單鏈表操作的統一性!

3、單鏈表加上頭結點之後,無論單鏈表是否為空,頭指針始終指向頭結點,因此空表和非空表的處理也統一了,方便了單鏈表的操作,也減少了程序的復雜性和出現bug的機會[1]。

4、對單鏈表的多數操作應明確對哪個結點以及該結點的前驅。不帶頭結點的鏈表對首元結點、中間結點分別處理等;而帶頭結點的鏈表因為有頭結點,首元結點、中間結點的操作相同,從而減少分支,使演算法變得簡單,流程清晰。

對單鏈表進行插入、刪除操作時,如果在首元結點之前插入或刪除的是首元結點,不帶頭結點的單鏈表需改變頭指針的值,在TurboC演算法的函數形參表中頭指針一般使用指針的指針(在C++中使用引用&);

而帶頭結點的單鏈表不需改變頭指針的值,函數參數表中頭結點使用指針變數即可,對初學者更易接受。

Ⅶ 鄰接表存儲結構適合存儲什麼樣的圖

圖的鄰接表數據類型描述如下:
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; // 內存池的指針