首页 > 代码库 > 十字链表的方式实现在头部插入图中节点
十字链表的方式实现在头部插入图中节点
#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文件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。