1. 程式人生 > >資料結構(五)之圖的儲存方式

資料結構(五)之圖的儲存方式

  • 鄰接表

#define MAX 20
typedef struct ArcNode{
	int adjvex;//該弧指向的頂點的位置
	struct ArcNode *nextarc;//指向下一條弧的指標 
	int *info; //該弧相關資訊的指標 
}ArcNode;
typedef struct VNode{
	int data;
	ArcNode *firstarc;//指向第一條依附該頂點的弧的指標 
}VNode,AdjList[MAX];
typedef struct{
	AdjList vertices;
	int vexnum,arcnum;//頂點數和邊數
	int kind;//圖的種類標誌 
}ALGraph;//鄰接表

  • 多重鄰接表

#define MAX 20
typedef emnu{unvisited,visited} VisitIf;
typedef struct EBox{
	VisitIf mark;  //訪問標記
	int   ivex,jvex;  //該邊依附的兩個頂點的位置
	struct EBox *ilink,*jlink;//分別指向依附這兩個頂點的下一條邊
	int *info;        //該邊的資訊指標 
}EBox;
typedef struct VexBox{
	int data;
	EBox *firstedge;
}VexBox;
typedef struct{
	VexBox adjmulist[MAX];
	int vexnum,edgenum;//頂點數和邊數 
}AMLGraph; //多重鄰接表

  • 十字鄰接表

#define MAX 20
typedef struct ArcBox{
	int tailvex,headvex; //弧的尾頂點和頭頂點的位置 
	struct ArcBox *hlink,*tlink;
	int *info; //該弧相關資訊的指標 
}ArcBox;
typedef struct VexNode{
	int data;
	ArcBox *firstin,*firstout;//分別指向第一條入弧和出弧 
}VexNode;
typedef struct{
	VexNode xlist[MAX];
	int vexnum,arcnum;//頂點數和弧數 
}OLGraph;//十字鄰接表