数据结构重点整理

合集下载

空间数据库重点知识

空间数据库重点知识

矢量数据结构:通过记录坐标的方式来表达点、线、面等地理实体。

矢量数据结构的主要特点:定位明显和属性隐含。

结构:Spaghetti(面条)结构和拓扑矢量数据结构。

只有像拓扑结构这样的数据结构才是“矢量”数据结构。

拓扑矢量数据结构的特点是:1、一个多边形和另一个多边形之间没有空间坐标的重复,这样就消除了重复线;2、拓扑信息与空间坐标分别存储,有利于进行近邻、包含和相连等查询操作;3、拓扑表必须在一开始就创建,这要花费一定的时间和空间;4、一些简单的操作比如图形显示比较慢,因为图形显示需要的是空间坐标而非拓扑结构。

栅格数据模型是将连续的空间离散化,将地理区域的平面表象按一定分解力作行和列的规则划分,形成大小均匀紧密相邻的网格阵列。

空间数据引擎(SDE):是用来解决如何在关系数据库中存储空间的数据,实现真正的数据库方式管理空间数据,建立空间数据服务器的方法。

工作原理:SDE客户端发出请求,由SDE服务端处理这个请求,转换成DBMS能处理的请求事物,由DBMS处理完相应的请求,SDE服务端再将处理的结果实时反馈给GIS的客户端。

客户通过空间数据引擎将自己的数据交给大型关系型DBMS,由DBMS统一管理,同样,客户可以通过空间数据引擎从关系型DBMS 中获取其它类型的GIS数据,并转换成客户端可以使用的方式。

空间数据引擎的作用:(1)与空间数据库联合,为任何支持的用户提供空间数据服务。

(2)提供开放的数据访问,通过TCP/IP横跨任何同构或异构网格,支持分布式的GIS系统。

(3)SDE对外提供了空间几个对象模型,用户可以在此模型基础之上建立空间几何对象,并对这些几何对象进行操作。

(4)快速的数据提取和分析。

(5)SDE提供了连续DBMS数据库的接口,其他的一切涉及与DBMS数据库进行交互的操作都是在此基础之上完成的。

(6)与空间数据库联合可以管理海量空间信息。

(7)无缝的数据管理,实现空间数据与属性数据统一存储。

数据结构递归与广义表

数据结构递归与广义表

第5章递归与广义表一、复习要点本章主要讨论递归过程和广义表。

一个递归的定义可以用递归的过程计算,一个递归的数据结构可以用递归的过程实现它的各种操作,一个递归问题也可以用递归的过程求解。

因此,递归算法的设计是必须掌握的基本功。

递归算法的一般形式:void p ( 参数表) {if( 递归结束条件)可直接求解步骤;基本项else p( 较小的参数);归纳项}在设计递归算法时,可以先考虑在什么条件下可以直接求解。

如果可以直接求解,考虑求解的步骤,设计基本项;如果不能直接求解,考虑是否可以把问题规模缩小求解,设计归纳项,从而给出递归求解的算法。

必须通过多个递归过程的事例,理解递归。

但需要说明的是,递归过程在时间方面是低效的。

广义表是一种表,它的特点是允许表中套表。

因此,它不一定是线性结构。

它可以是复杂的非线性结构,甚至允许递归。

可以用多重链表定义广义表。

在讨论广义表时,特别注意递归在广义表操作实现中的应用。

本章复习的要点:1、基本知识点要求理解递归的概念:什么是递归?递归的定义、递归的数据结构、递归问题以及递归问题的递归求解方法。

理解递归过程的机制与利用递归工作栈实现递归的方法。

通过迷宫问题,理解递归解法,从而掌握利用栈如何实现递归问题的非递归解法。

在广义表方面,要求理解广义表的概念,广义表的几个性质,用图表示广义表的方法,广义表操作的使用,广义表存储结构的实现,广义表的访问算法,以及广义表的递归算法。

2、算法设计求解汉诺塔问题,掌握分治法的解题思路。

