`
128kj
  • 浏览: 607474 次
  • 来自: ...
社区版块
存档分类
最新评论

图的概义及存储方法

    博客分类:
阅读更多
一、概念。
图: 是一种复杂的非线性数据结构。
图的二元组定义:

图G由两个集合V和E组成,记为:
  G=(V, E)  其中: V 是顶点的有穷非空集合,
  E是V中顶点偶对(称为边)的有穷集。

  通常,也将图G的顶点集和边集分别记为V(G)和E(G) 。 E(G)可以是空集。若E(G)为空,则图G只有顶点而没有边。

有向图: 若图G中的每条边都是有方向的,则称G为有向图 (Digraph) 。
无向图: 若图G中的每条边都是没有方向的,则称G为无向图 (Undigraph) 。
完全图: 若无向图中的每个顶点之间存在着一条边,有向图中的每两个定点之间都存在着方向相反的两条边,则称此图为完全图。

邻接点:
   有向图:如果<u, v>∈E, 则称v为u的邻接点,u为v的逆邻接点。边<u, v>与顶点u和v相关联,从u出发的边称为u的出边或邻接边,而指向顶点u的边称为u的入边或逆邻接边。
   无向图:如果(u, v)∈E, 则称u与v互为邻接点。

顶点的度、入度与出度:
  依附与某顶点v的边数称为度;
  在有向图中,顶点v的入度指以顶点为终点的边的数目。出度指以顶点为起始点的边的数目;


连通图:无向图中,若一个顶点到另一个顶点有路径,则称这2个顶点是连通的。如果图中任意2顶点都是连通的,则称该图是连通图。

连通分量:指无向图的极大连通子图。

权:与图中边有关的实数。
带权图或网:边上具有权值的图。

二、抽象数据类型
  ADT Graph{
    数据对象D:具有相同性质的数据元素的集合。
    数据关系R:R{<u,v>|(u,v∈D)}。
    基本操作:
     1   int getType();//返回图的类型
     2   int getVexNum();//返回图的顶点数
     3   int getEdgeNum();//返回图的边数
     4   Iterator getVertex();//返回图的所有顶点
     5   Iterator getEdge();//返回图的所有边
     6   void remove(Vertex v);//删除一个顶点v
     7   void remove(Edge e);//删除一条边e
     8   Vertex insert(Vertex v);//添加一个顶点v
     9   Edge insert(Edge e);//添加一条边e
     10  //对图进行深度优先遍历
     11  //对图进行广度优先遍历
     12  //求顶点v到其他顶点的最短路径

   。。。。。。。。。。。。。。。。。。。。。。
  }

三、图的存储方法

  1、邻接矩阵表示法:采用2个数组来表示图;一个是存储所有顶点信息的一维数组、一个是存储图中顶点之间关联关系的二维数组,这个二维数组称为邻接矩阵


   对于无向图a,邻接矩阵是一个对称矩阵。第i行(i列)非0元素的个数正好是第i个顶点的度。

   对于有向图b,第i行非0元素的个数是第i个顶点的出度、i列非0元素的个数是第i个顶点的入度。


邻接矩阵的不足:

      (1)、由n个顶点构成的图中最多可以有n*n条边,但大多数情况下,边的数目远远达不到这个量级,邻接矩阵中大多数单元都是闲置的。

   (2)、矩阵结构是静态的,大小N需要预先估计,然后创建N*N的矩阵,而图的规模往往是动态变化的,N估计过大会造成空间浪费,过小则造成空间不够用。



  2、邻接表表示法:
   链接表是图的一种动态的链式存储方法,类似于树的孩子链表表示法。
      对于n个顶点、m条边的无向图,采用邻接表,需要n个表头节点和2m个边表节点。在边稀疏的情况下,要比使用邻接矩阵节省空间。


邻接表的特性:
    在无向图中,顶点v的度为v的邻接表中表节点的个数。
    在有向图中,顶点v的邻接表中边表的节点个数仅为v的出度。入度需要遍历这个邻接表或者从逆邻接表中获取。

    判断2个顶点直接是否有边需要搜素2个顶点对应的邻接表。不如邻接矩阵方便。 

  • 大小: 28.1 KB
  • 大小: 18.8 KB
分享到:
评论

相关推荐

    在图片上写字并保存类

    在C#编程中,"在图片上写字并保存类"是一个常见的图像处理任务,涉及到的主要知识点包括图形用户界面(GUI)设计、图像处理库、文本渲染以及文件操作。以下是对这些知识点的详细解释: 1. 图形用户界面(GUI)设计...

    图片存储到数据库保存二进制文件,并在DATAGRIDVIEW中显示出来

    在C#编程中,将图片存储到数据库并以二进制数据的形式保存,以及在DataGridView控件中显示这些图片,是一项常见的任务。这种操作在处理大量图像数据时尤其有用,例如在开发一个需要展示产品图片的电子商务应用或者...

    XML数据库的数据存储方法分析

    XML数据库的数据存储方法分析XML数据库的数据存储方法分析XML数据库的数据存储方法分析XML数据库的数据存储方法分析XML数据库的数据存储方法分析XML数据库的数据存储方法分析XML数据库的数据存储方法分析XML数据库的...

    java+MongoDB实现存图片、下载图片的方法示例

    本文主要介绍了使用java和MongoDB实现存图片和下载图片的方法,并结合实例形式详细分析了java结合MongoDB实现图片的存储和下载相关操作技巧。 Java和MongoDB简介 在本文中,我们将使用java作为开发语言,并配合...

    springmvc获取并保存base64编码的图片的方法

    ajax post 上传图片springmvc获取并保存base64编码的图片的方法

    打开,保存,转化图片

    在IT领域,图片操作是日常工作中常见的任务,无论是开发图形用户界面、处理图像数据还是进行数据分析,都可能涉及图片的打开、保存以及格式转换。在这个过程中,了解如何以不同的数据形式来表示和处理图片至关重要。...

    图片转base64保存到数据库 , 并回显到浏览器

    这种方法可以避免处理图片的上传、存储和路径管理问题,简化系统架构。以下是关于这个主题的详细知识: 1. **Base64编码**: Base64是一种将二进制数据转化为可打印字符的方法,常用于在邮件系统、HTTP协议等文本...

    图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片)

    总的来说,这个示例提供了一种有效的方法来处理数据库中的图片存储,通过BASE64编码简化了数据的传输和存储,同时在数据库层面利用Blob类型保持了图片数据的完整性。不过,对于大量图片或需要安全保护的图片,更推荐...

    图片 存储 图片 sql 数据库 存储 picture

    2. **文件系统存储与数据库链接**:另一种常见方法是将图片存储在文件系统中,然后在数据库中存储文件路径或URL。这种方式可以减轻数据库的压力,因为大部分读写操作都在文件系统进行。但是,需要确保文件系统和...

    javascript实现将文件保存到本地方法汇总

    标题中提到的是JavaScript实现将文件保存到本地的方法汇总,具体的知识点涵盖了以下三个方面: 1. 使用JavaScript保存文件到本地的基本方法和原理。在Web开发中,通常我们没有直接的方法去保存文件到用户的设备上,...

    手写签名图片,可保存为图片或到数据库

    本项目"手写签名图片,可保存为图片或到数据库"是基于C#的WinForm应用程序,它允许用户进行手写签名,并将签名保存为图片格式或者存储到数据库中。以下是关于这个项目的详细知识点: 1. **手写签名控件**:在...

    delphi源码窗体保存为图片

    5. **保存图片格式**:Delphi提供了多种方法保存图片,如BMP、JPEG、PNG等。我们可以使用`SaveToFile`函数配合相应的编码器库来实现。 下面是一个简单的示例代码,展示了如何将Delphi窗体保存为图片: ```delphi ...

    保存图片到本地相册

    在Android应用开发中,将图片保存到用户的本地相册是一个常见的功能需求,尤其在浏览网页、社交媒体或使用图像处理应用时。"保存图片到本地相册"这一功能涉及到多个技术点,包括权限管理、文件操作以及用户界面交互...

    高效存储文本,存储图片方法

    在IT领域,高效地存储文本和图片是至关重要的,尤其在大数据时代,如何优化存储方案以节省空间、提高访问速度并确保数据安全是每个开发者和系统管理员需要关注的问题。本篇将详细介绍两种主要的存储方式:文本存储和...

    Android实现长按图片保存至相册功能

    2. 创建一个Intent用于存储图片:使用ACTION_IMAGE_CAPTURE意图,但因为Android API 29及以上版本的安全性改变,我们可能需要使用ContentResolver和MediaStore来保存图片。 ```java ContentValues values = new ...

    vb6保存窗口界面为图片

    在VB6(Visual Basic 6)中,保存窗口界面为图片涉及到的是图形处理和文件操作的知识。VB6提供了一些内置的API函数和控件,使得开发者可以捕获应用程序的当前视图并将其保存为图像文件。以下是实现这一功能的关键...

    如何将图片转换成二进制存储

    ### 如何将图片转换成二进制存储 在IT领域,特别是Web开发中,经常会遇到需要将图片存储到数据库的情况。通常来说,图片文件较大,不适合直接存储在数据库中,但有时为了方便检索或者实现某些特定功能(如在线查看...

    C#获取图片并保存到本地

    在C#编程环境中,获取网络上的图片并保存到本地是一个常见的任务,这通常涉及到网络请求、数据流处理以及文件操作。下面将详细讲解这个过程,包括必要的知识点和步骤。 首先,你需要一个方法来发送HTTP请求获取图片...

    C#存储图片到数据库的方法

    C#存储图片到数据库的方法 C#语言提供了多种方式来存储图片到数据库中,下面我们来详细探讨其中的一种方法,即使用BinaryReader和SqlParameter来存储图片到数据库的Image字段中。 首先,我们需要了解存储图片...

    vb.net 使用Access数据库保存和读取图片文件

    在VB.NET中,Access数据库常被用于小型项目的数据存储,包括保存和读取不同类型的数据,如文本、数字,甚至图片。本教程将详细介绍如何利用VB.NET与Access数据库交互,实现图片文件的保存与读取,并将结果展示在...

Global site tag (gtag.js) - Google Analytics