99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

存儲(chǔ)結(jié)構(gòu)方式之鄰接表詳解

Linux內(nèi)核補(bǔ)給站 ? 來(lái)源:Linux內(nèi)核補(bǔ)給站 ? 作者:Linux內(nèi)核補(bǔ)給站 ? 2022-05-11 14:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

對(duì)于圖來(lái)說,鄰接矩陣是不錯(cuò)的一種圖存儲(chǔ)結(jié)構(gòu),但是我們也發(fā)現(xiàn),對(duì)于邊數(shù)相對(duì)頂點(diǎn)較少的圖,這種結(jié)構(gòu)是存在對(duì)存儲(chǔ)空間的極大浪費(fèi)的。因此我們考慮另外一種存儲(chǔ)結(jié)構(gòu)方式:鄰接表(Adjacency List),即數(shù)組與鏈表相結(jié)合的存儲(chǔ)方法。

鄰接表的處理方法是這樣的。

1、圖中頂點(diǎn)用一個(gè)一維數(shù)組存儲(chǔ),另外,對(duì)于頂點(diǎn)數(shù)組中,每個(gè)數(shù)據(jù)元素還需要存儲(chǔ)指向第一個(gè)鄰接點(diǎn)的指針,以便于查找該頂點(diǎn)的邊信息。

2、圖中每個(gè)頂點(diǎn)vi的所有鄰接點(diǎn)構(gòu)成一個(gè)線性表,由于鄰接點(diǎn)的個(gè)數(shù)不定,所以用單鏈表存儲(chǔ),無(wú)向圖稱為頂點(diǎn)vi的邊表,有向圖稱為頂點(diǎn)vi作為弧尾的出邊表。

例如圖7-4-6就是一個(gè)無(wú)向圖的鄰接表結(jié)構(gòu)。

pYYBAGJ7WWGAVUOqAABSRf5QXO0094.jpg?source=d16d100b

?

若是有向圖,鄰接表的結(jié)構(gòu)是類似的,如圖7-4-7,以頂點(diǎn)作為弧尾來(lái)存儲(chǔ)邊表容易得到每個(gè)頂點(diǎn)的出度,而以頂點(diǎn)為弧頭的表容易得到頂點(diǎn)的入度,即逆鄰接表。

poYBAGJ7WWGAGZQgAACGMHgu348874.jpg?source=d16d100b

?

對(duì)于帶權(quán)值的網(wǎng)圖,可以在邊表結(jié)點(diǎn)定義中再增加一個(gè)weight的數(shù)據(jù)域,存儲(chǔ)權(quán)值信息即可,如圖7-4-8所示。

pYYBAGJ7WWKAMFRqAABejlD9Eko070.jpg?source=d16d100b

?

下面示例無(wú)向圖的鄰接表創(chuàng)建:(改編自《大話數(shù)據(jù)結(jié)構(gòu)》)

C++ Code 

#include
using  namespace std;

#define MAXVEX  100  /* 最大頂點(diǎn)數(shù),應(yīng)由用戶定義 */
typedef  char VertexType;  /* 頂點(diǎn)類型應(yīng)由用戶定義 */
typedef  int EdgeType;  /* 邊上的權(quán)值類型應(yīng)由用戶定義 */

typedef  struct EdgeNode /* 邊表結(jié)點(diǎn)  */
{
     int adjvex; /* 鄰接點(diǎn)域,存儲(chǔ)該頂點(diǎn)對(duì)應(yīng)的下標(biāo) */
    EdgeType weight; /* 用于存儲(chǔ)權(quán)值,對(duì)于非網(wǎng)圖可以不需要 */
     struct EdgeNode *next;  /* 鏈域,指向下一個(gè)鄰接點(diǎn) */
} EdgeNode;

typedef  struct VextexNode /* 頂點(diǎn)表結(jié)點(diǎn) */
{
    VertexType data; /* 頂點(diǎn)域,存儲(chǔ)頂點(diǎn)信息 */
    EdgeNode *firstedge; /* 邊表頭指針 */
} VextexNode, AdjList[MAXVEX];

typedef  struct
{
    AdjList adjList;
     int numNodes, numEdges;  /* 圖中當(dāng)前頂點(diǎn)數(shù)和邊數(shù) */
} GraphAdjList;


