7.2.4 无向图(网)的邻接多重链表存储表示

  建立多重链表的算法类似于建立图的邻接表,只要依次输入图的顶点和边的信息即可。

算法 7.2
  void CreateGraph(AMLGraph &G)
 {
  // 生成无向图G的存储结构-邻接多重表
  cin >> G.vexnum >> G.edgenum >>G.kind; // 输入顶点数、边数和类型
  for (i=0; i<G.vexnum; ++i) {      // 构造顶点数组
   cin >> G.adjmulist[i].data;     // 输入顶点
   G.adjmulist[i].firstedge = NULL;   // 初始化链表头指针为"空"
  }//for
  for (k=0; k<G.edgenum; ++k) {     // 输入各边并构造邻接多重表
   cin >> >> ;          // 输入一条边的两个顶点
   ipos = LocateVex(G,); jpos = LocateVex(G, );
           // 确定在G中位置,即顶点在G.adjmulist中的序号
   p = new ArcNode;
   if (!pi) exit(1);          // 存储分配失败
   p->mark = unvisited;
   p -> ivex = ipos; p->jvex = jpos;   // 对弧结点赋顶点"位置"
   if (G.kind==AN)
    cin >> w >> p;          // 输入权值和其它信息存储地址
     
     else { w=0; p=NULL; }
   p->weight = w; p->info = p;
   p->ilink = G.adjmulist[ipos].firstedge;
   G.adjmulist[ipos].firstedge = p;   // 插入顶点 的链表
   p->jlink = G.adjmulist[jpos].fistedge;
   G.adjmulist[jpos].firstedge = p;   // 插入顶点 的链表
  } //for
 } // CreateGraph
 
  思考题 算法7.2的时间复杂度是什么?是,对吗?