第7章图和广义表0

合集下载

数据结构各章概要

数据结构各章概要

数据结构各章概要数据结构是计算机科学中非常重要的一个学科,其主要研究各种数据的组织方式和操作方法。

善于运用合适的数据结构可以提高算法的效率,并优化程序的性能。

本文将对数据结构的各个章节进行概要介绍,帮助读者了解不同章节的主要内容和应用。

第一章:引论在引论章节,我们将引入数据结构的基本概念和术语,例如什么是数据、数据项、数据对象等等。

同时,还将介绍数据结构的分类和基本操作,如搜索、遍历、插入、删除和排序。

这些基础知识是后续章节的基础。

第二章:线性表线性表是数据结构中最简单、最基本的一种结构。

其特点是数据元素之间的前驱和后继关系非常明确。

线性表可以用数组和链表两种方式实现。

在本章节中,我们将分别介绍顺序表和链表的实现原理、插入、删除、合并以及应用场景。

第三章:栈和队列栈和队列是两种特殊的线性表结构,它们对数据的访问具有限制性。

栈具有“先进后出”的特点,而队列则具有“先进先出”的特点。

在本章节中,我们将介绍栈和队列的实现方式以及常见的应用场景,如递归、表达式求值、广度优先搜索等。

第四章:串串是由零个或多个字符组成的有限序列,其长度可以为零。

在本章节中,我们将介绍串的定义和操作,包括字符串的模式匹配、模式识别和编辑操作。

串的相关算法在文本处理、计算机网络等领域具有广泛的应用。

第五章:数组和广义表数组是一种在内存中以连续方式存储的数据结构,它具有高效的随机访问特性。

广义表是线性表的一种扩展,可以包含表结构、原子结构以及其他广义表。

本章节将介绍数组和广义表的定义、操作和应用。

第六章:树树是一种非线性的数据结构,具有分层次、递归和层次遍历等特点。

在本章节中,我们将介绍树的基本概念、二叉树、树的遍历算法、平衡树以及树的应用,如编译器中的语法树、文件系统的目录结构等。

第七章:图图是一种复杂的非线性数据结构,由顶点集合和边集合组成。

在本章节中,我们将介绍图的各种表示方式,图的遍历算法、最短路径算法以及常用的图算法,如最小生成树算法和拓扑排序。

数据结构复习题-第7章答案2014-6-16

数据结构复习题-第7章答案2014-6-16

、选择题(每小题 1 分,共 10分)1. 一个 n 个顶点的连通无向图,其边的个数至少为( C )。

A.n+l B.n C.n-l D.2n2. 下列哪一种图的邻接矩阵是对称矩阵( B )。

A. 有向图 B. 无向图 C.AOV 网 D.AOE 网5. 无 向 图 G=(V,E ), 其 中 : V={a,b,c,d,e,f}, E={(a,b ),(a,e ),(a,c ),(b,e ),(c,f ), (f,d ),(e,d )} ,由顶点 a 开始对该图进行深度优先遍历, 得到的顶点序列正确的是 ( D )。

A. a,b,e,c,d,f B. a,c,f,e,b,d C. a,e,b,c,f,d D. a,e,d,f,c,b6. 用邻接表表示图进行广度优先遍历时,通常是采用( B )来实现算法的。

A. 栈 B. 队列 C. 树 D. 图7. 以下数据结构中,哪一个是线性结构( D )。

A. 广义表 B. 二叉树 C. 图 D. 栈8. 下面哪一方法可以判断出一个有向图是否有环(回路) ( B )。

A. 最小生成树B. 拓扑排序C. 求最短路径D. 求关键路径 9. 在一个图中,所有顶点的度数之和等于图的边数的( C )倍。

10. 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的(B )倍。

A. 1/2B. 1C. 2D. 411. 有 8 个顶点无向图最多有( B )条边。

A. 14 B. 28 C. 56 D. 11212. 有 8 个顶点无向连通图最少有( C )条边。

A. 5 B. 6 C. 7 D. 813. 有 8个顶点有向完全图有( C )条边。

A. 14 B. 28 C. 56 D. 11214. 下列说法不正确的是( A )。

