学习笔记:第8章 数据结构与算法

1、一个线性表是n个元素的有限序列(n>=0),通常表示为(a1,a2,…,an)。其特点是在非空的线性表中:
(1)存在唯一的一个称作“第一个”的元素。
(2)存在唯一的一个称作“最后一个”的元素。
(3)除第一个元素外,序列中的每个元素均只有一个直接前驱。
(4)除最后一个元素外,序列中的每个元素只有一个直接后继。
2、栈和队列是程序中常用的两种数据结构,它们的逻辑结构与线性表相同。其特点在于运算收到了限制:栈按“后进先出”的规则操作,队列按“先进先出”的规则进行操作,故称运算受限的线性表。
3、串的基本概念
串长:即串的长度,指字符串中的字符个数
空串:长度为0的串,空串不包含任何字符。
空格串:由一个或多个空格组成的船。虽然空格是一个空白符,但它也是一个字符,计算串长度时要将其计算在内。
子串:由串中任意长度的连续字符构成的序列称为子串。含有子串的串称为主串。子串在主串中的位置指子串首次出现是,该子串的第一个字符在    主串的位置。空串是任意串的子串。
串相等:指两个串长度相等且对应序号上的字符也相同。
串比较:两个串比较大小时以字符的ASCII码值作为依据。比较操作从两个串的第一个字符开始进行,字符的ASCII码值大者所在的串为大;若其中    一个串先结束,则以串长较大者为大。
4、数组结构的特点如下。
(1)数据元素数目固定。一旦定义了一个数组结构,就不再有元素的增减变化。
(2)数据元素具有相同的类型。
(3)数据元素的下标关系具有上下界的约束且下标有序。
5、二叉树的性质
(1)二叉树第i层(i>=1)上至多有2的(i-1)次方个结点。
(2)深度为k的二叉树至多有2的k次方-1个结点(k>=1)。
(3)对任何一颗二叉树,若其终端节点数为n0,度为2的结点数为n2,则n0=n2+1。
(4)具有n个结点的完全二叉树的深度为log2n+1。
(5)对一棵有n个结点的完全二叉树的结点按层次自左至右进行编号,则对任一节点i(1<=i<=n)有:
若i=1,则结点i是二叉树的根,无双亲;若i>1,则其双亲为i/2。
若2i>n,则结点i无左孩子,否则其左孩子为2i。
若2i+1>n,则结点i无右孩子,否则其右孩子为2i+1。
6、图G是由两个集合V和E构成的二元组,记作G=(V,E),其中V是图中顶点的非空有限集合,E是图中边的有限集合。从数据结构的逻辑关系角度来看,图中任一顶点都有可能与图中其他顶点有关系,而图中所有顶点都有可能与某一顶点有关系。在图中,数据结构中的数据元素用顶点表示,数据元素之间的关系用边表示。
有向图:若图中每条边都是有方向的,则称为有向图。从顶点vi到vj的有向边<vi,vj>也称为弧,起点vi称为弧尾;终点vj称为弧头。在有向图中,<vi,vj>与<vi,vj>分别表示两条弧。
无向图:若图中的每条边都是无方向的,顶点vi和vj之间的边用(vi,vj)表示。在无向图中,(vi,vj)与(vj,vi)表示的是同一条边。
完全图:若一个无向图具有n个顶点,而每个顶点与其他n-1个顶点之间都有边,则称之为无向完全图。显然,含有n个顶点的无向完全图共有n(n-1)/2条边。类似地,有n个顶点的有向完全图中弧的数目为n(n-1),即任意两个不同顶点之间都存在方向相反的两条弧。
度、出度和入度:顶点v的度是指关联于该顶点的边的数目,记作D(v)。若G为有向图,顶点的度表示该顶点的入度和出度之和。顶点的入度是以该顶点为终点的有向边的数目,而顶点的出度指以该顶点为起点的有向边的数目,分别记为ID(v)和OD(v)。
路径:在无向图G中,从顶点vp到顶点vq的路径是指存在一个顶点序列vp,vi1,vi2,…,vin,vq,使得(vp,vi),(vi1,vi2),…,(vin,vq)均属于E(G)。若G是有向图,其路径也是有方向的,它由E(G)中的有向边<vp,vi1>,<vi1,vi2>,…,<vin,vq>组成。路径长度时路径上边或弧的数目。第一个顶点和最后一个顶点相同的路径称为回路或环。若一条路径上除了vp和vq可以相同外,其余顶点均不相同,这种路径称为一条简单路径。
子图:若有两个图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为强连通图。
网:边(或弧)具有权值的图称为网。
7、一个算法的优劣可从以下几个方面考查。
(1)正确性。也称为有效性,是指算法能满足具体问题的要求。即对任何合法的输入,算法都能得到正确的结果。
(2)可读性。指算法被理解的难易程度。人们常把算法的可读性放在比较重要的位置,因为晦涩难懂的算法不易交流和推广使用,也难以修改和扩展。因此,设计的算法应尽可能简单易懂。
(3)健壮性。也称为鲁棒性,即对非法输入的抵抗能力。对于非法的输入数据,算法应能加以识别和处理,而不会产生误动作或执行过程失控。
(4)效率。粗略地讲,就是算法运行时花费的时间和使用的空间。对算法的理想要求是运行时间短、占用空间小。
8、若在待排序的一组序列中,Ri和Rj的关键词相同,即ki=kj,且在排序前Ri领先于Rj,那么当排序后,如果Ri和Rj的相对次序保持不变,Ri仍领先于Rj,则称此类排序方法为稳定的。若在排序后的序列中可能出现Rj领先于Ri的情形,则称此类排序为不稳定的。
内部排序:指待排序记录全部存放在内存中进行排序的过程。
外部排序:指待排序记录的数量很大,以至内存不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。
9、解决冲突就是为出现冲突的关键字找到另一个“空”的哈希地址。常见的处理冲突的方法有开放定址法、链地址法(拉链法)、再哈希法、建立公共溢出区法等,在处理冲突的过程中,可能得到一个地址序列,记为Hi(i=1,2,…,k)。
10、通常情况下,字符串存储在一维字符数组中,每个字符串的末尾都有一个串结束符,在C语言中以特殊字符“\0”作为结束标记。

猜你喜欢

转载自blog.csdn.net/dring321/article/details/50891338
今日推荐