C数据结构学习历程(7) 图之十字链表 表示法

来源:互联网 发布:cad网络面板 编辑:程序博客网 时间:2024/05/01 21:27

       我是参照《严蔚敏数据结构ppt》http://wenku.baidu.com/view/3ff16fc20242a8956aece41d.html以及《大话数据结构》来写的,因为ppt上有些错,而视频上的代码不全,自己另写了。ppt上错哪,我就不指出了,大家可以对照着看,就能发现不同之处。

#include<iostream>using namespace std;#define MAX_VERTEX_NUM 20#define INFINITY 65535  //用这个值代表无穷,define的用法还可以带参数typedef char VertexType; //顶点类型typedef int  InfoType ;  //typedef为类型定义typedef struct ArcBox{int tailvex,headvex;     //表示一条弧的尾和头 的下标struct ArcBox * hlink,*tlink;InfoType *info;}ArcBox;typedef struct VexNode{VertexType data;ArcBox *firstin,*firstout;}VexNode;typedef struct{VexNode xlist[MAX_VERTEX_NUM];int vexnum,arcnum;              //顶点数和弧数}OLGraph;int LocateVex(OLGraph G,VertexType vp){for(int k=0;k<G.vexnum ;k++){if(G.xlist [k].data ==vp){return k;}}return (-1);}void CreateDG(OLGraph &G){//构造有向图VertexType v1,v2; int i1,i2;cin>>G.vexnum>>G.arcnum ;for(int i=0;i<G.vexnum;i++)   //构造表头向量{cin>>G.xlist [i].data ;   //输入顶点值        G.xlist [i].firstin =NULL;G.xlist [i].firstout =NULL; //初始化指针}for(int k=0;k<G.arcnum ;k++){cin>>v1>>v2;  //这是输入弧 的两个开始点(对应为弧的尾巴)和结尾点        i1=LocateVex(G,v1);i2=LocateVex(G,v2);ArcBox *p=(ArcBox*)malloc(sizeof(ArcBox));/*ArcBox *p;ArcBox p1={i1,i2,G.xlist[i2].firstin,G.xlist[i1].firstout,NULL};  //这样子就不用开指针了p=&p1;*/                                       //书上好像有错做不到 *p={};p->tailvex =i1;p->headvex =i2;p->hlink =G.xlist[i2].firstin;p->tlink =G.xlist[i1].firstout;p->info=NULL;G.xlist[i2].firstin=G.xlist[i1].firstout=p;  }}int main(){OLGraph G;CreateDG(G);G.xlist [0].firstin ;return 0;}


调试如下:



0 0
原创粉丝点击