鄰接表來儲存資料

2021-09-26 03:03:19 字數 1798 閱讀 1332

#includeusing namespace std;

//使用鄰接表來儲存圖,把m遠小於n^2的圖稱為稀疏圖 ,適合稀疏圖,可以把時間複雜度優化到o(m+n)logn

#define maxn 9999

int n,m;

int u[maxn],v[maxn],w[maxn];

//first要比n大1,next要比n大1

//初始化first陣列下標1~n的值為-1,表示1~n頂點暫時沒有邊。

//first存的是1~n號頂點的第一條邊的編號,next[u[i]]儲存"編號為i的邊"的下一條編號。

int first[maxn],next[maxn];

void create() //建立鄰接表

for(int i=1;i<=m;i++)

}void print()//遍歷每一條邊 }}

int main() }

/* 4 5

1 4 9

4 3 8

1 2 5

2 4 6

1 3 7

*/

一、vector 簡介及基本操作:

1、vector是c++中stl庫中封裝好的容器,常用定義不定長陣列來構建無向圖或有向圖.

2、基本操作:

(1)標頭檔案#include.

(2)建立vector物件,vectorvec;

(3)尾部插入數字:vec.push_back(a);

(4)使用下標訪問元素,cout<(5)使用迭代器訪問元素.

vector::iterator it;

for(it=vec.begin();it!=vec.end();it++)

cout<<*it<

(6)插入元素:    vec.insert(vec.begin()+i,a);在第i+1個元素前面插入a;

(7)刪除元素:    vec.erase(vec.begin()+2);刪除第3個元素

vec.erase(vec.begin()+i,vec.end()+j);刪除區間[i,j-1];區間從0開始

(8)向量大小:vec.size();

(9)清空:vec.clear();

vector的元素不僅僅可以使int,double,string,還可以是結構體,但是要注意:結構體要定義為全域性的,否則會出錯。

如下例:

struct node ;

vector g[ ];

二、構建圖:

(1)定義不定長陣列 vector map[100010] ;

(2)   建邊

for(i=1; i < = n ; i + +)

scanf("%d%d",&s,&t,);

map[s].push_back(t);

map[t].push_back(s);                //有向圖時,此步省略。

(3)遍歷

for (i=0; i< = map[s].size(); i++)

printf("%d\n",map[s][i]);

#include#define n 10000

using namespace std;

struct edge

;vectorg[n];//g[i]中i表示出發點

int m,n;

int temp1;//出發點

int main()

for (int i=1;i<=n;i++)//按照出發點的順序遍歷

}return 0;

}

陣列模擬鄰接表儲存

鄰接矩陣看上去是個不錯的選擇,首先是容易理解,第二是索引和編排都很舒服但是我們也發現,對於邊數相對頂點較少的圖,這種結構無疑是存在對儲存空間的極大浪費。因此我們可以考慮另外一種儲存結構方式,例如把陣列與鍊錶結合一起來儲存,這種方式在圖結構也適用,我們稱為鄰接表 adjacencylist 每乙個單鏈...

鄰接表的幾種儲存方式

總的來說有以下三種方式 鍊錶 儲存結構 struct node node head m 新增乙個有向邊 void addadj int u,int v 遍歷 for node p head u p null p p next int v p vex 連線u的結點v 初始化 memset head,n...

資料儲存方案 鄰接列表模式

在程式開發中,我們常遇到用樹型結構來表示某些資料間的關係,如企業的組織架構 商品的分類 操作欄目等,目前的關係型資料庫都是以二維表的形式記錄儲存資料,而樹型結構的資料如需存入二維表就必須進行schema設計。adjacency list 鄰接列表模式 簡單的說是根據節點之間的繼承關係,顯現的描述某一...