A. 图的遍历是从给定的源点出发每一个顶点仅被访问一次 C. 图的深度遍历不适用于有向图B. 遍历的基本算法有两种:深度遍历和广度遍历 D •图的深度遍历是一个递归过程 二、判断题(每小题 1 分,共 10分)1. n 个顶点的无向图至多有 n (n-1) 条边。

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案目录第1章绪论1 第2章线性表5 第3章栈和队列13 第4章串、数组和广义表26 第5章树和二叉树33 第6章图43 第7章查找54 第8章排序65 第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。

如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。

数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。

在有些情况下,数据元素也称为元素、结点、记录等。

数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。

数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。

例如,学生基本信息表中的学号、姓名、性别等都是数据项。

数据对象:是性质相同的数据元素的集合,是数据的一个子集。

例如:整数数据对象是集合N={0,±1,±2,。

},字母字符数据对象是集合C={‘A’,‘B’,。

,‘Z’,‘a’,‘b’,。

,‘z’},学生基本信息表也可是一个数据对象。

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

换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。

逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。

因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

存储结构:数据对象在计算机中的存储表示,也称为物理结构。

抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。

具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)【第一章绪论】1. 数据结构是计算机科学中的重要基础知识,它研究的是如何组织和存储数据,以及如何通过高效的算法进行数据的操作和处理。

本章主要介绍了数据结构的基本概念和发展历程。

【第二章线性表】1. 线性表是由一组数据元素组成的数据结构,它的特点是元素之间存在着一对一的线性关系。

本章主要介绍了线性表的顺序存储结构和链式存储结构,以及它们的操作和应用。

【第三章栈与队列】1. 栈是一种特殊的线性表,它的特点是只能在表的一端进行插入和删除操作。

本章主要介绍了栈的顺序存储结构和链式存储结构,以及栈的应用场景。

2. 队列也是一种特殊的线性表,它的特点是只能在表的一端进行插入操作,而在另一端进行删除操作。

本章主要介绍了队列的顺序存储结构和链式存储结构,以及队列的应用场景。

【第四章串】1. 串是由零个或多个字符组成的有限序列,它是一种线性表的特例。

本章主要介绍了串的存储结构和基本操作,以及串的模式匹配算法。

【第五章数组与广义表】1. 数组是一种线性表的顺序存储结构,它的特点是所有元素都具有相同数据类型。

本章主要介绍了一维数组和多维数组的存储结构和基本操作,以及广义表的概念和表示方法。

【第六章树与二叉树】1. 树是一种非线性的数据结构,它的特点是一个节点可以有多个子节点。

本章主要介绍了树的基本概念和属性,以及树的存储结构和遍历算法。

2. 二叉树是一种特殊的树,它的每个节点最多只有两个子节点。

本章主要介绍了二叉树的存储结构和遍历算法,以及一些特殊的二叉树。

【第七章图】1. 图是一种非线性的数据结构,它由顶点集合和边集合组成。

本章主要介绍了图的基本概念和属性,以及图的存储结构和遍历算法。

【总结】1. 数据结构是计算机科学中非常重要的一门基础课程,它关注的是如何高效地组织和存储数据,以及如何通过算法进行数据的操作和处理。

本文对《数据结构》第二版严蔚敏的课后习题作业提供了参考答案,涵盖了第1-7章的内容。

数据结构复习题目及答案

数据结构复习题目及答案

《数据结构-C语言版》第一章绪论单项选择题1.在数据结构中,数据的基本单位是_________。

A.数据项B.数据类型C.数据元素D.数据变量2.数据结构中数据元素之间的逻辑关系被称为______。

A.数据的存储结构B.数据的基本操作C.程序的算法D.数据的逻辑结构3.在数据结构中,与所使用计算机无关的是数据的_______。

A.存储结构B.逻辑和物理结构C.逻辑结构D.物理结构4.在链式存储结构中,数据之间的关系是通过________体现的。

A.数据在内存的相对位置B.指示数据元素的指针C.数据的存储地址D.指针5.计算算法的时间复杂度是属于一种_______。

A.事前统计的方法B.事前分析估算的方法C.事后统计的方法D.事后分析估算的方法6.在对算法的时间复杂度进行估计的时候,下列最佳的时间复杂度是______。