求解迷宫问题、八皇后问题,掌握回溯法的解题思路。

对比单链表的递归解法和非递归解法,掌握单向递归问题的迭代解法。

计算广义表结点个数,广义表深度,广义表长度的递归算法。

输出广义表各个原子所在深度的非递归算法。

判断两个广义表相等的递归算法。

广义表的按深度方向遍历和按层次(广度)方向遍历的递归算法。

使用栈的广义表的按深度方向遍历的非递归算法。

递归的广义表的删除算法二、难点与重点1、递归:递归的定义、递归的数据结构、递归问题用递归过程求解链表是递归的数据结构,可用递归过程求解有关链表的问题2、递归实现时栈的应用递归的分层(树形)表示:递归树递归深度(递归树的深度)与递归工作栈的关系单向递归与尾递归的迭代实现3、广义表:广义表定义、长度、深度、表头、表尾用图形表示广义表的存储结构广义表的递归算法,包括复制、求深度、求长度、删除等算法三、教材中习题的解析5-1 已知A[n]为整数数组,试写出实现下列运算的递归算法:(1) 求数组A中的最大整数。

数据结构-第3章-队列

数据结构-第3章-队列
下标 队头 0 1 2 3 4 5 队尾 6 7 8 9
a
front
b
c
d
e
f
g
rear
3.2 队列的顺序存储及实现
在使用队列前,先初始化队列,此时,队列为空,队头指针 front和 队尾指针rear都指向队列的第一个位置,即front=rear=0,如图3.3 所示。
下标 0 1 2 3 4 5 6Байду номын сангаас7 8 9
3.3 队列的链式存储及实现
(2)判断队列是否为空。 int QueueEmpty(LinkQueue *Q) {
return Q->rear==Q->front;
}
//头尾指针相等队列为空
3.3 队列的链式存储及实现
(3)将元素x入队。先为新结点申请一个空间,然后将x赋给数据 域,并使原队尾元素结点的指针域指向新结点,队尾指针指向新结点, 从而将结点加入队列中。操作过程如图3.20所示。
3.2 队列的顺序存储及实现
(4)入队
int EnQueue(CirQueue *Q , DataType x)
{ if(QueueFull(Q)) printf(“Queue overflow”); else{ Q->data[Q->rear]=x; Q->rear=(Q->rear+1)%QueueSize; } }
3.3 队列的链式存储及实现
链式队列的类型描述如下:
/*结点类型定义*/
typedef struct QNode { DataType data; struct QNode * next; } QueueNode; /*队列类型定义*/ typedef struct { QueueNode * front; //队头指针

数据结构3(树形结构)

数据结构3(树形结构)

递归定义 二叉树是由“根节点”、“左子树”和“右子树” 三部分构成,则遍历二叉树的操作可分解 为“访问根节点”、“遍历左子树”和“遍历右 子树”三个子操作。 因此,不难得到三种遍历的递归定义:
– 先序遍历:访问根节点;先序遍历左子树;先序遍历 右子树; – 中序遍历:中序遍历左子树;访问根节点;中序遍历 右子树; – 后序遍历:后序遍历左子树;后序遍历右子树;访问 根节点。
二叉树的存储结构:链式存储结构(1)
typedef struct BiTNode { Lchild data Rchild ElemType data; struct BiTNode *Lchild, *Rchild; // 左、右孩子指针 } *BiTree;
二叉树的存储结构:链式存储结构(2) 上面链式结构只能从根向下找,无法直接获 得节点的父节点
– 启示:给定任意两种遍历序列,唯一确定这棵树。
先序遍历:递归伪代码
template<class T> void BinaryTree<T>::PreOrder(BinaryTreeNode<T>*root){ if(root!=NULL){ Visit(root); //访问根节点 PreOrder(root->leftchild()); //访问左子树 PreOrder(root->rightchild());//访问右子树 } } 注:Visit(root)是个抽象操作,实际上,“访问”可以在该节点 上做任何操作。
中序遍历:递归伪代码
template<class T> void BinaryTree<T>::PreOrder(BinaryTreeNode<T>*root){ if(root!=NULL){ PreOrder(root->leftchild()); //访问左子树 Visit(root); //访问根节点 PreOrder(root->rightchild());//访问右子树 } }

计算机公共基础知识重点必考

计算机公共基础知识重点必考

公共基础补充知识点公共基础复习方法:第一:请把10页纸背下来;第二:把习题册的公共基础题目做好;第三:结合考前公共基础补充知识复习好;(注意:下划线的一般是选择题目,框起来的一般是填空题目,没有下划线和方框标识的一般也是选择题目)数据结构与算法队:。

栈:线性表n2=n0-1栈具有记忆性。

如果要存的数据是1 2 3 4 5,栈可以不顺序存储。

我们存放数据的时候,存储空间不一定是连续的,并且各个元素的存储顺序可以是任意的。

如:链表。

在线性链表中查找一个元素比在顺序表中查找一个元素要快,冒泡排序、选择排序、交换排序、堆排序中平均排序次数最快的是能够用二分查找的是顺序存储的有序线性表。

程序设计基础1、 程序设计方法和技术的发展经过了结构化程序设计和面向对象设计两个阶段。

2、 当今程序设计的风格是“清晰第一,效率第二”。

3、 程序可以没有输入,但是一定要有输出。

4、 结构化程序设计遵循:自顶向下,逐步求精,模块化,限制使用goto 语句(常考)。

5、 面向对象的基本特点:标志唯一性,分类性,多态性,封装性,模块独立性。

尤其重要的是多态性和封装性。

没有类比性。

6、7、8、对应类的一个实例。

(常考)9、10表13、 黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。

方法有:等价类划分法,边界值划分法,错误推测法。

14、 软件测试的四个步骤。

自己默写一遍。

15、 程16、 软件调试方法:强制排错法,回朔法,原因排除法。

17、 软件维护不属于软件生命周期开发阶段的任务。

18、 软件进行了程序调试后还要进行测试。

19、 软件工程的主要思想是:强调在软件开发过程中需要应用工程化的原则。

20、 软件设计中,不属于过程设计工具的是:DFD 图。

21、 结构化分析常见的工具:DFD 图,DD (数据字典),判定树,判定表。

22、 程23、 软件的开发、运行对计算机系统具有依赖性。

24、软件工程的三要素:工具、过程、方法。

第2章关系数据库(重点)数据库知识点整理

第2章关系数据库(重点)数据库知识点整理

第2章关系数据库(重点)数据库知识点整理第2章关系数据库(重点)了解:关系数据结构及形式化定义、关系操作、关系的完整性、关系代数掌握关系模型的三个组成部分及各部分所包括的主要内容关系数据结构及其形式化定义关系的三类完整性约束关系代数及其运算,包括并、交、差、选择、投影、连接、除、⼴义笛卡⼉积知识点关系模型三个组成部分关系数据结构关系操作集合关系完整性约束实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值参照完整性规则:若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不⼀定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值)或者等于S中某个元组的主码值⽤户定义的完整性:针对某⼀具体关系数据库的约束条件,反映某⼀具体应⽤所涉及的数据必须满⾜的语义要求关系数据语⾔的特点和分类关系代数语⾔关系演算语⾔具有关系代数和关系演算双重特点的语⾔域、笛卡⼉积、关系、元组、属性域:域是⼀组具有相同数据类型的值的集合笛卡⼉积:D1*D2*…*Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}关系:在域D1,D2,…,Dn上笛卡⼉积D1*D2*…*Dn的⼦集,表⽰为R(D1,D2,…,Dn)元组:关系中的每个元素是关系中的元组属性:关系也是⼀个⼆维表,表的每⾏对应⼀个元组,表的每列对应⼀个域。

由于域可以相同,为了加以区分,对每列起⼀个名字,称为属性候选码、主码、外码候选码:若关系中的某⼀属性组的值能唯⼀地标识⼀个元组,⽽其⼦集不能,则称该属性组为候选码(candidate key)主码:若⼀个关系有多个候选码,选定其中⼀个为主码(primary key)外码:设F是基本关系R的⼀个或⼀组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外部码(foreign key),简称外码关系模式、关系、关系数据库关系模式:关系的描述称为关系模式(relation schema),关系模式形式化表⽰为R(U,D,DOM,F)。

数据结构第9章 排序

数据结构第9章排序数据结构第9章排序第9章排名本章主要内容:1、插入类排序算法2、交换类排序算法3、选择类排序算法4、归并类排序算法5、基数类排序算法本章重点难点1、希尔排序2、快速排序3、堆排序4.合并排序9.1基本概念1.关键字可以标识数据元素的数据项。

如果一个数据项可以唯一地标识一个数据元素,那么它被称为主关键字;否则,它被称为次要关键字。

2.排序是把一组无序地数据元素按照关键字值递增(或递减)地重新排列。

如果排序依据的是主关键字,排序的结果将是唯一的。

3.排序算法的稳定性如果要排序的记录序列中多个数据元素的关键字值相同,且排序后这些数据元素的相对顺序保持不变,则称排序算法稳定,否则称为不稳定。

4.内部排序与外部排序根据在排序过程中待排序的所有数据元素是否全部被放置在内存中,可将排序方法分为内部排序和外部排序两大类。

内部排序是指在排序的整个过程中,待排序的所有数据元素全部被放置在内存中;外部排序是指由于待排序的数据元素个数太多,不能同时放置在内存,而需要将一部分数据元素放在内存中,另一部分放在外围设备上。

整个排序过程需要在内存和外存之间进行多次数据交换才能得到排序结果。

本章仅讨论常用的内部排序方法。

5.排序的基本方法内部排序主要有5种方法:插入、交换、选择、归并和基数。

6.排序算法的效率评估排序算法的效率主要有两点:第一,在一定数据量的情况下,算法执行所消耗的平均时间。

对于排序操作,时间主要用于关键字之间的比较和数据元素的移动。

因此,我们可以认为一个有效的排序算法应该是尽可能少的比较和数据元素移动;第二个是执行算法所需的辅助存储空间。

辅助存储空间是指在一定数据量的情况下,除了要排序的数据元素所占用的存储空间外,执行算法所需的存储空间。

理想的空间效率是,算法执行期间所需的辅助空间与要排序的数据量无关。

7.待排序记录序列的存储结构待排序记录序列可以用顺序存储结构和和链式存储结构表示。

在本章的讨论中(除基数排序外),我们将待排序的记录序列用顺序存储结构表示,即用一维数组实现。

数据结构——- 二叉树


证明: 5.1 二叉树的概念
(1)总结点数为 ●二叉树的主要性质 n=n0+n1+n2 (2)除根结点外,每个 ●性质3: 结点都有一个边e进入 任何一棵二叉树,若其终端结点数为n0, n=e+1 度为2的结点数为n2,则n0=n2+1 (3)边e又是由度为1或2 A 的点射出,因此 e=n1+2n2 G B (4)由(2)(3) F C D n=n1+2n2+1 (5)由(4)-(1)可得 G n0=n2+1
《数据结构与算法》
★★★★★
第五章 二叉树
廊坊师范学院 数学与信息科学学院
树型结构--实例:五子棋
A
B
D
E
F
C
…...........
…...........
第五章 二叉树
本章重点难点
重点: 二叉树的定义,性质,存储结 构以及相关的应用——遍历,二叉搜 索树,堆优先 队列,Huffman树等 难点: 二叉树的遍历算法及相关应用
证明: 5.1 二叉树的概念
(1)总结点数为 ●二叉树的主要性质 n=n0+n1+n2 (2)除根结点外,每个 ●性质3: 结点都有一个边e进入 任何一棵二叉树,若其终端结点数为n0, n=e+1 度为2的结点数为n2,则n0=n2+1 (3)边e又是由度为1或2 A 的点射出,因此 e=n1+2n2 G B (4)由(2)(3) F C D n=n1+2n2+1 (5)由(4)-(1)可得 G n0=n2+1
A B C E D F G
证明: 由性质4可推出
由性质2(深度为k的 二叉树,至多有2k+1-1 个结点)可知,高度 为h(k+1)的二叉树,其 有n (n>0)个结点的完全二叉树的高度为 结点个数n满足: 「log2(n+1) ,深度为「log2(n+1) -1 2h-1-1<n<=2h-1 高度:二叉树中最大叶结点的层数+1 2h-1<n+1<=2h 取对数得到: 0层 1 h-1<log2(n+1)<=h 3 1层 2 因为h是整数,所以 h= log2(n+1) 5 2层 4

数据结构与程序设计考研

数据结构与程序设计考研数据结构与程序设计是计算机科学与技术领域的核心课程之一,也是许多高校计算机专业考研的重点内容。

掌握数据结构与程序设计的相关知识,对于提高编程能力、理解算法原理以及解决实际问题具有重要意义。

一、数据结构概述数据结构是计算机存储、组织数据的方式。

它不仅影响数据的存储效率,也直接影响到算法的执行效率。

常见的数据结构包括数组、链表、栈、队列、树、图等。

- 数组:一种线性数据结构,可以存储具有相同类型的元素。

- 链表:由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。

- 栈:一种后进先出(LIFO)的数据结构,只能在一端进行数据的插入和删除。

- 队列:一种先进先出(FIFO)的数据结构,数据从一端进入,从另一端离开。

- 树:由节点组成的层次结构,每个节点有零个或多个子节点,但只有一个父节点。

- 图:由顶点(或称为节点)和边组成,可以表示复杂的关系。

二、程序设计基础程序设计是使用编程语言来解决特定问题的过程。

程序设计的基础包括:- 算法:解决问题的步骤和方法,是程序设计的核心。

- 控制结构:包括顺序结构、选择结构和循环结构,是程序设计的基本逻辑。

- 函数:封装一段代码,可以重复使用,提高代码的可读性和重用性。

- 面向对象编程:一种编程范式,强调使用“对象”来设计和构建程序。

三、数据结构与算法的关系数据结构与算法是相辅相成的。

数据结构提供了数据存储的方式,而算法则是在这些数据上执行操作的方法。

例如:- 排序算法:如快速排序、归并排序等,依赖于数据的存储方式。

- 搜索算法:如二分搜索、深度优先搜索(DFS)和广度优先搜索(BFS),它们的效率与数据结构紧密相关。

四、程序设计中的常见问题在程序设计过程中,常见的问题包括:- 时间复杂度:算法执行所需时间的度量,通常用大O表示法。

- 空间复杂度:算法执行过程中所需的存储空间。

- 递归与迭代:递归是一种调用自身的函数,而迭代是重复执行的循环结构。

大学《数据结构教程》(第5版) 李春葆 清华大学出版社课件第1章 绪论

D={ a,b,c,d,e,f,g}; R={<e,d>,<d,c>,<c,a>,<a,b>,<b,f> ,<f,g>}
edcabfg
存储结构
1)顺序存储结构 2)链式存储结构
地址 内容
地址 内容
0400 5.0
2字节 0400 5.0
2字节
0402 - 5.3
0402 0515
0515 - 5.3
例如,若T(n)=n(n+1)/2,则有 T(n)/n2=1/2+1/n, 当n∞时,T(n)/n2=1/2故它的时间复杂度为O (n2), 即T(n)与n2 数量级相同。
显然,被称做问题的基本操作的原操作应是其 重复执行次数与算法的执行时间成正比的原 操作;
多数情况下,它就是最深层循环内的语句中 的原操作,它的执行次数和包含它的语句频 度相同。
同样的数据对象,用不同的数据结构来表示, 运算效率可能有明显的差异。
程序设计的实质是对实际问题选择一个好的数 据结构,加之设计一个好的算法。而好的算法 在很大程度上取决于描述实际问题的数据结构。
1.1.2 基本概念和术语(学籍信息表)
• 数据(Data):是信息的载体,能够被计算机识别、 存储和加工处理。
++x;s+=x; } 时间复杂度为O(n)。
一重循环,其基本运算次数与问题规模 n成线性增长关系,称为线性阶,记为 O(n)
【例1-9】
for(j =1;j<=n;++j) for(k=1;k<=n;++k) {++x; s+=x;}
时间复杂度为O(n2)。 二重循环,其基本运算次数于问题规模n 成平方级增长关系,称为平方阶,记为 O(n2)。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 考点 1 算法的时间复杂度 (不会出简单的for循环) 例题.1下面程序段的时间复杂度为 D O(n*log2n) 。 for (k=1;k<=j;k++) { int i=1; while (i<=n) i=i*2; } O(1)初始化线性表 检查线性表是否为空 O(n)删除线性表中的所有元素;得到线性表的长度;得到线性表中指定序号为pos的元素;遍历一个线性表;从线性表中查找具有给定值的第一个元素;更新线性表中具有给定值的第一个元素;向线性表中按给定条件插入一个元素;从线性表中删除符合给定条件的第一个元素 O(n^2)对线性表进行排序

2几种数据结构 (数据结构定义:具有结构的数据元素的集合 )

逻辑结构:集合、线性结构(线性表、广义表、堆栈和队列)非线性结构(树、图) 存储结构:顺序存储结构、链式存储结构、索引结构、散列结构等 集合和线性结构:1 :1 树形结构:1 :N 图形结构:N : N 3 线性表顺序存储和链接存储的特点 顺序存储:随机存取,预先定义表长;插入删除时有大量元素的移动(当下标为1开始的实话移动n-i+1,当下标为0开始的实话移动n-i),查找方便。 链式存储:非随机存取,表长不需要预先定义是动态分配,插入删除不需要大量的元素移动,查找时从第一个元素开始查找。 4 根据线性表的常用操作,选择最合适的存储方式 顺序表和链表的比较: 空间方面:a当表长难估较大时,选择链式存储b当表长较小时,选择顺序存储 时间方面:a插入与删除较多时选择链式存储b查找方面较多时用顺序存储 语言方面:当语言没有指针,选用链式存储时选用静态链表(静态链表需要预先设定空间) 某线性链表最常用的操作是在最后一个结点之后插入一个结点或删除第一个结点, 用仅有尾指针的单循环链表存储方式实现这两种操作 6 链表的特点

例题:链表不具有的特点是(A)。 A、可随机访问任意元素 B、插入删除不需要移动元素 C、不必事先估计存储空间 D、所需空间与线性表长度成正比 2

7 链表的插入删除 8 链表各操作的时间复杂度 O(1)初始化链表 检查链表是否为空 O(n)删除链表中的所有元素;得到链表的长度;得到链表中指定序号为pos的元素;遍历一个链表;从链表中查找具有给定值的第一个元素;更新线性表中具有给定值的第一个元素;向链表中按给定条件插入一个元素;从链表中删除符合给定条件的第一个元素 O(n2)对链表进行排序 例题:在一个长度为n单链表;在表头插入元素的时间复杂度为 O(1) ;在表尾插入元素的时间复杂度为O(n)。 9 栈的特点:先进后出,后进先出。 10 栈的顺序存储、链式存储的出栈入栈时间复杂度:O(1) 13 根据给定递归算法和输入 求输出 (读递归程序) 14 数组上的循环队列 的进队出队操作 (参考期中考试最后大题) 判空:rear == front 满:(rear+1)%MaxSize == front 进队操作:rear = (rear+1)%MaxSize; Q(rear)=x 出队操作:front = (front+1)%MaxSize; X=Q(front) 入队时需先修改入队指针(队尾指针)rear = = (rear +1)% QueueMaxSize 出队时需要修改队头指针front == (front +1)% QueueMaxSize 15 链队的插入O(1) void EnQueue (LinkQueue& HQ,const ElemType& item) { LNode* newptr=new LNode; if (newptr ==NULL) { cerr<<“Memory alocation failure."data=item; newptr->next =NULL; if (HQ.rear==NULL) HQ.front=HQ.rear=newptr; else HQ.rear=HQ.rear->next=newptr; }

17 稀疏矩阵的定义:其非零元素的个数远远小于零元素的个数。 稀疏矩阵的严格定义: 稀疏因子=非零元素/所有元素个数 通常认为   0.3 的矩阵为稀疏矩阵 三元组表示形式: ( i, j, value ) i为第i行, j为第j列,value为非0元素的值 18 广义表的特点 规定:大写字母表示广义表名称,小写字母表示原子,广义表非空时:a是广义表的表头head。其余元素组成表尾tail; 广义表中的数据元素有相对次序;广义表的长度定义为所含元素的个数; 广义表的深度定义为括号嵌套的最大次数;注意:“空表”的深度为 1 ; 广义表可以共享; 广义表可以是一个递归的表;递归表的深度是无穷值,长度是有限值。 例:D=(E, F) E=(a, (b, c), D) , F=(d, (e)) D的长度为2,深度为无穷 19 求广义表的长度 深度 广义表的深度=Max {子表的深度} +1;空表的深度 = 1;仅由单元素组成的表的深度 = 1 例LS=((),(e),(a,(b,c,d)))长度为3深度为3; LD=(((a),((),b),(c)))长度1深度4 20 树的性质1 树中结点个数等于所有结点的度数加1 21 二叉树的性质4 P185 书中性质4: 若对具有n个结点的完全二叉树按照层次从上到下,每层从 左到右的顺序进行编号, 则编号为i 的结点具有以下性质: 3

(1) 若编号为i的结点有左孩子,则左孩子结点的编号为2i;若编号为i的结点有右孩子,则右孩子结点的编号为2i+1. (2) 除树根结点外,若一个结点的标号为i,则它的双亲结点的编号为i/2,也就是说,当i为偶数时,其双亲结点的编号为i/2,它是双亲结点的左孩子,当i为奇数时,其双亲结点的编号为(i-1)/2,它是双亲结点的右孩子. (3) 若i≦|_n/2_|,即2i ≦n,则编号为i的结点为分支结点,否则为叶子结点. (4) 若n为奇数,则每个分支结点都既有左孩子,又有右孩子;若n为偶数,则编号最大的分支结点(编号为n/2)只有左孩子,没有右孩子,其余分支结点左、右孩子都有. 22 给定权值 构造哈夫曼树 求带权路径长度(参考作业题) 例题1:如右图: WPL=7*1+5*2+2*3+4*3=35 23 哈夫曼树的特点

又称最优树,是一种带权路径长度WPL最 小的二叉树。 由0和1组成,用哈夫曼编码传送的电文长度;传输速率最快。 叶子结点的度为零;除叶子结点外的所有结点的度都为2 24 二叉排序树求平均查找长度: K为层数,n表示最大层数,m(k)表示第k层有m结点个数, M表示所有结点个数。

/(M) 25 有向图边数和顶点入度 出度关系 在有向图的邻接表中,从一顶点出发的弧链接在同一链表中,邻接表中结点的个数恰为图中弧的数目,所以顶点入度之和为弧数和的一倍;在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的1倍;无向图的邻接表中结点个数的边数的2倍。 向图边数=所有度之和/2 26 无向图 顶点数和最小生成树的边数关系 无向图 顶点数n:最小生成树的边数n-1 27 图的邻接表P258 邻接表:是图的一种链式存储结构。在邻接表中,对图中每个顶点建一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对于有向图是以顶点vi为尾的弧)。 图的邻接表是存放什么的:

无权无向图:列存放所有节点,横向为结点对应邻接结点和指针指向结点对应的下一邻接点 带权有向图:列存放所有节点,横向为结点的出度的所有邻接点,其中第一项为结点名称,第二项为与该结点名称对应的权值,第三项为指针指向结点对应的下一出度邻接点。 28 求最短路径长度P281 两个顶点间可能存在多条路径,其中有一条是长度最短的路径,即最短路径 若带权值要i到j中所经过边权值之和最小的路径称为最短路径,其权值称为最短路径长度。 29 图的边数与顶点数的关系 (以下是网上找的小题) a).在一个图中,所有顶点的度数之和等于所有边数的1倍。 b).在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的1倍。 c).一个有n个顶点的无向图最多有n(n-1)/2条边。 d).具有4个顶点的无向完全图有6条边。 4

