下面是用c语言实现的关于图的邻接表表示及其存储代码:
1 #include<iostream> 2 using namespace std; 3 /** 4 * *用邻接表表示图的存储结构步骤如下: 5 * 输入 总顶点数和总边数 6 * 依次输入点的信息存入顶点表中,使每个表头结点的指针域初始化为NULL 7 * 创建邻接表。依次输入每条边依附的两个顶点,确定这两个顶点的序号i和j之后,将此边结点分别插入vi和vj对应的 8 * 两个边链表的头部。 9 **/ 10 #define MVNum 100 //最大顶点数 11 typedef char VerTexType; //假设顶点的数据类型为字符类型 12 13 typedef struct ArcNode //边结点 14 { 15 int adjvex; //该边所指向的顶点的位置 16 struct ArcNode *nextarc; //指向下一条边的指针 17 int info; //和边相关的信息 18 }ArcNode; 19 20 typedef struct VNode //顶点信息 21 { 22 VerTexType data; 23 ArcNode *firstarc; //指向第一条依附该顶点边的节点 24 }VNode, AdjList[MVNum]; //AdjList表示邻接表类型 25 26 typedef struct ALGraph //邻接表 27 { 28 AdjList vertices; 29 int vexnum, arcnum; //图当前的顶点数和边数 30 }ALGraph; 31 32 int LocateVex(ALGraph G, char v) 33 { 34 int index = 0; 35 for(int i=0;i<G.vexnum;i++) 36 { 37 if(G.vertices[i].data == v) 38 { 39 index = i; 40 break; 41 } 42 } 43 return index; 44 } 45 46 void Creat_UDG(ALGraph &G) 47 { 48 char v1, v2; 49 cout<<"请输入顶点数和边数:"; 50 cin>>G.vexnum>>G.arcnum; //输入总顶点数和边数 51 52 cout<<"请输入各点:\n"; 53 for(int i=0;i<G.vexnum;i++) //输入各点,构造表头结点 54 { 55 cin>>G.vertices[i].data; //输入顶点值 56 G.vertices[i].firstarc = NULL; //初始化表头结点的指针域为NULL 57 } 58 59 for(int k=0;k<G.arcnum;k++) //输入各边,构造邻接表 60 { 61 cout<<"请输入第"<<k+1<<"条边相邻的两个顶点:\n"; 62 cin>>v1>>v2; //输入一条边依附的两个顶点 63 int i = LocateVex(G, v1); 64 int j = LocateVex(G, v2); 65 66 //将新节点*p1插入顶点vi的边表头部 67 ArcNode * p1 = (ArcNode *)malloc(sizeof(ArcNode)); 68 p1->adjvex = j; 69 p1->nextarc = G.vertices[i].firstarc; 70 G.vertices[i].firstarc = p1; 71 72 //将新节点*p2插入顶点vj的边表头部 73 ArcNode * p2 = (ArcNode *)malloc(sizeof(ArcNode)); 74 p2->adjvex = i; 75 p2->nextarc = G.vertices[j].firstarc; 76 G.vertices[j].firstarc = p2; 77 } 78 } 79 80 void print_UDG(ALGraph G) 81 { 82 cout<<"建立的邻接表如下:\n"; 83 for(int i=0;i<G.vexnum;i++) 84 { 85 cout<<i<<" "<<G.vertices[i].data<<"->"; 86 ArcNode *p = G.vertices[i].firstarc; 87 while(p!=NULL) 88 { 89 cout<<p->adjvex; 90 p = p->nextarc; 91 if(p!=NULL) 92 { 93 cout<<"->"; 94 } 95 else 96 cout<<"\n"; 97 } 98 } 99 } 100 int main() 101 { 102 ALGraph G; 103 Creat_UDG(G); 104 print_UDG(G); 105 return 0; 106 }
运行结果如下:
有不懂的可以留言,如果这篇文章对你有帮助,请帮忙给个赞!!!!