设为首页 加入收藏

TOP

数据结构之---C++语言实现图的十字链表存储表示
2015-11-21 00:56:48 来源: 作者: 【 】 浏览:2
Tags:数据结构 ---C 语言 实现 十字 存储 表示

最近一直忙着考研复习,很久都没有更新博客了,今天写一篇数据结构的存储。

?

?

//有向图的十字链表存储表示
//杨鑫
#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; #define MAX_VERTEX_NUM 20 #define OVERFLOW -2 #define OK 1 typedef int Status; typedef char VertexType[MAX_VERTEX_NUM]; typedef char InfoType; //弧(边)的结构体 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 u) { for(int i = 0; i < G.vexnum; ++i) if(strcmp(G.xlist[i].data, u) == 0) return i; return -1; } //构造有向图G; Status CreateDG(OLGraph &G) { int i,j,k; printf(请输入有向图的顶点数以及弧数: ); scanf(%d%d,&G.vexnum, &G.arcnum); printf(请输入%d个顶点的值,之间有空格隔开: ,G.vexnum); for(i=0; i
      
       tailvex = i; p->headvex = j; p->hlink = G.xlist[j].firstin; p->tlink = G.xlist[i].firstout; p->info = NULL; G.xlist[j].firstin = G.xlist[i].firstout = p; //完成在入弧和出弧链头的插入 } getchar(); return OK; } void DisplayArc(OLGraph &G) { ArcBox *p; for(int i=0; i < G.vexnum; ++i) { p=G.xlist[i].firstout; while(p) { printf(<%s,%s> ,G.xlist[p->tailvex].data, G.xlist[p->headvex].data); p = p->tlink; } } printf( ); } //顶点的度:入度+出度 int VexDegree(OLGraph &G, VertexType v) { int k = LocateVex(G,v); if(k<0) exit(OVERFLOW); int id=0,od=0; //入度,出度 ArcBox *pin = G.xlist[k].firstin; ArcBox *pout = G.xlist[k].firstout; while(pin) //求入度 { ++id; pin = pin->hlink; } while(pout) //求出度 { ++od; pout = pout->tlink; } return id+od; //顶点的度 } int main() { int flag = 1; OLGraph G; CreateDG(G); printf(========================================= ); printf(该有向图的弧如下: ); DisplayArc(G); VertexType v; printf( ========================================= ); while(1) { if(flag == 0) break; printf(请输入任意顶点,将输出该顶点度的值:); scanf(%s,v); getchar(); printf(顶点 %s 的度为 :%d ,v,VexDegree(G,v)); printf(结束请输入 0 以回车键结束 ); cin>>flag; } printf(========================================= ); return 0; } 
      
     
    
   
  

?

?

结果:

\


?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++对象模型――Default Construc.. 下一篇hdoj1051Wooden Sticks

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: