图和广义表

合集下载

华师网络学院作业答案-数据结构判断题

华师网络学院作业答案-数据结构判断题

消除递归不一定需要使用栈。

答案:正确在开散列表中不会出现堆积现象。

答案:正确在链栈上进行进栈操作时,不需判断栈满。

答案:正确算法的正确性,一般不进行形式化的证明,而是用测试来验证。

答案:正确顺序表不需存放指针,链表要存放指针,故链表的存储空间要求总是比顺序表大。

答案:错误如果n个顶点的无向图有n条边,则图中肯定有回路。

答案:正确图G的生成树T是G的子图。

答案:正确数组的基本运算有读、写、插入、删除等。

答案:错误不管树的深度和形态如何,也不可能构造出一棵有100个结点的哈夫曼树。

答案:正确如果根结点的左子树和右子树高度差不超过1,则该二叉树是平衡二叉树。

答案:错误排序的目的是为了方便以后的查找。

答案:正确以中序方式遍历一个堆,则得到一个有序序列。

答案:正确二叉树中可能所有结点的度都小于2。

答案:正确顺序表可以按序号随机存取。

答案:正确在二叉排序树中,即使删除一个结点后马上再插入该结点,该二叉排序树的形态也可能不同。

答案:正确队列在使用中必须设置两个指针,分别指向真正的队头和队尾的位置。

答案:错误数据的逻辑结构和运算集组成问题的数学模型,与计算机无关。

对称矩阵压缩存储后仍然可以随机存取。

答案:正确有向图中顶点i的出度等于邻接矩阵中第i行中1的个数;入度等于第i列中1的个数。

答案:错误树和森林都可转化为二叉树,故对给定的二叉树,不能区分是由树还是森林转换来的。

答案:错误循环队列中入队和出队的节点位置可出现在数组的任一端,已不满足“一端进另一端出”的要求,故实际上已不是队列了。

答案:错误顺序查找法不仅可用于顺序表上的查找,也可用于链表上的查找。

答案:正确有向图中边数等于邻接矩阵中1的个数;也等于邻接表中的边表结点数。

答案:正确直接插入排序是稳定的,而Shell排序就是调用若干趟直接插入排序,故也是稳定的。

答案:错误基数排序不需进行关键字间的比较,故执行时间比基于比较的排序方法要快。

答案:错误由二叉树的先根和后根序列可以唯一确定该二叉树。

数据结构考试要点

数据结构考试要点

第一章:数据结构包含:逻辑结构,数据的存储结构,对数据进行的操作。

数据元素:相对独立的基本单位,即可简单也可复杂,简单的数据元素只有一个数据项,数据项是数据的不可分割的最小单位。

数据对象:性质相同的数据元素的集合。

数据结构:相互存在一种或者多种特定关系的数据元素的集合(集合,线性结构,树结构,图结构)。

顺序存储结构:数据元素按照逻辑顺序依次存放在存储器的一段连续存储单元中。

链式存储结构:存储在存储空间的任意位置上,包含一个数据域和至少一个指针域,要访问,必须从第一个元素开始查找。

数据类型:一组值加一组操作。

第二章:线性表:有限多个性质相同的数据元素构成的一个序列,数据元素的个数就是长度。

线性表的顺序存储结构:用一组地址连续的存储单元能随机存取的结构。

链式存储结构:具有链式存储结构的线性表称为链表,是用一组地址任意的存储单元来存线性表中的数据元素。

每个数据元素存储结构包括数据元素信息域和地址域,存放一个数据元素的存储结构称为结点,每个结点只定义一个指针域,存放的是当前结点的直接后记结点的地址(直接后继结点),线性表的最后一个结点指针域存放空(0,NULL)标志结束。

不支持随机存取,访问必须从第一个结点开始,一次访问。

双向链表:每个结点设置两个方向的指针(直接前驱和直接后继)。

第三章:栈:堆栈的简称,限定在表尾进行插入和删除的线性表。

特点是后进先出。

当栈定指针指向栈底时,为空栈。

队列:限定只能在一端进行插入和在另一端进行删除的线性表,进行插入的是队尾,删除的是队头。

特点是先进先出。

队列的链式结构:用一个链表依次存放从队头到队尾的所有的数据元素。

存放队头地址(队头指针)队尾地址(队尾指针),空链队列:有头结点,空队列条件是头结点存放0,无头结点为队头指针指向空。