e).具有6个顶点的无向图至少应有5条边才能确保是一个连通图。 h).在一个具有n个顶点的无向图中,要连通全部顶点至少需要n-1条边。 i).对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小n2 g).对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小为 n ,所有邻接表中的结点总数是2e 。 k).一个图中的一条路径长度为k,则该路径所含的顶点数为k-1 30 求最小生成树:带权连通图中,总的权值之和最小的带权生成树 1) 布里姆算法 依次在G中选择一条一个顶点仅在V中,另一个顶点在U中,并且权值最小的边加入集合TE,同时将该边仅在V 中的那个顶点加入集合U. 重复上述过程n-1次,使得U=V,此时T为G的最小生成树. 2) 克鲁斯卡尔算法 将图G中的边按权值从小到大的顺序依次选取,若选取的边使生成树T形成回路,则将其舍弃,如此进行下去,直到TE中包含有n-1条边为止,此时T为G的最小生成树. 31 顺序查找的平均查找长度:(1+2+3……n)/N 32 构造二叉排序树 求平均查找长度 平均查找长度为:(1*1+2*2+3*4+4*1)/8=21/8 33二分查找 给定有序表和待查元素 求依次与哪些元素进行比较 将数据元素2,4,6,8,10,12,14,16,18,20依次存放于一维数组A[0..9]中,然后采用二分查找方法查找元素12,被比较过的数组元素的下标依次为 4,7,5 _。 34冒泡排序 每趟需要进行的比较次数,最多进行多少趟 n-1趟 35 快速排序 第一次划分结果 快速排序(Quick Sorting),又称划分排序.是目前所有排序方法中速度最快的一种(从排序区间选取一个元素为基准,从区间两端向中间顺序进行比较和交换,使得前面单元只保留比基准小的元素,后面单元保留比基准大的元素.然后把基准放到前后两部分之间.) 36 各排序算法空间复杂度

