第一章绪论
1.数据:
是描述客观事物得符号,是信息的载体,它是能够被计算机识别、存储和加工处理的对象。是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中被计算机程序处理的符号的总称,是计算机化的信息。
2.数据结构:
是相互之间存在一种或多种特定关系的数据元素的集合,是计算机存储和数据组织的方式,它分为三个方面,即数据的逻辑结构,数据的物理结构,数据的操作。
3.数据项:
是数据不可分割的最小单位,用它可以识别一个或一个组数据,一个数据元素可由若干数据项组成。
4.数据对象:
是性质相同的数据元素的集合,是数据的一个子集。数据元素是数据对象的一个实例。
5.数据类型:
是一个值的集合以及定义在这个值集上的一组操作,可分为原子类型和结构类型。
6.抽象数据类型:
是指一个数学模型以及定义在此数学模型上的一组操作。抽象数据类型需要通过固有数据类型来实现,抽象数据类型的定义取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即无论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。简单来说,抽象数据类型是将数据结构连同对其的处理操作封装在一起而形成的复合体。抽象数据类型实际上就是对数据结构的逻辑定义。
是基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。
7.逻辑结构:
是数据元素之间逻辑关系的描述。
8.物理结构(存储结构):
是指数据的逻辑结构在计算机中的映像(又称表示),即数据结构在计算机中的存储方法。
9.算法:
是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
10.时间复杂度:
算法执行所需时间的量度。算法中语句的执行次数T(n),是关于问题规模n的函数。我们用O表示数量级。T(n)=O(f(n))随着问题规模的增大,算法的执行时间增长率和f(n)的增长率相同,称作算法的渐进式时间复杂度,也称算法时间复杂度。
11.空间复杂度:
算法执行所需存储空间的量度。记作S(n)=O(f(n)),n为问题的规模。
12.存储密度:
指结点数据本身所占存储量和整个结构所占存储量之比。
13.线性结构:见书P95
14.非线性结构:见书P95
第二章线性表
1.线性表:
线性表是n个数据类型相同的数据元素组成的有限序列,数据元素之间是一对一的关系,即每个数据元素最多只有一个直接前驱和一个直接后继。除首尾元素外,每个元素有唯一的前驱和唯一的后继。
2.顺序表:
线性表的顺序存储结构是指在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,元素之间的逻辑关系通过存储位置来反应,采用顺序存储结构的线性表通常称为顺序表。
3.链表:
通过任意一组存储单元来存储线性表中的数据元素的,用指针来反应其逻辑关系,采用链式存储结构的线性表通常称为链表。每个结点只有一个指向后继的指针称为单链表。
4.结点:
由数据元素和指示其后继结点地址的信息组成的存储映像称为结点。
5.表长:
表中元素的个数称为表的表长。
6.循环链表:
是另一种形式的链式存储结构,它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。
7.双链表:
采用链式存储结构的线性表,每个结点除一个数据域外,还有两个指针域,其一指向直接前驱,另一指向直接后继。
8.静态单链表:
定义一个较大的结构数组作为备用结点空间,每个结点应包含两个域data域和next域,data域用来存放结点的数据信息,next域不再是指针而是指示其后继结点在结构数组中的相对位置(即数组下表),通常称作游标,我们把用这种方式实现的单链表叫做静态链表。
是利用一块连续的空间,按链表的存储方式组织数据,按顺序存储结构分配空间,所构成的一种链表。
9.头指针:
是指向链表第一个结点的指针,若链表有头结点,则是指向头结点的指针,具有标识作用,常用头指针作为链表的名字。
10.头结点:
在线性链表的第一个结点之前附加的一个结点,是链表的表头,当链表是空链表时,该指针为空指针,有了头结点,在第一个元素之前插入和删除第一个结点,其操作与其他结点都统一了。
第三章 栈和队列
1.栈:
也叫后进先出表,是限定仅在表尾进行插入和删除操作的线性表,表尾端称为栈顶,表头端称为栈底,不含元素的空表称为空栈。
2.顺序栈:
采用顺序存储结构的栈称为顺序栈
3.链栈:
采用链式存储结构的栈称为链栈.
4.队列:
是一种先进先出的线性表,它只允许在表的一段进行插入,而另一端删除元素,允许插入的一端叫做队尾,允许删除的一端称为队首
5.链队列:
用链表表示的队列,需要两个指针分别指示队头和队尾,为了操作方便,也给链队列添加一个头结点,并设定头指针指向头结点。空队列的判定条件就成为头指针和尾指针都指向头结点。
6.假溢出:
队列是"先进先出表”,随着入队出队的进行,会使整个队列整体向后移动,当队尾指针移到最后,若再有元素入队就会出现溢出,而事实上此时队列中并未真正的“满员”,因为此时队头部分还有空间可用,这种现象为“假溢出”,这是由于队尾入队头出这种受限的操作造成的。
7.循环队列:
将队列的数据域data[0…MAXSIZE-1]看成头尾相接的循环结构。头尾指针的关系不变,将其称为循环队列。
8.双端队列:
是限定插入,删除在表的两端进行的线性表,这两端分别称为端点。
第四章串
1.串:
是由零个或多个任意字符組成的字符序列。串是一种特殊的线性表,它的数据元素仅由一个字符组成。
2.子串:
串中任意个连续的字符组成的子序列称作该串的子串
3.主串:
包含子串的串相应的称为主串
4.字符在串中的位置:
一个字符在串序列中的序号为该字符在串中的位置。
5.子串在主串中的位置:
子串的第一个字符在主串中的位置表示
6.空串:
长度为零的串称为空串
7.空格串:
串中元素均为空格的串称为空格串.
8.串相等:
两个串长度相等且对应位置字符都相等。
串和线性表的区别?
串的逻辑结构与线性表极为相似,区别仅在于串的数据对象约束为字符集,然而串的操作与线性表有很大的差别,在线性表基本操作中,大多以单个元素作为操作对象;而在串的基木操作中通常以“串的整体”作为操作对象
第五章数组和广义表
1.广义表:
广义表是n(n≥0)个数据元素a1,a2,…,ai,…,an的有序序列,一般记作
ls=(a1,a2,…,ai,…,an),其中ls是广义表的名称,n是它的长度,每个ai是ls的成员它可以是单个数据元素,也可以是一个广义表,分别称为广义表la的单元素和子表。
是由零个或多个单元素或子表所构成的有限序列,是线性表的推广。
2.数组:
类型一致的有限个数据元素按顺序连续存储.数组作为一种数据结构,其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一数据类型,数组可以看作是线性表的推广。
3矩阵的压缩存储:
有的矩阵中有许多值相同元素或者是零元素,为了节省存储空间对这类矩阵采用多个值相同的元素只分配一个存储空间,有时零元素不存储的存储策略,称为矩阵的压缩存储。
5.特殊矩阵:
值相同的元素或者零元素在矩阵中的分布有一定规律的矩阵称为特殊矩阵
6.稀疏矩阵:
非零的数据元素个数很少的矩阵称为稀疏矩阵
7.对称矩阵:
一个n阶方阵,若满足aij=aji,则称该矩阵为对称矩阵。
8.三角矩阵:
主对角线上方和下方的元素(不包括对角线)均为常数或零元素的矩阵
9.行表:
记录稀疏矩阵中每行非零元素在三元组表中的起始位置的表
10.三元组表:
将非零元素所在的行、列以及它的指构成一个三元组(i,j,v),若线性表顺序存储的每一个结点均是三元组,则该线性表的存储结构称为三元组表
11.带状矩阵:
所有非零元素均集中在以主对角线为中心的带状区域的矩阵
第六章二叉树和树
1.树:
是n个结点的有限集合,n≥0,有且只有一个称为根的结点,根结点无前驱
2.有序树:
树中结点的各子树看成是从左至右依次有序的,且不能交换
3.森林:
m(m≥1)棵互不相交的树的集合
4.二叉树:
是一种树型的结构,它的特点是每个结点之多有两棵子树,且有左右之分,不可任意颠倒。
5.完全二叉树:
深度为k的有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时
6.满二叉树:
是一棵深度为k的,且有(2^k)-1个结点的二又树
7.遍历二叉树:
是按照某种搜索路径巡访二叉树中的每个结点,使得这些结点均被访问一次
8.线索二叉树:
按照某种遍历方式对二叉树进行遍历,可以把二叉树中所有结点排列为一个线性序列。在该序列中,除第一个结点外,每个结点有且只有一个前驱结点;除最后一个结点外,每个结点有且仅有一个直接后继结点。为了保留结点在某种遍历序列中直接前驱和直接后继的位置信息,可以用二叉树的二叉链表存储结构中的那些空指针域来指示,这些指向直接前驱结点和指向直接后继结点的指针被称为线索(thread),加了线索的二叉树被称为线索二叉树。
由每个结点中包含左指针,左标志位,数据域,右标志位,右指针五部分组成的二叉链表,叫做线索链表,指向前驱或后继的指针叫做线索,以二叉树某种遍历顺序给空指针加线索的过程叫做线索化,线索化了的二叉树称为线索二叉树。
9.哈夫曼树:
又称最优二叉树,是指对一组带有确定权值的叶结点,构造具有最小带权路径长度的二叉树。
10.哈夫曼编码:
在哈夫曼树中,约定左分支代表0,右分支代表1,把叶子结点到根结点的路径上的左右分支代表的码从下至上一次连接起来,组成的字符串称为该叶子结点的哈夫曼编码,这就是哈夫曼编码。哈夫曼编码是个无损的压缩算法,一般用来压缩文本和程序文件。
11.路径和路径长度:
在二叉树中,从一个结点可以到达的孩子结点或者后辈结点之间的通路称为路径,通路中的分支数目称为路径长度。
12.结点的权及结点的带权路径长度
若将二叉树中结点赋予一个有着某种特殊意义的值,这个数值就是该结点的权值。
在二叉树中,从根结点到某个后辈结点之间的路径长度于该结点的权的乘积称为该结点的带权路径长度。
13.二叉树的带权路径长度:
设二叉树具有n个带权值的叶结点,那么从根结点到各个叶子结点的路径长度与相应结点权值的乘积之和叫做二叉树的带权路径长度。
14.二叉排序树:
或者是空树,或者是符合以下性质的二叉树
1.若它的左子树不空,则左子树上所有结点均小于它的根结点值
2.若它的右子树不空则右子树上所有结点均大于它的根结点值.
15.平衡二叉排序树(AVL树):
或者是空树,或者是符合一下性质的二叉排序树
1.左子树和右子树的高度之差的绝对值小于等于1
2. 左子树和右子树也是平衡二叉排序树
第七章图
图:图G由两个集合V和E组成,记为G=(V,E),其中V是顶点的有穷非空集合,E是由V中顶点的序偶组成的有穷集,这些序偶称为边或弧
顶点:图中的数据元素称为顶点
完全图:边数恰好等于n(n-1)/2的n个顶点的无向图称为完全图(无向图中任意两个顶点之间都有一条边相连,称该图为完全图)
有向完全图:有n(n-1)条边的有向图称为有向完全图(图中每个顶点和其余n-1个顶点都有弧相连)
入度:以顶点V为头的弧的数目称为V的入度
出度:以顶点V为尾的弧的数目称为V的出度
连通图:在无向图中,任意两个顶点之间都有路径相通
强连通图:在有向图中,任意两个顶点之间都有来回路径相通
生成树:生成树是无向连通图的一个极小连通子图,它含有图中的全部顶点和使任意顶点都连通的最少的边
邻接矩阵:表示图中结点之间关系的矩阵称为邻接矩阵
邻接表:由顶点数据表和表示数据关系的边(弧)构成的表
十字链表:可以把它看成是将有向图的邻接表和逆邻接表结合起来形成的一种存
储形式
图的遍历:从某一顶点出发按序访问图中所有结点,且使每个结点仅被访问一次
最小生成树:无向网中边上权值之和为最小的生成树
DAG:有向无环网
拓扑排序:由某个集合上的一个偏序得到该集合上一个全序的操作称为拓扑排序
关键路径:在AOE网中,从源点到汇点的最长路径称为关键路径
AOE网:用顶点表示事件,用弧表示活动,弧的权值表示活动所需的时间,构造的有向网称为AOE网
简单路径:一条路径上除了开始顶点和结束顶点外,其余顶点均不相同
弧头:边的终点称为弧头
弧尾:边的始点称为弧尾
第八章查找
关键字:是数据元素中某个数据项的值,用它可以识别一个或一组数据元素
査找:根据给定的关键字的值,检索某个与该值相等的数据元素是否在查找表中
找到为查找成功,找不到为查找失败
査找表:是由同一类型的数据元素或记录构成的集合
静态査找表:査询某个特定的数据元素是否在査找表中,检素某个特定的数据元素的各种属性
动态査找表:在查找过程中同时插入查找不存在的数据元素,或者从査找表中删除已存在的某个数据元素
平均査找长度(ASL):为确定数据元素在査找表中的位置,需和给定值进行比较的关键字个数的期望值,称为查找算法在查找成功时的平均查找长度.
冲突:两个不同的关键字,其散列函数值相同,因而被映射到同一表位置的现象称为冲突
哈希函数的构造方法:直接定址法,数字分析法,平方取中法,折叠法,除留余数法和随机数法
哈希函数处理冲突的方法:开放地址法,再哈希法,链地址法和建立一个公共溢出区。
简答题:
各查找方法的基本思想,平均査找长度?
顺序查找的基本思路:对于给定的关键字k,从线性表的第一个元素开始依次向后与记录的关鍵字域相比较,如果某个记录的关键字等于k,则查找成功,否则查找失败,平均查找长度ASL=3(n+1)/4.
折半(二分)查找的基本思路:先取表的中间位置的记录关键字和所给关键字进行此较,若相等,则查找成功,如果给定关键字比该记录的关键字小,则说明所要查找的记录只可能在表的前半部分,反之,则在后半部分,重复步骤,每一次比较就可以将查找范围缩小一半,直到找到给定的关键字的记录,查找成功,找不到为查找失败,平均查找长度 ASL=log2(n+1)-1
分块查找(索引顺序表查找)的基本思路:先确定待査记录所在的块(子表)然后在块中顺序查找.平均查找长度ASL=1/2(n/s)+1]+s/2
哈希查找(散列查找)的基本思路:在进行查找时,在记录的存储位置与它的关键字之间建立一个确定的对应关系h,以线性表中每个元素的关键字k为自变量通过函数h(k)计算出该元素的存储位置,我们将h函数称为散列函数或哈希函数,这种査找方法称为散列查找或哈希查找
第九章排序
排序:就是按关键字值的递增或递减的次序,把文件中的各记录一次排列起来,可使一个无序文件变成有序文件的一种操作
排序算法的稳定性:相同元素排序前后的相对位置没有发生变化,则为稳定,反之为不稳定
内部排序:在排序过程中,所有待排序记录都放在内存中进行的排序称为内部排
序
外部排序:当待排序的记录很多,排序时不仅要使用内存,而且还要使用外部存储器的排序方法称为外部排序
简答题:
各排序方法的基本思想,时间复杂度,空间复杂度及稳定性?
直接插入排序的基本思想:直接插入排序是一种最简单的排序方法,基本操作是将条记录插入到已排好的有序表中,从而得到一个新的,记录数量増一的有序表
时间复杂度O(n^2).空间复杂度O(1)直接插入排序是稳定的
希尔排序的基本思想:先将整个待排元素序列分割成若干子序列分别进行直接插
入排序,然后依次缩减增量再进行排序,使整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序,实质就是分组直接插入排序时间复杂度O(n^2)
空间复杂度O(1)肴尔排序是不稳定的
冒泡排序的基本思想:先将第一个记录的关键字和第二个记录的关键字进行比较
若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字,以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止.时间复杂度o(n^2).空间复杂度O(1)冒泡排序是稳定的
快速排序的基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中
部分的所有数据都比另一部分的所有数据都要小然后再按此方法对这两部分数
据进行快速排序整个排序过程可以递归进行,以达到整个序列有序.时间复杂度
O(nlog2n)空间复杂度O(nlog2n)快速排序是不稳定的
直接选择排序的基本思想:对于给定的一组记录,经过第一轮比较后得到最小的
记录,然后将该记录与第一个记录的位置交换,接着对不包括第一个记录以外的其他记录进行第二轮比较,得到最小的记录并与第二个记录的位置交换,重复该过程,直到进行比较的记录只有一个时为止.时间复杂度O(n^2).空间复杂度O(1).直接选择排序是不稳定的
堆排序的基本思想:堆排序是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种,可以利用数组的特点快速定位索引的元素,堆分为大根堆和小根堆,是完全二叉树.时间复杂度o(nlog2n).空间复杂度O(1)堆排序是不稳定的
归并排序的基本思想:将待排序序列看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;将这些有序表再次归并,得到n/4个长度为4的有序序列;如此重复进行下去,最后得到一个长度为n的有序序列.时间复杂度O(nlog2n).空间复杂度O(n)归并排序是稳定的
基数排序的基本思想:是借助"分配"和"收集"两种操作对单逻辑关键字进行排序的一种内排序方法.时间复杂度o(d*n).空间复杂度O(n+r).基数排序是稳定的