队列的顺序存储结构:用一组地址连续的存储空间依次存放从队头到队尾的所有数据元素,再用队头指针和队尾指针记录队头和队尾的位置。

队头指针指向队头元素前一个数组元素的位置,队尾始终指向队尾,当队尾和队头指向同一位置,空队列。

数据结构大纲知识点

数据结构大纲知识点

数据结构大纲知识点一、绪论。

1. 数据结构的基本概念。

- 数据、数据元素、数据项。

- 数据结构的定义(逻辑结构、存储结构、数据的运算)- 数据结构的三要素之间的关系。

2. 算法的基本概念。

- 算法的定义、特性(有穷性、确定性、可行性、输入、输出)- 算法的评价指标(时间复杂度、空间复杂度的计算方法)二、线性表。

1. 线性表的定义和基本操作。

- 线性表的逻辑结构特点(线性关系)- 线性表的基本操作(如初始化、插入、删除、查找等操作的定义)2. 顺序存储结构。

- 顺序表的定义(用数组实现线性表)- 顺序表的基本操作实现(插入、删除操作的时间复杂度分析)- 顺序表的优缺点。

3. 链式存储结构。

- 单链表的定义(结点结构,头指针、头结点的概念)- 单链表的基本操作实现(建立单链表、插入、删除、查找等操作的代码实现及时间复杂度分析)- 循环链表(与单链表的区别,操作特点)- 双向链表(结点结构,基本操作的实现及特点)三、栈和队列。

1. 栈。

- 栈的定义(后进先出的线性表)- 栈的基本操作(入栈、出栈、取栈顶元素等操作的定义)- 顺序栈的实现(存储结构,基本操作的代码实现)- 链栈的实现(与单链表的联系,基本操作的实现)- 栈的应用(表达式求值、函数调用栈等)2. 队列。

- 队列的定义(先进先出的线性表)- 队列的基本操作(入队、出队、取队头元素等操作的定义)- 顺序队列(存在的问题,如假溢出)- 循环队列的实现(存储结构,基本操作的代码实现,队空和队满的判断条件)- 链队列的实现(结点结构,基本操作的实现)- 队列的应用(如操作系统中的进程调度等)四、串。

1. 串的定义和基本操作。

- 串的概念(字符序列)- 串的基本操作(如连接、求子串、比较等操作的定义)2. 串的存储结构。

- 顺序存储结构(定长顺序存储和堆分配存储)- 链式存储结构(块链存储结构)3. 串的模式匹配算法。

- 简单的模式匹配算法(Brute - Force算法)的实现及时间复杂度分析。

数据结构课程学习报告

数据结构课程学习报告

一、课程简介算法与数据结构是计算机等相关专业的一门十分重要的专业基础课,在计算机学科中起到承前启后的作用。

它主要研究计算机加工对象的逻辑结构、在计算机中的表示形式以及实现各种基本操作的算法。

要求学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析技术,培养学生数据抽象的能力。

本课程主要是让我们掌握数据结构的基本概念、线性表、栈和队列、串和数组、树形结构、图结构、查找、排序等内容。

二、各章知识点概述第一章---绪论学习内容:数据结构相关的基本概念,包括数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构等;算法时间复杂度的分析。

重难点:数据结构相关的基本概念,数据结构所含两个层次的具体含义及其相互关系以及算法时间复杂度的分析方法(多重循序)。

第二章---线性表学习内容:第二章线性表主要内容是顺序表和链表的相关概念,顺序表和链表的查找、插入和删除等相关操作及其算法实现,链表的创建算法,并能够设计出线性表应用的常用算法,比如线性表的合并等;能够从时间和空间复杂度的角度比较两种存储结构的不同特点及其适用场合,明确它们各自的优缺点。

重难点:理清顺序表和链表的特点,学会用C写相关操作的代码。

第三章---栈和队列学习内容:栈和队列的特点。

顺序栈和链栈的进栈和出栈算法,以及循环队列和链队列的进队和出队算法。

重难点:学会灵活运用栈和队列解决实际应用问题,用C及栈和队列的特点写相关操作的代码。

比如表达式求值算法,理解递归算法执行过程中栈的状态变化过程,以更好地使用递归算法等。

第四章---串、数组和广义表学习内容:串的存储方法,理解串的两种模式匹配算法—BF算法和KMP算法。