排序方法 时间复杂度 空间复杂度 稳定性 复杂性 平均情况 最坏情况 最好情况 直接插入 O(n2) O(n2) O(n) O(1) 稳定 简单 希尔排序 O(n*n1/2) O(n2) O(nlog2n) O(1) 不稳定 较复杂 冒泡排序 O(n2) O(n2) O(n) O(1) 稳定 简单 快速排序 O(nlog2n) O(n2) O(nlog2n) O(log2n) 不稳定 较复杂 直接选择 O(n2) O(n2) O(n2) O(1) 不稳定 简单 堆排序 O(nlog2n) O(nlog2n) O(nlog2n) O(1) 不稳定 较复杂 归并排序 O(nlog2n) O(nlog2n) O(nlog2n) O(n) 稳定 较复杂 基数排序 O(d(n+rd)) O(d(n+rd)) O(d(n+rd)) O(rd) 稳定 较复杂 37 二叉排序树的特点 二叉排序树的中序是有序的;左孩子比根小,右孩子大于等于根 38 顺序查找适合的存储结构 顺序查找方法既适用于线性表的顺序存储结构,也适用于线性表的链式存储结构(使用单链表作存储结构时,扫描必须从第一个结点开始)。 39排序算法时间复杂度 (见36知识点图) 40 双循环链表 (老师忘记出什么样的了) 41 图连通需要的边数

相关文档
最新文档