数据结构之---C++语言实现图的十字链表存储表示
来源:互联网 发布:临床医学出国留学 知乎 编辑:程序博客网 时间:2024/05/18 04:54
最近一直忙着考研复习,很久都没有更新博客了,今天写一篇数据结构的存储。
//有向图的十字链表存储表示//杨鑫#include <iostream>#include <cstdio>#include <stdlib.h>#include <cstring>using namespace std;#define MAX_VERTEX_NUM 20#define OVERFLOW -2#define OK 1typedef 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("请输入有向图的顶点数以及弧数:\n");scanf("%d%d",&G.vexnum, &G.arcnum);printf("请输入%d个顶点的值,之间有空格隔开:\n",G.vexnum);for(i=0; i<G.vexnum; ++i) //构造表头向量{getchar();scanf("%s",G.xlist[i].data); //输入顶点值G.xlist[i].firstin = NULL;G.xlist[i].firstout = NULL;}VertexType v1,v2;ArcBox *p;printf("请依次输入%d条弧各自依附的两个顶点(输入格式:v1 v2)\n",G.arcnum);for(k=0; k < G.arcnum; ++k) //输入各弧并构造十字链表{getchar();scanf("%s%s",v1,v2);i=LocateVex(G,v1);j=LocateVex(G,v2);p = (ArcBox *)malloc(sizeof(ArcBox));if(!p)exit(OVERFLOW);p->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("\n");}//顶点的度:入度+出度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("=========================================\n");printf("该有向图的弧如下:\n");DisplayArc(G);VertexType v;printf("\n=========================================\n");while(1){if(flag == 0)break;printf("请输入任意顶点,将输出该顶点度的值:");scanf("%s",v);getchar();printf("顶点 %s 的度为 :%d\n",v,VexDegree(G,v));printf("结束请输入 0 以回车键结束\n\n");cin>>flag;}printf("=========================================\n");return 0;}
结果:
0 0
- 数据结构之---C语言实现图的十字链表存储表示
- 数据结构之---C++语言实现图的十字链表存储表示
- 数据结构:有向图的十字链表存储表示(c实现)
- 数据结构之---C语言实现二叉树的二叉链表存储表示
- 数据结构之---C语言实现二叉树的三叉链表存储表示
- 数据结构之---C语言实现图的邻接表存储表示
- C数据结构学习历程(7) 图之十字链表 表示法
- 数据结构之---C语言实现串的块链存储表示
- 数据结构之---C语言实现图的数组(邻接矩阵)存储表示
- 十字链表的c语言实现
- 看数据结构写代码(37) 图的十字链表的表示与实现
- 数据结构之---C语言实现广义表头尾链表存储表示
- 数据结构之---C语言实现广义表头尾链表存储表示
- 数据结构之图的十字链表
- 数据结构:图(十字链表存储 c++实现)
- 数据结构之---C语言实现数组的顺序存储表示(可运行)
- c语言实现十字链表储存有向图(《数据结构》算法7.3)
- 数据结构之---C/C++实现稀疏矩阵的十字链表
- 【JSP基础】Dreamwe记录集简单用法,简单的jsp直连数据库
- 一个Matlab中批量处理文件的实例
- zoj 1610 Count the Colors
- 图解HTTP-笔记
- HALCON算子函数——Chapter 7 : Image
- 数据结构之---C++语言实现图的十字链表存储表示
- 关于linux中c语言的编译问题的总结
- [dfs]hdu2181 哈密顿绕行世界问题
- 自学1
- hdoj2120 Ice_cream's world I【并查集】
- C++开源代码项目
- 浅谈LCD、OLED、TFT取模及其程序开发的算法取舍
- HALCON算子函数——Chapter 6 : Graphics
- 2015年7月29日