void CreateALGraph(GraphAdjList *Gp)
{
     int i, j, k;
    EdgeNode *pe;
    cout <<  "輸入頂點(diǎn)數(shù)和邊數(shù)(空格分隔):" << endl;
    cin >> Gp->numNodes >> Gp->numEdges;

     for (i =  0 ; i < Gp->numNodes; i++)
    {
        cout <<  "輸入頂點(diǎn)信息:" << endl;
        cin >> Gp->adjList[i].data;
        Gp->adjList[i].firstedge =  NULL; /* 將邊表置為空表 */
    }

     for (k =  0; k <  Gp->numEdges; k++) /* 建立邊表 */
    {
        cout <<  "輸入邊(vi,vj)的頂點(diǎn)序號(hào)i,j(空格分隔):" << endl;
        cin >> i >> j;
        pe = (EdgeNode *)malloc( sizeof(EdgeNode));
        pe->adjvex = j; /* 鄰接序號(hào)為j */
         /* 將pe的指針指向當(dāng)前頂點(diǎn)上指向的結(jié)點(diǎn) */
        pe->next = Gp->adjList[i].firstedge;
        Gp->adjList[i].firstedge = pe; /* 將當(dāng)前頂點(diǎn)的指針指向pe */

        pe = (EdgeNode *)malloc( sizeof(EdgeNode));
        pe->adjvex = i;
        pe->next = Gp->adjList[j].firstedge;
        Gp->adjList[j].firstedge = pe;

    }
}

int main( void)
{
    GraphAdjList GL;
    CreateALGraph(&GL);

     return  0;
}

