从小白开始自学数据结构——第十二天【图及其基本概念和邻接表的定义】
图的定义图是由顶点的有穷非空集合和顶点之间的边的集合组成,通常表示为:G(V,E).其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。图的基本概念:顶点:图的数据元素(就像线性表中的元素,树中的结点)无向边:若顶点V[i]到V[j]之间的边没有方向,则称这条边为无向边。用无序偶对(V[i], V[j])来表示。无向图:图中任意两个顶点之间的边都是无向边的图无向完全图:在无向图中,如果任意两边都存在边,则称该图为无向完全图。含有n个顶点的无向完全图有 N*(N-1)/2 条边有向边: 若顶点V[i]到V[j]之间有方向,则称这条边为有向边,也称为弧用有序偶对<V[i],V[j]>来表示。有向图:若图中任意两个顶点之间的边都是有向边,则称该图为有向图。有向完全图:在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧则称该图为有向完全图。弧:链接顶点A到顶点D的有向边就是弧,A是弧尾,D是弧头,<A,D>表示弧。(弧头、弧尾的顺序不能写反)无向边用()表示,有向边用<>表示。简单图:在图中,若不存在顶点到自身的边,且同一条边不重复出现,则称这样的图为简单图。稀疏图(稠密图):边或弧很少的图称为稀疏图,反之则称为稠密图。权和网:与图的边或弧相关的数叫做权,带权的图通常成为网。子图:设图G=(V,{E}),图G'=(V',{E'}),如果v'是v的子集,E'是E的子集则G'是G的子图。度:顶点V的度是和V相关联的边的数目。记为TD(V)入度和出度:以顶点V为头的弧的数目称为V的入度,记为ID(InDegerr)以顶点V为尾的弧的数目称为V的出度,记为Od(OutDegree)顶点V的度为TD(V)=ID(v)+OD(v)路径的长度:路径的长度是路径上的边或弧的数目。简单路径序列中顶点不重复出现的路径称为简单路径 回路(环)第一个顶点到最后一个顶点相同的路径称为回路或环。简单回路(简单环)除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路。为简单回路(简单环)连通: 在无向图中如果从V'到V有路径,则称V和V'是连通的。连通图:若图中任意两个顶点都是连通的,则称该图为连通图。连通分量:无向图的极大连通子图,称为连通分量。1.要是子图2.子图要是连通的3.连通子图含有极大顶点数4.具有极大顶点数的连通子图包含依附于这些顶点的所有边。强连通图:在有向图G中,对于图中每一对不相等的顶点V[i],V[j]从V[i]到V[j]和从V[j]到V[i]都存在路径,则图G为强连通图。记录到这里我又想吐了强连通分量:有向图中的极大强连通子图称作有向图的强连通分量。连通图的生成树:含有图中全部n个顶点,但只有足以构成一颗树的n-1条边。如果一个图有n个顶点和小于n-1条边,则是非连通同如果多于n-1条边,必定构成一个环因为这条边使得它依附的那两个顶点之间有了第二路径。但是有n-1条边不一定是生成树。有向树:如果一个有向图恰有一个顶点的入度为0,其余顶点入度为1,则是一颗有向树。一个有向图的生成森林由若干棵有向树组成,含有图中全部顶点但是只有足以构成若干棵不相交的有向树的弧。..|--顶点|—无向图|| |--边(带权则称为网)丨—有无方向—| 丨 | |--顶点丨 |—有向图| |--弧头丨 |--弧| (带权则称为网)丨 |--弧尾丨丨 |--稀疏图丨 |—边的多少|丨 | |--稠密图丨 |丨—边或弧 —| —任意两顶点存在边为完全图,有向的为有向完全图丨 |丨 |丨 |—无重复的边或顶点到自身的边叫简单图(主要研究的就是这个)丨丨 |—无向图顶点的边数叫度
图的基本概念——丨—顶点 —| |--入度丨 |有向图顶点|丨 |--出度丨丨丨 |--连通(两顶点存在路径)丨 |丨—路径 —| --环 (如果路径回到起始点)丨 |丨 |--简单路径(不重复)丨丨 |--强连通图(有向连通图)丨 |丨—连通图 —| --连通分量(子图极大连通)丨 |丨 |--强连通分量(有向的子图极大连通)丨 丨 |--生成树(无向图连通且n个顶点,n-1条边)丨 |丨—树 —| --有向树(有向图其中一个顶点入度为0,其余顶点入度为1)||--生成森林(一个有向图由脱岗额有向树构成生成森林)
我感觉这个结构图应该是没有错版的。。。
/*******************************邻接表的建立
*******************************/# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>typedef char VertexType;//顶点类型
typedef int EdgeType; //权值类型#define MAXVEX 100typedef struct EdgeNode //边表结点
{int adjvex; //邻接点域,存储对应顶点的下标EdgeType whight; //存储权值,用于网图struct EdgeNode * next; //链域,指向下一个邻接点
}EdgeNode;typedef struct VertexNode //顶点表结点
{ VertexType date; //顶点域,存储顶点的信息EdgeNode *firstedge; //边表头指针
}VertexNode, AdjList[MAXVEX];typedef struct
{AdjList adjList;int numVertexes, numEdges; //图中当前顶点数和边数
}GraphAdjList;void create_algraph (GraphAdjList *G);int main()
{return 0;
}void create_algraph (GraphAdjList *G)
{int i, j, k;EdgeNode *e;printf ("输入顶点数和边数:\n");scanf ("%d,%d",&G->numVertexes,&G->numEdges);//建立顶点表for (i = 0;i<G->numVertexes; i++){scanf (&G->adjList[i].date); //输入顶点信息G->adjList [i].firstedge=NULL; //将边表置为空}for (k=0;k<G->numEdges;k++) //建立边表{printf ("输入边(vi,vj)上的顶点序号:\n");scanf ("%d,%d",&i,&j); //输入vi,vj顶点序号e=(EdgeNode *)malloc(sizeof(EdgeNode)); //向内存申请空间//生成边表结点e->adjvex=j; //邻接序号为je->next=G->adjList[i].firstedge; //将e指针指向当前顶点指向的结点G->adjList[i].firstedge=e; //将当前顶点的指针指向ee=(EdgeNode *)malloc(sizeof(EdgeNode)); //邻接序号为ie->adjvex=i;e->next=G->adjList[j].firstedge;G->adjList[i].firstedge=e;}
}
今天有事,就不做题了,明天补上。。。。
从小白开始自学数据结构——第十二天【图及其基本概念和邻接表的定义】相关推荐
- 图的邻接矩阵存储和邻接表存储定义方法
一.邻接矩阵 #include <iostream> using namespace std; #define MaxVertexNum 100 //顶点最大数目//邻接矩阵存储结构 ty ...
- 数据结构之图的存储结构:邻接表法
图的存储结构:邻接表法 产生条件: 邻接表法的定义: 邻接表法的特点: 邻接表法的代码定义: 邻接表法与邻接矩阵法的对比: 产生条件: 当用邻接矩阵存储时:空间复杂度为O(|v|^2),太大 邻接表法 ...
- 图的存储-邻接矩阵和邻接表之间的相互转化
邻接矩阵和邻接表之间的相互转化,输出邻接矩阵和邻接表算法实现. 将文件保存为GraphBasicOperation.cpp文件,具体实现如下: #include <stdio.h> #in ...
- 数据结构——图-有向图和无向图的邻接表基础
#include <stdio.h> #include <stdlib.h> #define VertexType char //顶点的数据类型(char) #define V ...
- 数据结构与算法A实验六图论---7-11 邻接表创建无向图
采用邻接表创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数. 输入第二行为顶点的信息,每个顶点只能用一个字符表 ...
- 图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)
邻接表存储的图 - DFS /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visi ...
- 图的存储--邻接矩阵和邻接表(链表实现和用vector实现)
邻接矩阵: #include<iostream> #include<vector> #include<iomanip> #include<string> ...
- 图的存储结构之邻接表(详解)
之前我们介绍过图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M.对于稀疏图来说,M要远远小于N2.先上数据,如下. 1 2 3 ...
- 图的存储结构之邻接表
什么是邻接表? 邻接表(Adjacency List)是图的一种顺序存储与链式存储结合的存储方法. 对于图G中的每个顶点Vi,将所有邻接于Vi的顶点Vj链成一个单链表,这个单链表就称为顶点Vi的邻接表 ...
最新文章
- golang的mongodb操作(mgo)
- javax.servlet.GenericServlet类(协议无关版本)
- SQL语言基础:数据库语言概念介绍
- ansible 第一次练习
- 苹果被拒:Guideline 5.0 - Legal
- css的id和class场景,CSS Id 和 Class选择器
- 计算机组装日记,求微机组装与维护实习日记?
- 在Android中加入GOOGLE统计系统
- Mex-hdu4747(DP)
- ARPG游戏的战斗系统设计经验分享
- 密码学入门(5):单向散列函数
- 怎样让自己变得更优秀?职场精英是如何炼成的?怎样成为行业精英
- coxphfit+matlab,计算Cox比例风险模型的coxph和cph函数有什么区别?
- Real-ESRGAN
- 一个HashMap对象所占内存的分析
- 动物识别系统-tensorflow项目
- 翻翻git之---溜的飞起的加载效果AVLoadingIndicatorView
- 基于回溯搜索优化算法的WSN覆盖优化
- uCore OS(on RISC-V64)——LAB1:中断机制
- 人机工程学产品设计案例_极匞丨艺术类专插本【白云学院产品设计】模块分析...