c语言实现十字链表储存有向图(《数据结构》算法7.3)
2016-02-20 14:53
465 查看
用c语言实现《数据结构》算法7.3的十字链表储存有向图。
代码如下:
代码如下:
#include<stdio.h> #define MAX_VERTEX_NUM 20 #include<stdlib.h> typedef struct ArcBox{//弧的结构体变量 int tailvex,headvex;//弧尾和弧头的位置,跟输入顺序有关 struct ArcBox *hlink,*tlink;//分别指向弧头和该弧相同,弧尾和该弧相同的弧 }ArcBox; typedef struct VexNode{ int data;//结点的值 ArcBox *firstin,*firstout;//分别指向该顶点第一条入弧和出弧 }VexNode; typedef struct{ VexNode xlist[MAX_VERTEX_NUM];//表头向量 int vexnum,arcnum;//结点数和弧数 }OLGraph; int LocateVex(OLGraph G,int v){//找到该结点的位置 for(int i=0;i<G.vexnum;i++) if(G.xlist[i].data==v)return i; } void CreateDG(OLGraph &G){ int i,j,k; ArcBox *p; printf("输入结点数目和弧的数目:\n"); scanf("%d%d",&G.vexnum,&G.arcnum);//输入结点和弧的数目 printf("输入各个结点的值:\n"); for(i=0;i<G.vexnum;i++){ scanf("%d",&G.xlist[i].data);//输入结点的值 G.xlist[i].firstin=NULL;//初始化 G.xlist[i].firstout=NULL;//初始化 } printf("依次序输入每条弧的弧尾和弧头:\n"); for(k=0;k<G.arcnum;k++){ int v1,v2; scanf("%d%d",&v1,&v2);//输入弧尾和弧头 i=LocateVex(G,v1);j=LocateVex(G,v2); p=(ArcBox *)malloc(sizeof(ArcBox)); p->tailvex=i;p->headvex=j;//对弧赋值 p->hlink=G.xlist[j].firstin; p->tlink=G.xlist[i].firstout; G.xlist[j].firstin=G.xlist[i].firstout=p;//对顶点赋值 } } int main(){ OLGraph G; CreateDG(G); return 0; }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例