2A.nB.nlognC.nD.logn7.设使用某算法对n个元素进行处理,所需的时间是T(n)=100nlog2n+200n+2000,则该算法的渐近时间复杂度为_______。

A.O(1)B.O(n)C.O(200n)D.O(nlog2n)1CDCBBDD第二章线性表单项选择题1.链表不具有的特点是________。

A.可随机访问任一元素B.插入和删除时不需要移动元素C.不必事先估计存储空间D.所需空间与线性表的长度正比2.设顺序表的每个元素占8个存储单元。

第1个单元的存储地址是100,则第6个元素占用的最后一个存储单元的地址为。

A.139B.140C.147D.1483.在线性链表存储结构下,插入操作算法。

A.需要判断是否表满B.需要判断是否表空C.不需要判断表满D.需要判断是否表空和表满4.在一个单链表中,若删除p所指结点的后继结点,则执行。

A.p->next=p->next->next;B.p->next=p->next;C.p=p->next->next;D.p=p->next;p->next=p->next->next;5.将长度为 n的单链表接在长度为m的单链表之后的算法时间复杂度为。

西安电子科技大学数据结构课件复习

西安电子科技大学数据结构课件复习

for (i=1; i <=n; i++) { s=0; for (j=1; j <=n; j++) s=s+i×j; if (s%2) print(s) } 西安电子科技大学
①n ② n2 ③ n
- Xidian University, China
数据结构
– Data Structures
第二章 线性表
本章内容:
2.1 线性表的类型定义 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示与实现 2.3.1 线性链表 2.3.2 循环链表 2.3.3 双向链表 2.4 一元多项式的表示及相加
西安电子科技大学 - Xidian University, China
数据结构
– Data Structures
数据结构 Data Structures
期末复习
数据结构
– Data Structures
课程⺫目目录
第1章 概论 第2章 线性表 第3章 栈和队列 第4章 串 第5章 数组和干广广义表 第6章 树和二二叉树 第7章 图 第9章 查找 第10章 内部排序
西安电子科技大学 - Xidian University, China
西安电子科技大学 - Xidian University, China
数据结构
– Data Structures
第三章 栈和队列
本章内容:
3.1 栈 3.1.1 栈的定义 3.1.2 栈的表示和实现 3.2 栈的应用举例 3.3 栈与递归 3.4 队列 3.4.1 队列的定义 3.4.2 链队列 3.4.3 循环队列
A0,0 A1,0 A1,1
. . .
A7,0 A8,0 A7,1 A8,1

数据结构考试题库含答案

数据结构考试题库含答案数据结构习题集含答案目录目录1选择题2第一章绪论2第二章线性表4第三章栈和队列5第四章串6第五章数组和广义表7第六章树和二叉树7第七章图9第八章查找11第九章排序12简答题15第一章绪论15第二章线性表20第三章栈和队列22第四章串24第五章数组和广义表24第六章树和二叉树26第七章图31第八章查找33第九章排序34编程题36第一章绪论36第二章线性表36第三章栈和队列46第四章串46第五章数组和广义表46第六章树和二叉树46第七章图46第八章查找46第九章排序51选择题第一章绪论1.数据结构这门学科是针对什么问题而产生的?(A)A、针对非数值计算的程序设计问题B、针对数值计算的程序设计问题C、数值计算与非数值计算的问题都针对D、两者都不针对2.数据结构这门学科的研究内容下面选项最准确的是(D)A、研究数据对象和数据之间的关系B、研究数据对象C、研究数据对象和数据的操作D、研究数据对象、数据之间的关系和操作3.某班级的学生成绩表中查得张三同学的各科成绩记录,其中数据结构考了90分,那么下面关于数据对象、数据元素、数据项描述正确的是(C)A、某班级的学生成绩表是数据元素,90分是数据项B、某班级的学生成绩表是数据对象,90分是数据元素C、某班级的学生成绩表是数据对象,90分是数据项D、某班级的学生成绩表是数据元素,90分是数据元素4.某数据结构是指(A)。

A、数据元素的组织形式B、数据类型C、数据存储结构D、数据定义5.数据在计算机存储器内表示时,物理地址与逻辑地址不相同,称之为(C)。

