欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

Linux內(nèi)核補給站 ? 來源:Linux內(nèi)核補給站 ? 作者:Linux內(nèi)核補給站 ? 2022-05-11 14:36 ? 次閱讀

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

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

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

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

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

pYYBAGJ7WWGAVUOqAABSRf5QXO0094.jpg?source=d16d100b

?

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

poYBAGJ7WWGAGZQgAACGMHgu348874.jpg?source=d16d100b

?

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

pYYBAGJ7WWKAMFRqAABejlD9Eko070.jpg?source=d16d100b

?

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

C++ Code 

#include
using  namespace std;

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

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

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

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


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

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

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

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

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

    關(guān)注

    0

    文章

    425

    瀏覽量

    34654
  • 存儲結(jié)構(gòu)
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    9729
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

    基于MSP430功能模塊詳解系列——FLASH存儲

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

    基于MSP430功能模塊詳解系列——TimerA

    基于MSP430功能模塊詳解系列——TimerA
    發(fā)表于 10-12 15:32 ?2次下載
    基于MSP430功能模塊<b class='flag-5'>詳解</b>系列<b class='flag-5'>之</b>——TimerA

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

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

    線性的鏈式存儲結(jié)構(gòu)知識講解

    線性的鏈式存儲結(jié)構(gòu)知識講解
    發(fā)表于 05-09 11:01 ?11次下載

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

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

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

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

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

    為提高復雜網(wǎng)絡(luò)中遺傳算法的子圖挖掘效率,在鄰接的鏈式結(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>提高遺傳算法的挖掘效率

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

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

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

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

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

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