明确数组和广义表这两种数据结构的特点,数组地址计算方法,几种特殊矩阵的压缩存储方法。

广义表的定义、性质及GetHead和GetTail的操作。

重难点:KMP算法;数组存储时地址的计算方法等。

国家开放大学《数据结构(本)》综合练习题参考答案

国家开放大学《数据结构(本)》综合练习题参考答案
10.元素 111,113,115,117 按顺序依次进栈,则该栈的不可能输出序列是( ) (进栈出栈可以交替进行)。
A. 111,113,115,117 B. 117,115,111,113 C. 117,115,113,111 D. 113,111,117,115 11.图状结构中数据元素的位置之间存在( )的关系。 A. 每一个元素都有一个且只有一个直接前驱和一个直接后继 B. 多对多 C. 一对一 D. 一对一 12.以下说法正确的是( )。 A. 栈和队列的特点都是后进后出 B. 队列的特点是先进后出 C. 栈的特点是先进先出 D. 栈的特点是先进后出 13.一个单链表中,在 p 所指结点之后插入一个 s 所指的结点时,可执行: s->next=p->next;和( )。 A. s=p->next; B. p=s->next;
国家开放大学《数据结构(本)》综合练习题参考答案
一、填空题 1.对稀疏矩阵进行压缩存储,可采用三元组表,一个有 10 行的稀疏矩阵 A 共有 97 个零元素,其相应的三元组表共有 3 个元素。该矩阵 A 有(10)列。 2.结构中的数据元素存在多对多的关系称为(图状)结构。 3.在单向链表中,q 指向 p 所指结点的直接后继结点,要删除 q 所指结点,可以 用操作(p->next;)= q->next;。 4.n 个元素进行冒泡法排序,第 j 趟冒泡要进行(n-j)次元素间的比较。 5.对稀疏矩阵进行压缩存储,矩阵中每个非零元素对应的三元组包括该元素的行 下标、列下标和(数组元素)三项信息。 6.中序遍历(二叉排序树)树可得到一个有序序列。 7.队列的操作特点是后进(后出)。 8.待排序的序列为 8,3,4,1,2,5,9,采用直接选择排序算法,当进行了两 趟选择后,结果序列为(1,2,4,8,3,5,9)。 9.n 个元素进行冒泡法排序,通常需要进行(n-1)趟冒泡。 10.广义表((a,b),d,e((i,j),k))的长度是(4) 。 11.中序遍历二叉排序树可得到一个(有序)的序列。 12.广义表的(c,a,(a,b),d,e,((i,j),k))深度是(3)。 13.广义表(c,a,(a,b),d,e,((i,j),k))的长度是(6)。 14.对稀疏矩阵进行压缩存储,可采用三元组表,一个有 10 行 10 列的稀疏矩阵 A 共有 95 个零元素,其相应的三元组表共有(5)个元素。 15.广义表的(c,a,(a,b),d,e,((i,j),k))深度是(3)。 16.在对一组记录(50,49,97,22,16,73,65,47,88)进行直接插入排序 时,当把第 7 个记录 65 插入到有序表时,为寻找插入位置需比较(3)次。 17. 循 环 队 列 在 规 定 少 用 一 个 存 储 空 间 的 情 况 下 , 队 空 的 判 定 条 件 为 (front==rear)。 18.一棵有 5 个叶结点的哈夫曼树,该树中总共有(9)个结点。 19.c 语言中,字符串“E”存储时占(2)个字节。

广义表知识点总结

广义表知识点总结

广义表知识点总结一、广义表的概念和基本操作1.1 概念广义表是一种递归定义的数据结构,它可以包含原子元素和其他广义表,类似于树的结构。

广义表在计算机科学中广泛应用,常用于表示复杂的数据结构和递归算法。

1.2 基本操作广义表的基本操作包括创建、插入、删除、查找等,通过这些操作可以对广义表进行灵活的操作和管理。

在实际应用中,需要根据具体的需求对广义表进行不同的操作。

二、广义表的存储结构2.1 顺序存储结构顺序存储结构是将广义表中的元素按照顺序存储在内存中的一片连续空间中,可以通过下标访问元素,适合于对广义表进行随机访问的场景。

2.2 链式存储结构链式存储结构是通过指针将广义表中的元素连接起来,每个元素包含指向下一个元素的指针,适合于对广义表进行插入和删除操作的场景。