A、存储结构B、逻辑结构C、链式存储结构D、顺序存储结构6.算法分析的目的是(C)A、找出数据的合理性B、研究算法中的输入和输出关系C、分析算法效率以求改进D、分析算法的易懂性和文档型性7.算法分析的主要方法(A)。

A、空间复杂度和时间复杂度B、正确性和简明性C、可读性和文档性D、数据复杂性和程序复杂性8.计算机内部处理的基本单元是(B)A、数据B、数据元素C、数据项D、数据库9.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要(B)。

数据结构复习要点(整理版)

第一章数据结构概述基本概念与术语1.数据:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序所处理的符号的总称。

2。

数据元素:数据元素是数据的基本单位,是数据这个集合中的个体,也称之为元素,结点,顶点记录。

(补充:一个数据元素可由若干个数据项组成。

数据项是数据的不可分割的最小单位。

)3.数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。

(有时候也叫做属性。

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

(1)数据的逻辑结构:数据的逻辑结构是指数据元素之间存在的固有逻辑关系,常称为数据结构。

数据的逻辑结构是从数据元素之间存在的逻辑关系上描述数据与数据的存储无关,是独立于计算机的。

依据数据元素之间的关系,可以把数据的逻辑结构分成以下几种:1.集合:数据中的数据元素之间除了“同属于一个集合“的关系以外,没有其他关系.2.线性结构:结构中的数据元素之间存在“一对一“的关系。

若结构为非空集合,则除了第一个元素之外,和最后一个元素之外,其他每个元素都只有一个直接前驱和一个直接后继。

3。

树形结构:结构中的数据元素之间存在“一对多“的关系.若数据为非空集,则除了第一个元素(根)之外,其它每个数据元素都只有一个直接前驱,以及多个或零个直接后继。

4.图状结构:结构中的数据元素存在“多对多"的关系.若结构为非空集,折每个数据可有多个(或零个)直接后继.(2)数据的存储结构:数据元素及其关系在计算机内的表示称为数据的存储结构。

想要计算机处理数据,就必须把数据的逻辑结构映射为数据的存储结构。

逻辑结构可以映射为以下两种存储结构:1.顺序存储结构:把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元中,借助元素在存储器中的相对位置来表示数据之间的逻辑关系.2.链式存储结构:借助指针表达数据元素之间的逻辑关系。

不要求逻辑上相邻的数据元素物理位置上也相邻。

数据结构习题(1-7)答案

第一章绪论一. 选择题1.BD 2.CA 3.B 4.C 5.A 6.D 7.A 8.A 9.A 10.C 二. 解答题第二章线性表一. 选择题1.A 2.B 3.A 4.D 5.A 6.C 7.A 8.B 9.A二.填空题1..物理位置相邻指针2..直接前驱直接后继3.顺序链式三. 算法设计题1.①int count(Linklist h,int x){int num=0;Linknode *p;p=h->next;while(p&&p->data<=x)//p指针向后移动,直至p指向第一个值大于x的结点p=p->next;while(p)if(p->next&&p->data==p->next->data)//若p没有指向链表中同一数值的最后一个结点,则向后移动p=p->next;else//若p指向数值相同的结点中的最后一个,则num加1,p指针后移,继续执行while循环{num++;p=p->next;}return num;}②void delevenl(Linklist &h,int x){Linknode *p,*r;p=h->next;r=h;while(p&&p->data<x){if(p->data%2==0){r->next=p->next;free(p);p=r->next;}else{r=p;p=p->next;}}}2.void converse(Linklist &h){Linknode *p,*q;p=h->next;h->next=NULL;while(p){q=p->next;p->next=h->next;h->next=p;p=q;}}3.void decompose(Linklist La,Linklist &Lb,Linklist &Lc) {Linknode *p;Lc=(Linknode *)malloc(sizeof(Linknode));Lc->next=NULL;p=La->next;Lb=La;Lb->next=NULL;while(p){La=p->next;if(p->data>0){p->next=Lc->next;Lc->next=p;}else{p->next=Lb->next;Lb->next=p;}p=La;}}4.int subset(LinkList la, LinkList lb){ LinkNode * pa,*pb;pa=la->next;while(pa){ pb=lb->next;while(pb&&(pb->data!=pa->data)) pb=pb->next;if(!pb) return 0;pa=pa->next;}return 1;}算法时间复杂度O(A.Length*B.Length)5.void priorset(DuLinkList &la){ p=la;q=la->next;while(q!=la){q->prior=p; p=q;q=q->next;} q->prior=p;}第三章栈和队列一. 选择题1.C C 2.C 3.B 4.D 5.C 6.A 7.C 8.D二. 解答题1栈底栈底2//双向栈类型定义#define STACK_SIZE 100;Typedef struct {SElemType * base_one, * base_two;//栈底指针SElemType * top_one, * top_two;//栈顶指针int stacksize;} SqStack;Status InitStack ( SqStack &S) {//初始化双向栈S.base_one=S.top_one=( SElemType *)malloc(STACK_SIZE * sizeof(SElemType));//第一个栈底和栈顶指向数组起点S.base_two=S.top_two=S.base_one +STACK_SIZE-1;// 第二个栈底和栈顶指向数组终点S.stacksize= STACK_SIZE ;return OK;}//InitStackStatus Push ( SqStack &S, int i, SElemType e){//入栈操作,i=0时将e存入前栈,i=1时将e存入后栈if( S.top_two < S.top_one) return OVERFLOW;//栈满,不考虑追加空间if( i = = 0 )*S.top_one++ = e;else*S.top_two-- = e;return OK;}//PushSElemType Pop ( SqStack &S, int i){//出栈操作,i=0出前栈,i=1出后栈if( i==0 ) {if ( S.top_one==S.base_one) return ERROR;S.top_one--; e=*S.top_one;}else {if ( S.top_two==S.base_two) return ERROR;S.top_two++; e=*S.top_two;}return e;}//Pop2.#define M 3struct Stack{Qelemtype data[M];int top;};struct Queue{Stack s1;Stack s2;};void InitQueue(Queue &Q)//初始化队列{Q.s1.top=0;Q.s2.top=0;}int IsEmpty(Queue &Q)//判断队列是否为空{if(Q.s1.top==0&&Q.s2.top==0)return 1;if(Q.s2.top==0&&Q.s1.top!=0){while(Q.s1.top!=0)Q.s2.data[Q.s2.top++]=Q.s1.data[--Q.s1.top];}return 0;}int IsFull(Queue &Q){if(Q.s1.top==M&&Q.s2.top!=0)return 1;if(Q.s1.top==M&&Q.s2.top==0){while(Q.s1.top!=0)Q.s2.data[Q.s2.top++]=Q.s1.data[--Q.s1.top];return 0;}if(Q.s1.top!=M)return 0;}void InQueue(Queue &Q,Qelemtype e) {if(IsFull(Q)){cout<<"OVERFLOW"<<endl;return;}Q.s1.data[Q.s1.top++]=e;}void DeQueue(Queue &Q,Qelemtype &e) {if(IsEmpty(Q)){cout<<"UNDERFLOW"<<endl;return;}e=Q.s2.data[--Q.s2.top];}3.(1)不能(2)可以原因略4.struct QueueNode{Qelemtype data;QueueNode *next;};struct LinkQueue{QueueNode *rear;};void InitQueue(LinkQueue &Q) //置空队{Q.rear=new QueueNode;Q.rear->next=Q.rear;}int EmptyQueue(LinkQueue Q) //判队空{return Q.rear==Q.rear->next;}void EnQueue(LinkQueue &Q, Qelemtype e)//元素入队{QueueNode *p;//新建一个结点,并置其值为ep=new QueueNode;p->data=e;//将结点插入队列末尾p->next=Q.rear->next;Q.rear->next=p;//修改队尾指针Q.rear=p;}void DeQueue(LinkQueue &Q,Qelemtype &e) //元素出队{QueueNode *p;if (EmptyQueue(Q)) //若队中无元素,则无法执行出队操作{cout<<"error"<<endl;return;}p=Q.rear->next->next; //让p指向队头元素e=p->data;if(p==Q.rear)//如队中只有一个元素,则要rear指向头结点,头结点的next指针指向自身{Q.rear=Q.rear->next;Q.rear->next=Q.rear;}else //若队中不只一个元素,则删除p所指向的结点。

数据结构试题集(包含答案完整版)

第一章概论一、选择题1、研究数据结构就是研究( D )。

A. 数据的逻辑结构B. 数据的存储结构C. 数据的逻辑结构和存储结构D. 数据的逻辑结构、存储结构及其基本操作2、算法分析的两个主要方面是( A )。

A. 空间复杂度和时间复杂度B. 正确性和简单性C. 可读性和文档性D. 数据复杂性和程序复杂性3、具有线性结构的数据结构是( D )。

A. 图B. 树C. 广义表D. 栈4、计算机中的算法指的是解决某一个问题的有限运算序列.它必须具备输入、输出、( B )等5个特性。

A. 可执行性、可移植性和可扩充性B. 可执行性、有穷性和确定性C. 确定性、有穷性和稳定性D. 易读性、稳定性和确定性5、下面程序段的时间复杂度是( C )。

for(i=0;i<m;i++)for(j=0;j<n;j++)a[i][j]=i*j;A. O(m2)B. O(n2)C. O(m*n)D.O(m+n)6、算法是( D )。

A. 计算机程序B. 解决问题的计算方法C. 排序算法D. 解决问题的有限运算序列7、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示( C )。

A. O(n)B. O(nlog2n)C. O(n2)D.O(log2n)8、下面程序段的时间复杂度为( C )。

i=1;while(i<=n)i=i*3;A. O(n)B. O(3n)C. O(log3n)D. O(n3)9、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的()和运算等的学科。

A. 结构B. 关系C. 运算D. 算法10、下面程序段的时间复杂度是(A )。

i=s=0;while(s<n){i++;s+=i;}A. O(n)B. O(n2)C. O(log2n)D. O(n3)11、抽象数据类型的三个组成部分分别为( A)。

A. 数据对象、数据关系和基本操作B. 数据元素、逻辑结构和存储结构C. 数据项、数据元素和数据类型D. 数据元素、数据结构和数据类型12、通常从正确性、易读性、健壮性、高效性等4个方面评价算法的质量.以下解释错误的是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第7章图和广义表 章图和广义表
总结
①无向图的邻接表中结点个数是边数的两倍。 无向图的邻接表中结点个数是边数的两倍。 结点个数是边数的两倍 的度恰为第i个链表 ②在无向图的邻接表中,顶点vi的度恰为第 个链表 在无向图的邻接表中,顶点 的度恰为第 中的结点个数。 中的结点个数。 在有向图的邻接表中, 个单链表中的结点个数 ③在有向图的邻接表中,第i个单链表中的结点个数 只是顶点vi的出度 的出度。 只是顶点 的出度。 ④顶点的入度值不容易得出。 顶点的入度值不容易得出。 为了便于确定顶点vi的入度 的入度, 为了便于确定顶点 的入度,则建立一个以顶 为头的弧的单链表,称为有向图的逆邻接表 点vi为头的弧的单链表 称为有向图的逆邻接表。 为头的弧的单链表 称为有向图的逆邻接表。
1 若Vi和Vj之间有边或弧存在 A[i][j]={ 0 反之 2.若图 是网,则邻接矩阵定义为: 若图G是网 若图 是网,则邻接矩阵定义为:
A[i][j]={
wij 若Vi和Vj之间有边或弧存在 ∞ 反之
第7章图和广义表 章图和广义表
邻接矩阵存储类型定义表示
用邻接矩阵表示图, 用邻接矩阵表示图,除了存储用于表示顶点之间相邻关 系的邻接矩阵外,还需用一个顺序表存储顶点信息。 系的邻接矩阵外,还需用一个顺序表存储顶点信息。 typedef struct arccell { vrtype adj; // 图用 或0表相邻否 ,网则为相应的权值 图用1或 表相邻否 网则为相应的权值 InfoType *info;//其它信息 其它信息 } adjmatrix[MAX [MAX]; typedef struct { // 图的定义 vertextype vexs[MAX]; // 顶点信息数组 adjmatrix arcs; // 弧的信息 (邻接矩阵 邻接矩阵) 邻接矩阵 int vexnum, arcnum; // 顶点数,弧数 顶点数, graphkind kind; // 图的种类标志 } mgraph;
void BFSTraverse( mgraph G ) { int Q[MAX_VERTEX_NUM],front=0,rear=0; // 置空的辅助队列 置空的辅助队列Q int i,j,k; for (i=0; i<G.vexnum; ++i) visited[i] = false; //初始化访问标志 初始化访问标志 for ( i=0; i<G.vexnum; ++i ) if ( !visited[i]) // v 尚未访问 {cout<<G.vexs[i]; visited[i] =true; // 访问 ,并标记已访问过 访问v 并标记已访问过 Q[rear]=i;rear=(rear+1)%MAX_VERTEX_NUM; // v入队列 入队列 while (rear!=front) { k = Q[front]; front=(front+1)%MAX_VERTEX_NUM; // 队头元素出队赋给 并访问其邻接点 队头元素出队赋给k,并访问其邻接点 for(j=0; j<G.vexnum;j++) if ( (G.arcs[k][j]!=0)&&(! visited[j])) {cout<<G.vexs[j]; visited[j]=true; // 访问v ,并标记已访问 访问 并标记已访问 Q[rear]=j;rear=(rear+1)%MAX_VERTEX_NUM;} // 访问的顶点 入队列 访问的顶点j入队列 } }}
第7章图和广义表 章图和广义表
广度优先搜索遍历
1遍历过程中借助于访问标志数组 遍历过程中借助于访问标志数组visited确定该结点是否已访 遍历过程中借助于访问标志数组 确定该结点是否已访 问
2访问过程中,要求先访问的顶点其邻接点也先被访 访问过程中, 访问过程中 为此,需附设一个队列(依访问次序) 问。为此,需附设一个队列(依访问次序)存储已被 访问过的顶点。 访问过的顶点。 问题:一个图的广度优先搜索 序列是否惟一? 问题:一个图的广度优先搜索DFS序列是否惟一? 序列是否惟一
3连通图的深度优先搜索遍历 连通图的深度优先搜索遍历 a首先访问当前结点 并标示该结点已访问过 首先访问当前结点,并标示该结点已访问过 首先访问当前结点 b利用递归访问该结点的未被访问过的邻接点 利用递归访问该结点的未被访问过的邻接点 4非连通图的深度优先搜索遍历 非连通图的深度优先搜索遍历 a首先将图中每个顶点的访问标志设为 FALSE 首先将图中每个顶点的访问标志设为 b搜索图中每个顶点,如果未被访问,则以该顶点为 搜索图中每个顶点, 搜索图中每个顶点 如果未被访问, 起始点,进行深度优先搜索遍历, 起始点,进行深度优先搜索遍历,否则继续检查下 一顶点。 一顶点。 问题:一个图的深度优先搜索 序列是否惟一? 问题:一个图的深度优先搜索DFS序列是否惟一? 序列是否惟一
二广度优先搜索遍历
从图中的某个顶点V出发,并在访问此顶点之后依次访问 从图中的某个顶点 出发,并在访问此顶点之后依次访问V 出发 的所有未被访问过的邻接点, 的所有未被访问过的邻接点,然后分别从这些邻接点出发依次 访问它们的邻接点,并使得“先被访问的顶点的邻接点” 访问它们的邻接点,并使得“先被访问的顶点的邻接点”先于 “后被访问的顶点的邻接点” 被访问,直至图中所有和V有路 后被访问的顶点的邻接点” 被访问,直至图中所有和 有路 径相通的顶点都被访问到。 径相通的顶点都被访问到。
第7章图和广义表 章图和广义表
图的结构定义 typedef struct { vnode vertices[MAX]; //表头结点顺序表 表头结点顺序表 int vexnum, arcnum; //顶点个数和边的个数 顶点个数和边的个数 int kind; // 图的种类 } ALGraph;
第7章图和广义表 章图和广义表
第7章图和广义表 章图和广义表
二、图的邻接表存储
对图中每个顶点建立一个单链表, 个单链表中的结点 对图中每个顶点建立一个单链表,第i个单链表中的结点 表示依附于顶点vi的边 有向图是以顶点vi为弧尾的弧 的边(有向图是以顶点 为弧尾的弧) 表示依附于顶点 的边 有向图是以顶点 为弧尾的弧 弧结点arcnode 弧结点
第7章图和广义表 章图和广义表
本节内容
• • • • • • • • • • • 复习上节课的内容 7.2 图的存储表示 一邻接矩阵法 二邻接表 7.3图的遍历 7.3图的遍历 一深度优先遍历(树的先跟) 一深度优先遍历(树的先跟) 二广度优先遍历(树的层序) 二广度优先遍历(树的层序) 7.4图的连通性问题 7.4图的连通性问题 一普里姆算法(加点法) 一普里姆算法(加点法) 二克鲁斯卡尔算法(加边法) 二克鲁斯卡尔算法(加边法) 回顾总结
建立图的邻接表的结构
1 输入图的种类,根据图的种类选择不同的建立方法 输入图的种类, 2以建立无向网为例说明具体建立邻接表的方法 以建立无向网为例说明具体建立邻接表的方法 ①输入图的结点个数和边的个数
② 利用循环完成表头结点的建立
a输入结点 输入结点 b生成表头结点 生成表头结点 c 表头结点的第一个邻接点域初始化空 ③利用循环完成邻接表的建立 a输入两个邻接点 和邻接点之间的权值 输入两个邻接点 b查找两个邻接点在顺序表的位置 查找两个邻接点在顺序表的位置i,j 查找两个邻接点在顺序表的位置 c生成两个结点,将pi插入到 表中,将pj插入到 表中 生成两个结点, 插入到i表中 插入到j表中 生成两个结点 插入到 表中, 插入到
第7章图和广义表 章图和广义表
a
c
g a a a a b c f
d
e
f
b a c h
0
g
b c d e
h h k h k
d
e k
1
f
f g h k
d e
k h
f
2
3
4
5
6
7
8
访问标志: T T T T T T T T T 访问标志: F F F F F F F F F 访问次序: 访问次序: a c h d k f e b g
第7章图和广义表 章图和广义表
图的遍历
从图中某个顶点出发访遍图中其余顶点, 从图中某个顶点出发访遍图中其余顶点,并且使图中的每个顶 点仅被访问一次的过程。 点仅被访问一次的过程。
一深度优先搜索遍历
从图中某个顶点V 出发,访问此顶点,然后依次从V的各 从图中某个顶点 出发,访问此顶点,然后依次从 的各 个未被访问的邻接点出发深度优先搜索遍历图, 个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有 和V有路径相通的顶点都被访问到。尽可能先对纵深方向进行 有路径相通的顶点都被访问到。 有路径相通的顶点都被访问到 搜索,故称为深度优先搜索。 搜索,故称为深度优先搜索。 若此时图中尚有顶点未被访问, 若此时图中尚有顶点未被访问,则另选图中一个未曾被 访问的顶点作起始点,重复上述过程, 访问的顶点作起始点,重复上述过程,直至图中所有顶点都 被访问到为止。 被访问到为止。
第7章图和广义表 章图和广义表
邻接矩阵存储总结
1. 无向图或无向网的邻接矩阵必是对称矩阵,可采用对 无向图或无向网的邻接矩阵必是对称矩阵 必是对称矩阵, 称矩阵压缩存储表示 有向图或有向网的邻接矩阵为非对称矩阵 为非对称矩阵。 有向图或有向网的邻接矩阵为非对称矩阵。 2.邻接矩阵存储优点: 邻接矩阵存储优点: 邻接矩阵存储优点 ①判定任意两个顶点之间是否有边或弧相联 ②并容易求得各个顶点的度。 并容易求得各个顶点的度。 a.对于无向图,顶点vi的度是邻接矩阵中第 对于无向图,顶点 的度是邻接矩阵中第 对于无向图 i行或 列的元素之和。 行或i列的元素之和 行或 列的元素之和。 b.对于有向图, 对于有向图, 对于有向图 顶点vi的出度 的出度OD(vi)是第 行的元素之和。 是第i行的元素之和 顶点 的出度 是第 行的元素之和。 顶点vj的入度 的入度ID(vj)是第 列的元素之和。 是第j列的元素之和 顶点 的入度 是第 列的元素之和。
相关文档
最新文档