1. 程式人生 > >圖的儲存和基本操作

圖的儲存和基本操作

1 鄰接矩陣法

鄰接矩陣儲存結構定義:

#define Maxvertexnum 100   //頂點數目的最大值
typedef char vertextype;    //頂點的資料型別
typedef int edgetype;        //邊上權值的上資料型別
typedef struct{
    vertextype vex[maxvertexnum];   //頂點表
    edgetype edge[maxvertexnum][maxvertexnum]; //鄰接矩陣,邊表
    int vexnum,arcnum;              //圖的當前結點數和弧數

}

2 鄰接表法

頂點域             邊表頭指標

data

firstarc

             頂點表

                    鄰接點域                                   指標域

adjvex nextarc

                                                 邊表

鄰接表儲存結構定義:

#define maxvertexnum 100      //圖中頂點數目的最大值
typedef struct ArcNode{       //邊表結點
    int adjvex;               //該弧所指向的頂點位置
    struct ArcNode *next;     //指向下一條弧的指標
}ArcNode;

typedef struct Vnode{         //頂點表結點
        vertextype data;      //頂點資訊
        ArcNode *first;        //指向第一條依附該頂點的弧的指標

}Vnode,adjlist[maxvertexnum];

typedef struct{
    adjlist  vertices;   //鄰接表
    int vexnum,arcnum ;   //圖的頂點數和弧數
}Algraph;

3 十字連結串列(有向圖)

                                              弧結點

tailvex headvex hlink tlink info

弧結點中有5個域,尾域(tailvex)指向弧尾,頭域(headvex)指向弧頭

鏈域(hlink)指向弧頭相同的下一條弧,鏈域(tlink)指向弧尾相同的下一條弧

info域指向該弧的相關資訊

                                             頂點結點

data firstin firstout

data域存放頂點相關的資料資訊,如頂點名稱

 firstin指向以該頂點為弧頭的第一個弧結點

firstout指向以該頂點為弧尾的第一個弧結點

#define maxvertexnum 100
typedef struct arcnode{   //邊表結點
        int tailvex,headvex;     //該弧的頭尾結點
        struct arcnode *hlink,*tlink; //分別指向弧頭相同和弧尾相同的結點

}ARCnode;

typedef struct vnode{  //頂點表結點
    vertextype data;                //頂點表結點
    arcnode *firstin,*firstout;     //指向第一條入弧和出弧

}vnode;

typedef stuct{
    vnode xlist[maxvertexnum];   //鄰接表
    int vexnum,arcnum;         //圖的頂點數和弧數
}

4鄰接多重表(無向圖)

mark ivex ilink jverx jlink info

mark:標誌域,用以標記該條邊是否被搜尋過

ivex和jvex為該邊依附的兩個頂點在圖中位置

ilink指向下一條依附於頂點ivex的邊

jlink指向下一條依附於頂點jvex的邊

info為指向和邊相關的各種資訊的指標域

每個頂點也用一個結點表示,它由如下所示的兩個域組成

data firstedge

data域儲存該頂點的相關資訊

firstedge域指示第一條依附於該頂點的邊

#define Maxvertexnum 100          //圖中頂點數目的最大值
typedef struct Arcnode{           //邊表結點
        bool mark;                 //訪問標記
        int ivex,jvex;            //分別指向該弧的兩個結點
        struct Arcnode *ilink,*jlink ;   //分別指向兩個頂點的下一條邊
       
}Arcnode;

typedef stuct Vnode{           //頂點表結點
        vertextype data;       //頂點資訊
        arcnode  *firstedge;    //指向第一條依附於該頂點的邊

}vnode;

typedef stuct{
        vnode adjmulist[maxvertexnum];    //鄰接表
        int vexnum,arcnum;          //圖的頂點數和弧數

}AMLGraph;                          //AMLGraph 是以鄰接表儲存的圖型別

相關推薦

儲存基本操作

1 鄰接矩陣法 鄰接矩陣儲存結構定義: #define Maxvertexnum 100 //頂點數目的最大值 typedef char vertextype; //頂點的資料型別 typedef int edgetype; //邊上權值的上資料型

二叉樹的順序儲存基本操作

一、二叉樹的定義: 二叉樹是n個結點的有限集合,當n=0時稱為空樹,否則:(1)有且只有一個特殊的被稱為樹的根結點;(2)若n>1時,其餘的結點被分為兩個互不相交的子集,稱為左右子樹,並且左右子樹都是二叉樹;可以看出二叉樹的定義是遞迴的。 二、二叉樹的性質: (1)在

使用C++陣列實現二叉樹的儲存基本操作

1、建立檔案ArrayTree.h 定義二叉樹的資料結構 #ifndef ARRAYTREE_H #define ARRAYTREE_H class ArrayTree{ public: Ar

儲存基本操作

5.3 圖的儲存及基本操作★3◎2   相對於其他的線性資料結構,圖的儲存要複雜很多,因為頂點數相同的圖,其邊(或弧)的數量相差很大。比如一個有n個頂點e條邊的圖,若是以頂點為結點來儲存,由於各個頂點的度數不一致,無法指定結點的指標域中需要的指標數。雖然可以定義結點的指標域存在n-1個指標,

