- 由于邻接矩阵对于顶点较多,边较少时,但是存储边的二维矩阵是必须预先初始化的,所以会造成空间的浪费。因此可以采取通过链表和数组进行结合的方式(类似于孩子兄弟表示法),用数组存储顶点表,每个顶点记录指向该结点出度边的链头,通过链表存储该边的所有出边,采用头插法进行插入。
#define MaxSize 5
#define INF 100
typedef struct ArcNode{
struct ArcNode* next;
int num;
}ArcNode;
typedef struct{
ArcNode* firstNode;
char data;
}Vertype;
typedef struct{
Vertype adjList[MaxSize];
int n;
int e;
}AGraph;
void initAgraph(AGraph* &agraph){
ArcNode* e;
cout<<"输入顶点数和边数"<<endl;
cin>>agraph->n>>agraph->e;
cout<<"输入每个顶点的数据"<<endl;
for (int i = 0; i < agraph->n; i++) {
cin>>agraph->adjList[i].data;
agraph->adjList[i].firstNode = NULL;
}
int vi,vj;
for (int k = 0; k < agraph->e; k++) {
cout<<"输入顶点(Vi,Vj)上的顶点序号";
cin>>vi>>vj;
e = new ArcNode();
e->num = vj;
e->next = agraph->adjList[vi].firstNode;
agraph->adjList[vi].firstNode = e;
e = new ArcNode();
e->num = vi;
e->next = agraph->adjList[vj].firstNode;
agraph->adjList[vj].firstNode = e;
}
}