目录
图是比树结构更复杂的一种数据结构。
树和图的区别:
在树结构中,可认为除根节点没有前驱外,其余的每个结点只有唯一的一个前驱(双亲结点),每个结点可以有多个后继(子树)结点。
在图中,任意两个结点之间都可能有直接的关系,所以图中一个结点的前驱和后继的数目是没有限制的。
基本概念:
图G是由集合V和E构成的二元组,记作G = (V,E),其中V是图中顶点的非空有限集合,E是图中边的有限集合。
从数据结构的逻辑关系角度来看,图中任一顶点都有可能与图中其他顶点有关系,而图中所有顶点都有可能与某一顶点有关系。
在图中,数据元素用顶点表示,数据元素之间的关系用边表示。
有向图:若图中每条边都是有方向的,则称为有向图。从顶点vi到vj的有向边<vi,vj>也称为弧,起点vi称为狐尾;终点vj称为弧头。
无向图:若图中的每条边都是无方向的,顶点vi和vj之间的边用(vi,vj)表示。
完全图:若一个无向图具有n个顶点,而每一个顶点与其他n-1个顶点之间都有边,则称为无向完全图。含有n个顶点的无向完全图共有n(n-1)/2条边;含有n个顶点的有向完全图中弧的数目为n(n-1)。
度、出度、入度:顶点v的度是指关联于该顶点的边的数目,记作D(v),若G为有向图,顶点的度表示该顶点的入度和出度之和。顶点的入度是以该顶点为终点的有向边的数目,记为ID(v),顶点的出度指以该顶点为起点的有向边的数目,记为OD(v)。
路径:若是有向图,则其路径是有方向的,路径长度是路径上边或弧的数目。第一个顶点和最后一个顶点相同的路径称为回路或环。
子图:若有两个图G = (V,E)和G‘ = (V’,E‘),V’属于V且E‘属于E,则称G’为G的子图。
连通图:在无向图G中,若从顶点vi到顶点vj有路径,则称顶点vi与顶点vj是联通的,如果无向图G中任意两个顶点都是联通的,则称其为连通图。
强连通图:在有向图G中,如果对于每一对顶点vi、vj属于V且vi != vj,从顶点vi到顶点vj和从顶点vj到顶点vi都存在路径,则称图G为强连通图。
网:边(或弧)具有权值的图称为网。
图的存储结构:
1,邻接矩阵表示法:是利用一个矩阵来表示图中顶点之间的关系,对于具有n个顶点的图G = (V,E)来说,其邻接矩阵是一个n阶方阵,且满足:
2,邻接链表表示法:
邻接链表是为图的每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对于有向图是以vi结尾的弧)。邻接链表中的结点有表结点和表头结点两种类型。
表结点:
adjvex | nextarc | info |
表头结点:
data | firstarc |
adjvex:指示与顶点vj接邻的顶点的序号;
nextarc:指示下一条边或弧的结点;
info:存储和边或弧有关的信息,如权值等;
data:存储顶点vi的名或其他有关信息;
firstarc:指示链表中的第一个结点。
查找:
1,静态查找表:
不进行修改表结构的操作,对查找表经常要进行的两种操作是如下:
1>,查询某个“特定”的数据元素是否还在查找表中;
2>,检索某个“特定”的数据元素的各种特性。
2,动态查找表:
是动态变化的,除了查询和检索,对查找表经常要进行的另外两种操作如下:
1>,在查找表中插入一个数据元素;
2>,从查找表中删除一个数据元素。
3,关键码
是数据元素(或记录)的某个数据项的值,用它来识别(标识)这个数据元素(或记录)。
主关键码是指能唯一标识一个数据元素的关键码;次关键码是指能标识多个数据元素的关键码。
顺序查找:
是从表中的第一个(或最后一个)记录开始,将给定值与查找表中的记录逐个进行比较,若找到一个记录的关键码与给定值相等,则查找成功;若整个表中的记录均比较过,仍未找到关键码等于给定值的记录,则查找失败。
折半查找:
也成为二分查找。该方法是将给定值与中间位置的记录的关键码作比较,若相等,则查找成功;若不等,则缩小范围,直至新的查找区间中间位置记录的关键码等于给定值或者查找区间没有元素时(表明查找不成功)为止。