二叉連結串列的儲存結構基本操作(各種遍歷、求樹深度、求樹葉個數)

1.二叉樹的定義及性質 二叉樹是一種樹狀結構,它的特點是每個節點至多隻能有兩棵子樹,並且二叉樹的子樹有左右之分,其次序不能任意調換。 二叉樹具有以下重要性質: 性質 1 在二叉樹的第i層上至多有2^(i-1)個節點。 性質 2 深度為k的二叉樹至多有2^k-1個節點。 性

的鄰接表儲存基本操作

圖的儲存方式有很多種,這裡事宜鄰接表儲存為例實現的。圖的基本操作包括初始化一個空圖、插入一節點、插入條邊、深度優先遍歷、廣度優先遍歷、銷燬圖等 #include<stdio.h> #include<stdlib.h> #define

mongodb配置基本操作

特性 服務 win done service 基本 添加 close english MongoDB3.0新特性WiredTigerMMAPv1可插拔引擎API基於web的可視化管理工具 查看版本號mongod --version啟動數據庫 mongod --dbpath

mysql管理基本操作

sql 修改root密碼 服務 blog sam www 網址 resolve 日誌 進去mysql:mysql –uroot –p 重啟數據庫:[[email protected]/* */ ~]# /etc/init.d/mysqld restart1.

MySQL的安裝基本操作

-c values body 中一 步驟 檢查 creat emp 列名 一、MySQL安裝步驟 1. 檢查linux系統中是否已經安裝了MySQL sudo service mysql start2. 安裝MySQL服務端、核心程序 sudo apt-get

ubuntu 對拍基本操作

打開 date CP cpp 生成器 rm -rf 方法 LG names 轉自 夏天學長 我們在學對拍之前先學一下diff diff my.out right.out; 這樣就能比較兩個文件。 建一個check.sh,把上面一句話寫進去就行了。 bash ./check.

D14-02 集合定義基本操作

內置 不可變類 包含 操作 不可變 方式 基本 不存在 pre 1、不同的元素組成  2、集合是無序的 3、集合中元素必須是不可變類型,數字,字符串,元組 set 定義集合: s = {1,2,3,4,5,6} 或通過如下方式定義: s = set(‘hello‘) pr

Flask中之數據庫框架模型類四:再述SQLAlchemy配置基本操作之增刪改查

模糊 offset odi com app ack 字符 add () from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) #設置連接數據庫的URL

hive的資料組織格式基本操作

hive的資料組織格式:     庫:         管理資料         不同模組的資料最好放在不同的資料庫中    &n

線性錶鏈式儲存基本操作

  線性表的順序儲存結構的特點是邏輯關係上相鄰的兩個元素在物理位置上也相鄰,因此可以隨機存取表中任意元素。線性錶鏈式儲存結構特點是用一組任意的儲存單元儲存資料元素,為了表示每個資料元素ai與其直接後繼資料元素ai+1之間的邏輯關係,對資料元素ai來說,除了儲存本身資訊外,還要儲存指示其直接後繼的資訊(即直接後

MSE初始化基本操作

MSE預設的登入賬戶密碼可能是:login/password (admin/admin). l 初始化配置完成後,下次使用root登入時,僅顯示Linux shell提示符,而不是安裝指令碼。 您可以隨時重新執行安裝指令碼,以root身份登入並執行/opt/mse/setup/setup.sh來更改

HIVE安裝基本操作

一、安裝HIVE 1、在本地檔案系統中找到hadoop所在目錄,開啟命令終端,如圖: 2、通過命令終端進入到hadoop所在資料夾,並通過命令ls 檢視bin檔案下所有命令,如圖: 3、執行啟動命令start-all.sh啟動hadoop,並用jps命令檢視所有程序是否成功啟動,如

hive資料庫概念基本操作

hive資料庫: 概念: hive中的資料庫本質上僅僅是表的一個目錄或名稱空間。對於具有很多使用者和組的大叢集而言,這種方式可以避免表的命名衝突。通常會使用資料庫來將生產表組織成邏輯組。 示例: 本地模式配置了資料庫的統一存放目錄為~/hive/warehouse,那麼建立的所有資料庫都存在

Go語言 陣列初始化基本操作

package main import "fmt" func main() { // 陣列同一型別的集合 var arr [50]int // 1 賦值 // 運算元組,下標從0開始,索引從0到len()-1 for i := 0; i < len(arr); i++ { a

docker基本命令基本操作命令

docker-教程 docker程式設計環境小書匠 docker 教程 Docker官方英文資源 docker官網:http://www.docker.com Docker windows入門:https://docs.docker.com/windows/

佇列 - 佇列的建立基本操作

佇列 / 列隊 Queue //二叉樹 typedef struct Tree{ int val; Tree *left; Tree *right; //Tree(int v):val(v){} }*P_Tree; //佇列 typedef P_Tree Elem