2.3 各种存储结构的比较在选择广义表的存储结构时,需要根据实际应用场景和需求来进行选择,顺序存储结构适合于对广义表进行随机访问,链式存储结构适合于对广义表进行插入和删除操作。

三、广义表的操作和应用3.1 创建广义表创建广义表可以通过递归的方式来实现,对于包含原子元素和子表的广义表,需要递归地创建子表并将它们链接起来。

3.2 插入和删除元素对于顺序存储结构的广义表,可以通过数组的插入和删除操作来实现元素的插入和删除;对于链式存储结构的广义表,可以通过修改指针来实现元素的插入和删除。

3.3 查找元素查找元素可以通过顺序遍历的方式来实现,对于包含子表的广义表,需要递归地进行遍历。

3.4 应用场景广义表在计算机科学中具有广泛的应用场景,包括对树的表示和操作、对图的表示和操作、对复杂数据结构的表示和操作等。

四、广义表的递归算法4.1 递归算法概念递归算法是指在解决问题的过程中,通过调用自身来处理子问题,直到子问题为空或者达到终止条件为止。

广义表的表示和操作通常涉及到递归算法。

4.2 广义表的递归遍历对于包含子表的广义表,需要通过递归算法来实现遍历操作,递归地对子表进行遍历,直到遍历到最底层的子表。

2015山东省数据结构基础考试答题技巧

A) Head(Head(Tail(Tail(L))))
B) Tail(Head(Head(Tail(L))))
C) Head(Tail(Head(Tail(L))))
D)Head(Tail(Head(Tail(Tail(L)))))
C) D->Rchild=Null D) D->ltag=0
3、在一个单链表中,已知q结点是p结点的前趋结点,若在q和p之间插入s结点,则须执行( A ) 。
A)q->next=s; s->next=p; B)s->next=p->next; p->next=s;
12、广义表head(((a,b),(c,d)))的运算结果为( A )。
A)(a,b) B)(c,d)
C)空表 D)((a,b),(c,d))
13、线索二叉树中某结点D,没有左孩子的条件是( B )。
A) (G) B) (D) C) C D) D
32、设单链表中指针p指着结改指针的操作为( A )。
A)p->next=p->next->next B)p=p->next
C)p=p->nexe->next D)p->next=p
19、在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top作为栈顶指针,当做出栈处理时,top变化为( C )。
A)top不变 B)top=0 C)top-- D)top++
20、数据结构中,在逻辑上可以把数据结构分成( B )。
C)p->next=s->next; s->next=p D)p->next=s; s->next=q;

数据结构复习题及答案

数据结构复习题及答案数据结构习题一、名词解释1.数据、数据元素、数据项、数据结构、数据的逻辑结构、数据物理结构、顺序存储、链式存储、算法、时间复杂度、空间复杂度。

2.线性表、顺序表、单链表、双向链表、循环链表、双向循环链表、三个概念的区别:头指针、头结点、首元结点(第1个元素结点)。

3.栈(顺序栈、链栈)、队列(顺序队、链队)、循环队列、递归、稀疏矩阵、三元组。

4.树、叶子结点、结点的度、树的度、树的高(深)度、二叉树、遍历、满二叉树、完全二叉树、哈夫曼树、WPL、哈夫曼编码。

5.图(有向、无向)、网、边、弧、度、入度、出度、完全图(有向、无向)、(强)连通图(分量)、(最小)生成树、邻接矩阵、邻接表、DFS、BFS。

6.查找表、关键字、静态查找、动态查找、ASL、顺序查找、折半查找、分块查找、二叉排序树。

7、排序、内(外)排序、稳定性、插入(直接、希尔),交换(起泡、快速),选择(直接、堆),2路归并。

一、填空题1.数据结构是研究数据的_逻辑结构__和___物理结构__,并在这种结构上定义相关的运算,设计实现这些运算的算法,分析算法的效率。

算法的效率包括时间和空间两个方面,分别称为___时间复杂度____和__空间复杂度___。

2.数据的基本单元是__数据元素__,数据的最小单元是__数据项_。

3.算法是对特定问题求解___步骤___的一种描述,是指令的有限序列。

4.一个算法的时间复杂度为(3n3+2n—7),其数量级表示为O(n3)_。

5.一个算法具有5个特性:确定性、可行性、有穷性、输入和输出。