這里的鄰接點(diǎn)插入使用了單鏈表創(chuàng)建中的頭插法,對(duì)于無(wú)向圖來(lái)說,一條邊對(duì)應(yīng)都是兩個(gè)頂點(diǎn),所以在循環(huán)中,一次就針對(duì)i和j分別進(jìn)行了插入。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 矩陣
    +關(guān)注

    關(guān)注

    1

    文章

    434

    瀏覽量

    35249
  • 存儲(chǔ)結(jié)構(gòu)

    關(guān)注

    0

    文章

    21

    瀏覽量

    9837
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RealView MDK中結(jié)構(gòu)存儲(chǔ)方式

    ;int four;} c; 二 三種定義結(jié)構(gòu)方式對(duì)應(yīng)用匯編代碼非壓縮方式存儲(chǔ)(對(duì)齊方式
    發(fā)表于 08-02 10:17

    注冊(cè)結(jié)構(gòu)詳解

    注冊(cè)結(jié)構(gòu)詳解
    發(fā)表于 03-05 15:06

    Docker數(shù)據(jù)存儲(chǔ)方式Volumes詳解

    Docker數(shù)據(jù)存儲(chǔ)Volumes
    發(fā)表于 03-26 11:27

    網(wǎng)絡(luò)存儲(chǔ)技術(shù)詳解

    網(wǎng)絡(luò)存儲(chǔ)技術(shù)詳解 網(wǎng)絡(luò)存儲(chǔ)技術(shù)一般分為三種,分別是NAS、SAN、DAS: NAS網(wǎng)絡(luò)存儲(chǔ)
    發(fā)表于 01-13 11:29 ?1365次閱讀

    邏輯漏洞越權(quán)詳解

    邏輯漏洞越權(quán)詳解
    發(fā)表于 09-07 09:41 ?5次下載
    邏輯漏洞<b class='flag-5'>之</b>越權(quán)<b class='flag-5'>詳解</b>

    基于MSP430功能模塊詳解系列——FLASH存儲(chǔ)

    基于MSP430功能模塊詳解系列——FLASH存儲(chǔ)
    發(fā)表于 10-12 15:27 ?11次下載
    基于MSP430功能模塊<b class='flag-5'>詳解</b>系列<b class='flag-5'>之</b>——FLASH<b class='flag-5'>存儲(chǔ)</b>器

    基于平面閉鏈機(jī)構(gòu)的縮桿鄰接矩陣變更

    針對(duì)平面閉鏈機(jī)構(gòu)運(yùn)動(dòng)特性集成的問題,對(duì)閉鏈機(jī)構(gòu)的設(shè)計(jì)過程、閉鏈機(jī)構(gòu)運(yùn)動(dòng)鏈數(shù)目綜合過程、縮桿鄰接矩陣表示、去同構(gòu)鏈、去呆鏈等方面進(jìn)行了研究,以此獲得了各桿件不同自由度的縮桿鄰接矩陣數(shù)目。通過對(duì)各縮桿
    發(fā)表于 03-20 11:31 ?0次下載
    基于平面閉鏈機(jī)構(gòu)的縮桿<b class='flag-5'>鄰接</b>矩陣變更

    線性的鏈?zhǔn)?b class='flag-5'>存儲(chǔ)結(jié)構(gòu)知識(shí)講解

    線性的鏈?zhǔn)?b class='flag-5'>存儲(chǔ)結(jié)構(gòu)知識(shí)講解
    發(fā)表于 05-09 11:01 ?11次下載

    數(shù)據(jù)存儲(chǔ)方式有哪些

    順序存儲(chǔ)方法: 該方法把邏輯上相鄰的結(jié)點(diǎn)存儲(chǔ)在物理位置上相鄰的存儲(chǔ)單元里,結(jié)點(diǎn)間的邏輯關(guān)系由存儲(chǔ)單元的鄰接關(guān)系來(lái)體現(xiàn)。
    發(fā)表于 10-27 12:31 ?4.5w次閱讀
    數(shù)據(jù)<b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>方式</b>有哪些

    一文詳解存儲(chǔ)結(jié)構(gòu)

    存儲(chǔ)結(jié)構(gòu)與之前所學(xué)的線性存儲(chǔ)結(jié)構(gòu)有所差異,這緣于棧對(duì)數(shù)據(jù) “存” 和 “取” 的過程有特殊的要求。
    發(fā)表于 10-09 16:00 ?2604次閱讀
    一文<b class='flag-5'>詳解</b>棧<b class='flag-5'>存儲(chǔ)</b>的<b class='flag-5'>結(jié)構(gòu)</b>

    如何使用鄰接樹的數(shù)據(jù)結(jié)構(gòu)提高遺傳算法的挖掘效率

    為提高復(fù)雜網(wǎng)絡(luò)中遺傳算法的子圖挖掘效率,在鄰接的鏈?zhǔn)?b class='flag-5'>結(jié)構(gòu)基礎(chǔ)上加入雙樹狀結(jié)構(gòu),作為一種新型數(shù)據(jù)結(jié)構(gòu)———
    發(fā)表于 10-23 11:47 ?19次下載
    如何使用<b class='flag-5'>鄰接</b>樹的數(shù)據(jù)<b class='flag-5'>結(jié)構(gòu)</b>提高遺傳算法的挖掘效率

    一文詳解存儲(chǔ)結(jié)構(gòu)的模型

    存儲(chǔ)的快速發(fā)展過程中,不同的廠商對(duì)云存儲(chǔ)提供了不同的結(jié)構(gòu)模型,在這里,我們介紹一個(gè)比較有代表性的云存儲(chǔ)結(jié)構(gòu)模型。
    發(fā)表于 12-25 11:23 ?4661次閱讀
    一文<b class='flag-5'>詳解</b>云<b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>結(jié)構(gòu)</b>的模型

    BLE實(shí)驗(yàn)詳解藍(lán)牙血壓計(jì)設(shè)計(jì)方案

    BLE實(shí)驗(yàn)詳解藍(lán)牙血壓計(jì)設(shè)計(jì)方案
    發(fā)表于 03-30 16:46 ?38次下載
    BLE實(shí)驗(yàn)<b class='flag-5'>詳解</b><b class='flag-5'>之</b>藍(lán)牙血壓計(jì)設(shè)計(jì)方案

    全面解讀MOSFET結(jié)構(gòu)及設(shè)計(jì)詳解

    MOSFET結(jié)構(gòu)、特性參數(shù)及設(shè)計(jì)詳解
    發(fā)表于 01-26 16:47 ?2125次閱讀

    態(tài)勢(shì)數(shù)據(jù)存儲(chǔ)方式有哪些

    數(shù)據(jù)庫(kù)通過定義數(shù)據(jù)、字段、數(shù)據(jù)類型以及之間的關(guān)系,確保數(shù)據(jù)的完整性、一致性和安全性。這種存儲(chǔ)方式在需要頻繁查詢和更新數(shù)據(jù)的情況下表現(xiàn)良好。 非關(guān)系型數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 04-22 19:28 ?577次閱讀