圖的儲存結構之鄰接表
阿新 • • 發佈:2019-01-02
#include<iostream>
using namespace std;
#define MAXVEX 100 /* 最大頂點數,應由使用者定義 */
typedef char VertexType; /* 頂點型別應由使用者定義 */
typedef int EdgeType; /* 邊上的權值型別應由使用者定義 */
typedef struct EdgeNode/* 邊表結點 */
{
int adjvex;/* 鄰接點域,儲存該頂點對應的下標 */
EdgeType weight;/* 用於儲存權值,對於非網圖可以不需要 */
struct EdgeNode *next; /* 鏈域,指向下一個鄰接點 */
} EdgeNode;
typedef struct VextexNode/* 頂點表結點 */
{
VertexType data;/* 頂點域,儲存頂點資訊 */
EdgeNode *firstedge;/* 邊表頭指標 */
} VextexNode, AdjList[MAXVEX];
typedef struct
{
AdjList adjList;
int numNodes, numEdges; /* 圖中當前頂點數和邊數 */
} GraphAdjList;
void CreateALGraph(GraphAdjList *Gp)
{
int i, j, k;
EdgeNode *pe;
cout << “輸入頂點數和邊數(空格分隔):”
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的指標指向當前頂點上指向的結點 */
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;
}