6.算法机能的阐发和怀抱,能够从算法的工夫庞大度和空间庞大度来评判算法的好坏。

7.数据的逻辑布局包孕调集布局、线性布局、树形布局和图型布局四品种型。

8.数据布局在计较机中的表示称为数据的物理布局,它能够采用__按次存储___或__链式存储_两种存储方法。

9.线性表有两种存储布局,划分为按次存储和链式存储。

数据结构基本知识点

第一章1、什么是数据结构①数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。

②数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

③4类基本结构:⑴集合;⑵线性(一个前驱,一个后继)结构;⑶树形结构;⑷图状结构或网状结构。

2、数据结构的二元组表示:Data_Structure=(D,S)//D是数据元素的有限集,S是D上关系的有限集。

3、算法的5大特性:⑴有穷性;4、衡量算法的标准:时间复杂度和空间复杂度5、数据的逻辑结构分四类6、数据结构写出逻辑结构,反之。

第二章0、线性表的基本概念。

1、线性表的顺序存储的基本操作:Insert, E Is=n/2 Delete. E dl=(n-1)/22、线性表的顺序存储的特点:连续地址,随机查找。

3、线性表的链式存储的特点:地址不保证连续,顺序查找。

(1)重点1:结构类型P28Typedef struct LNode{ElemType data;Struct LNode *next;}LNode,*LinkList;(2)重点2:基本方法Status GetElem_L(LinkList L,int i,ElemType &e); Status ListInsert_L(LinkList &L,int i,ElemType e); Status ListDelete_L(LinkList &L,int i,ElemType &e); void CreateList_L(LinkList &L,int n);void Print(LinkList L){ LinkList p=L->next;(有头结点)if(!p) printf(“this link is empty!\n”);else{ printf(“%d,”,p->data);while(p->next){p=p->next; printf(“%d,”,p->data); } printf(“\n”);}}void CountNodes(LinkList L,int &nd){ nd=0;//LinkList p=L->next;(有头结点)if(!p) printf(“this link is empty!\n”);else{ nd++;//while(p->next){p=p->next; nd++;}//}}voidCountAve(LinkList L,int &av){ int n=0,s=0//av=0;LinkList p=L->next;(有头结点)if(!p) printf(“this link is empty!\n”);else{ s=s+p->data; n++;//while(p->next){p=p->next;s=s+p->data; n++;}// av=s/n;}return av;//}void PrintMax(LinkList L,){ int max;LinkList p=L->next;(有头结点)if(!p) printf(“this link is empty!\n”);else{ max=p->data;while(p->next){p=p->next; if(p->data>max) max=p->data;}//printf(“max=%d\n”,max);}}void DeletaMaxNode(LinkList L,){ int max;LinkList q,t;//q---记录p的前驱结点指针,t-----保存最大结点的前驱指针。

数据结构课程1


-------------------
-------
-------
-------
-------
-------
这张表中的元素存在一个顺序关系,即谁在谁前,谁在谁 后的信息(即病人诊断顺序依次为张立,田方,……) 。 所以,可以用线性结构来刻画这种关系。。
例1-3 大学系级行政机构
大学系级行政机构,如图1.1所示:
数据结构的含义
因此可以认为,数据结构是介于数学、计算机硬件和计 算机软件三者之间的一门核心课程(如图1.1所示)。
数学
代数系统
编码理论 数据类型 算子关系
数据表示法
数据的操作 文件系统
存储装置
数据结构
硬件
数据存取
( 计 算 机 系机器组织
统设计)
数据组织
信息检索
软件
(计算机程 序设计)
图1.1 “数据结构”所处的地位
3. 数据的操作
一般而言,必须对数据进行加工处理,才能得到问题的 解。在非数值性问题中,对数据的操作(或运算)已不限 于对数据进行加、减、乘、除等数学运算。数据的操作是 定义在逻辑结构上的,而操作的具体实现是在存储结构上 进行的。基本的数据操作主要有以下几种:
(1)查找:在数据结构中寻找满足某个特定条件的数据元 素的位置或值。
现实问
数学模
算法
程序



图1.8 计算机求解问题的流程
即首先要从现实问题出发,抽象出一个适当的数学模型,
然后设计一个求解此数学模型的算法,最后根据这个算法 编出程序,经过测试、排错、运行直至得到最终的解答。 (现实)问题、数学模型、算法和程序是问题求解过程中 出现的四个不同的概念。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
23
7.2 图的存储结构
一、图的数组(邻接矩阵)存储表示 二、图的邻接表存储表示
24
一、图的数组(邻接矩阵)存储表示 0 (i,j)VR 定义:矩阵的元素为 A = ij 1 (i,j) VR 2
{
1 1 0 0 0 1 1
1
B
C
3
0
A
5
D F E
4
0 1 2 3 4 5
0 0 1 0 0 1 0
//在G中删除弧<v,w>,若G是无向的, //则还删除对称弧<w,v>。
22
遍 历
DFSTraverse(G, v, Visit());
//从顶点v起深度优先遍历图G,并对每 //个顶点访问一次且仅一次。
BFSTraverse(G, v, Visit());
//从顶点的路径
{A,B,C,D}
A B
简单路径:序列中顶点不 重复出现的路径。 简单回路:序列中第一个 顶点和最后一个顶点相同 E 的路径。如{A,B,C,D,A}。
C
D
14
若图G中任意两个顶点 之间都有路径相通, A 则称此图为连通图;
B
A F E C D
B
C
D
F
E
若无向图为非连通图, 则图中各个极大连通子 图称作此图的连通分量。
10
提问:判断下列4种图形各属什么类型?
无向图 完全图 n(n-1)/2 条边
无向图(树)
有向图
完全图 有向图 n(n-1) 条边
11
假若顶点v 和顶点w 之间存在一条边, 则称顶点v 和w 互为邻接点,
边(v,w) 和顶点v 和w 相关联。 和顶点v 关联的边的数目定义为 边的度(Degree)。 例如:
20
插入或删除顶点
InsertVex(&G, v);
//在图G中增添新顶点v。
DeleteVex(&G, v);
// 删除G中顶点v及其相关的弧。
21
插入和删除弧
InsertArc(&G, v, w);
// 在G中增添弧<v,w>,若G是无向的, //则还增添对称弧<w,v>。
DeleteArc(&G, v, w);
数据结构及应用算法教程
配套课件
1
第7章 图和广义表
图是较树结构更复杂的非线性结构。在学习图的知 识过程中,应注意与离散数学阶段知识的差异,不仅 要熟悉抽象的算法,而且注重算法的实现。 图的算法相对成熟,可以先掌握原理,再扩展应用。
图的特点:非线性结构(m :n )
广义表的内容作为自学内容,不进行讲授。
TD(B) = 3 TD(A) = 2
F E
12
B
C D
A
对有向图来说,
A B C D E
顶点的出度: 以顶点v 为弧尾的弧的数目; 顶点的入度: 以顶点v
例如: OD(B) = 1 ID(B) = 2
为弧头的弧的数目。
顶点的度(TD)= 出度(OD)+入度(ID)
13
TD(B) = 3
设图G=(V,{VR})中的一个顶点序列 { u=vi,0,vi,1, …, vi,m=w}中,(vi,j-1,vi,j)VR 1≤j≤m, 则称从顶点u 到顶点w 之间存在一条路径。 路径上边的数目称作路径长度。
34
顶点的结点结构
typedef struct VNode {
data firstarc
VertexType data; // 顶点信息 ArcNode *firstarc; // 指向第一条依附该顶点的弧 } VNode, AdjList[MAX_VERTEX_NUM];
35
图的结构定义(邻接表)
注意:(A,B)、(A,E)等称为无序对。一个无序对相
当于两个有序对。如(A,B)对应<A,B>和<B,A>。
7
名词和术语
网、子图 完全图、稀疏图、稠密图 邻接点、度、入度、出度 路径、路径长度、简单路径、简单回路
连通图、连通分量、 强连通图、强连通分量 生成树、生成森林
8
15 B 3 7 C
A 21 2
1 2 3 0
4
3 D
4 E
1
在有向图的邻接表中,对
每个顶点,链接的是该顶
点发出的弧。
2
缺点:在有向图的邻接表中不易找到指向该顶点的弧。
31
有向图的逆邻接表
在有向图的逆邻接表中, 对每个顶点,链接的是 指向该顶点的弧。
A 0
1 B 2C D3 E 4
0 A
3
3 4 2 0
至图中所有和V0有路径相通的顶点都
被访问到。
39
V w1
SG1
若<v, w>VR 必有<w, v>VR, 由顶点集和边 则称 (v,w) 为顶点v 和顶点 w 之 集构成的图称 间存在一条边。边是无方向的。 作无向图。 例如: G2=(V2,R2) C B V2={A, B, C, D, E, F} R ={(A,B), (A,E), 2 A D (B,E), (C,D), (D,F), E F (B,F), (C,F) }
// 按定义(V, VR) 构造图 DestroyGraph(&G):
// 销毁图
18
对顶点的访问操作
LocateVex(G, u);
// 若G中存在顶点u,则返回该顶点在 // 图中“位臵” ;否则返回其它信息。
GetVex(G, v);
// 返回 v 的值。
PutVex(&G, v, value);
5
由于“弧”是有方向的,因此称由顶点 集和弧集构成的图为有向图。
例如: G1 = (V1, R1)
A B C D E 其中 V1={A, B, C, D, E} R1={<A,B>, <A,E>, <B,C>, <C,D>, <D,B>, <D,A>, <E,C> }
6
注意:<A,B>、<A,E>等称为有序对。
// 对 v 赋值value。
19
对邻接点的操作
FirstAdjVex(G, v);
// 返回 v 的“第一个邻接点” 。若该顶点 //在 G 中没有邻接点,则返回“空”。
NextAdjVex(G, v, w);
// 返回 v 的(相对于 w 的) “下一个邻接 // 点”。若 w 是 v 的最后一个邻接点,则 // 返回“空”。
typedef struct ArcCell { // 弧的定义 VRType adj;
// VRType是顶点关系类型。
// 对无权图,用1或0表示相邻否;
// 对带权图,则为权值类型。
InfoType *info; // 该弧相关信息的指针
} ArcCell,
AdjMatrix[MAX_VERTEX_NUM]
9 11 D
弧或边带权的图
E
分别称作有向网或 无向网。
设图G=(V,{VR}) 和图 G=(V,{VR}),且 VV, VRVR,则称 G 为 G 的子图。
9
假设图中有 n 个顶点,e 条边,则: a.含有 e=n(n-1)/2 条边的 无向图称作完全图; b.含有 e=n(n-1) 条弧的有 向图称作有向完全图; c.若边或弧的个数 e<nlogn,则称作 稀疏图,否则称作稠密图。
2 0 0 0 1 0 1
3 0 0 1 0 0 1
4 1 1 0 0 0 0
5 0 1 1 1 0 0
分析1:无向图的邻接矩阵是对称的; 分析2:顶点i 的度=第 i 行 (列) 中1 的个数; 特例:完全图的邻接矩阵中,对角元素为0,其余全1。
25
有向图的邻接矩 阵为非对称矩阵
0 1 0 1 2
15
若任意两个顶点之间都存在 对有向图, 一条有向路径,则称此有向图为强连通图。 否则,其各个强连通子图称作它的强连通 分量。
A B C D E A
B C D
E
16
图的基本操作:
结构的建立和销毁 对顶点的访问操作
插入或删除顶点
插入和删除弧
对邻接点的操作 遍历
17
结构的建立和销毁
CreatGraph(&G, V, VR):
GraphKind kind;
} MGraph;
二、图的邻接表 存储表示
0 1 2 3 4 5
0
1
B
A
C
2
3
A B C D E F
D
5
4
1 0 3 2 0 1
4 4 5 5 1 2
5
F
E
3
表结点之间无 顺序要求,由 建图时输入的 信息次序决定
30
有向图的邻接表
A 0 1 B 2C
E D 3
4
0 A 1 B 2 C
37
7.3 图的遍历
从图中某个顶点出发游历图,访遍图中其 余顶点,并且使图中的每个顶点仅被访问一 次的过程。
一、深度优先搜索
二、广度优先搜索 三、遍历应用举例
38
一、深度优先搜索遍历图
(DFS, Depth First Search)
连通图的深度优先搜索遍历
从图中某个顶点V0 出发,访问此顶 点,然后依次从V0的各个未被访问的 邻接点出发深度优先搜索遍历图,直
[MAX_VERTEX_NUM];
28
图的结构定义(邻接矩阵)
typedef struct { VertexType AdjMatrix // 顶点信息 vexs[MAX_VERTEX_NUM]; arcs; // 弧的信息 // 图的种类标志
相关文档
最新文档