zoukankan      html  css  js  c++  java
  • 十字链表的方式实现在头部插入图中节点

    #include<stdio.h>
    #include<malloc.h>
    #define MAX_VERTEX_NUM 20
     
    typedef struct ArcBox{
     int tailvex,headvex;//该弧的头和尾定点的位置
     struct ArcBox *hlink,*tlink;//分别为弧头和弧尾相同的弧的链域
     int *info; 
    }ArcBox; 
    typedef struct VexNode   //顶点结点
    {
     char data;    //顶点信息(标识)
     ArcBox *firstin;  //该顶点的第一条入弧
     ArcBox *firstout;  //该顶点的第一条出弧
    }VexNode;
    typedef struct      //图的顶点列表
    {
     VexNode xlist[MAX_VERTEX_NUM];  //顶点列表
     int vexnum,arcnum;    //定点数,弧数
    }OLGraph;
    int Locate(OLGraph *G, char vex)
    {
     int i=0;
     for(;i<G->vexnum;i++)
       if(vex==G->xlist[i].data)
       break;
     return i;
    }
    OLGraph* CreateDG(OLGraph *G)
    {
      G=(OLGraph *)malloc(sizeof(OLGraph));
      char vex1,vex2;
      int in,out;//分别表示头和尾巴 
      ArcBox *p; 
      
      printf("输入有向图的顶点数:\n");
      scanf("%d",&G->vexnum); 
      printf("输入有向图的边数:\n");
      scanf("%d",&G->arcnum);     
      printf("输入顶点值:");
      int i=0;
      printf("%d\n",G->vexnum);
      for(i=0;i<G->vexnum;++i)
      {
        printf("第%d次输入\n",i);
        printf("好奇葩\n");
        fflush(stdin);
        scanf("%c",&G->xlist[i].data); 
        G->xlist[i].firstin=G->xlist[i].firstout=NULL;
      } 
      int k=0;
      for(;k<G->arcnum;k++)
      {
       printf("输入弧%d(顶点1,顶点2)",k);
       fflush(stdin);//清空缓冲区,避免对后面数据的影响 
       scanf("%c,%c",&vex1,&vex2);//输入一条弧的始点和终点
       in =Locate(G,vex1);
       out =Locate(G,vex2);
       p=(ArcBox *)malloc(sizeof(ArcBox));
       p->headvex=in; p->tailvex=out;
       p->hlink=G->xlist[in].firstin;
       p->tlink=G->xlist[out].firstout; 
       G->xlist[in].firstin=G->xlist[out].firstout=p;
       scanf("%d",p->info);
      }
      
      return G;
    } 
     
    int main()
    {
      OLGraph *G;
      G=CreateDG(G);
      system("pause");
    }

    注:环境为:dev-c++,保存为.c文件

  • 相关阅读:
    tcp为什么要三次握手
    TCP/IP协议(一)网络基础知识
    拜占庭将军问题深入探讨
    Block Manager
    Standalone 集群部署
    Spark内存管理
    Checkpoint & cache & persist
    Python——在Python中如何使用Linux的epoll
    网络编程——C10K简述
    网络编程——The C10K Problem(C10K = connection 10 kilo 问题)。k 表示 kilo,即 1000
  • 原文地址:https://www.cnblogs.com/moshang/p/3772101.html
Copyright © 2011-2022 走看看