码迷,mamicode.com
首页 > 其他好文 > 详细

十字链表的方式实现在头部插入图中节点

时间:2014-06-12 00:13:49      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   http   

bubuko.com,布布扣
#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");
}
bubuko.com,布布扣

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

十字链表的方式实现在头部插入图中节点,布布扣,bubuko.com

十字链表的方式实现在头部插入图中节点

标签:style   class   blog   code   java   http   

原文地址:http://www.cnblogs.com/moshang/p/3772101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!