数据结构原理与分析知识点

知识点

  1. 在数据结构中,从逻辑上可以把数据结构分为线性结构非线性结构
  2. 算法分析:时间复杂性空间复杂性
  3. 算法---解决问题的有限运算序列
  4. 栈的操作原则是后进先出
  5. 在长度为n的顺序表的第 i(1≤i≤n +1)个位置上插入一个元素,元素的移动次数为n-i+1
  6. 在向顺序栈中压入元素时先移动栈顶指针,后压入元素
  7. N是一个5*8的二维数组,当N按行方式存储时,表示该数组的第10个元素是N[1][1]
  8. 稀疏矩阵一般的压缩存储方法有两种:三元组十字链表
  9. 将一颗有100个结点的完全二叉树从根开始,每一层从左到右依次对结点进行编号,根节点的编号为10,则编号为49的结点的左孩子编号为98.---------在完全二叉树中,对于任意一个结点的编号为n,其左孩子的编号为2n。
  10. 深度为4的二叉树至多可以有的结点数为15.-----------深度为d时,最多有2^d - 1个结点
  11. 采用邻接表存储的图的深度优化遍历算法类似于二叉树的前序遍历
  12. 记录关键字比较的次数与记录的初始排列次序无关的方法是快速排序
  13. 算法必须满足的准则输入、输出、有穷性、确定性、可行性
  14. 图的应用算法:克鲁斯卡尔算法、迪杰斯特拉算法、拓扑排序算法
  15. 图顺序存储结构的优点存储密度大
  16. 在选用求解一个问题的算法时,除了先考虑算法是“正确的”之外,还要考虑执行的算法所需要的时间;执行算法所需要的存储空间以及算法应易于理解、易于编程、易于调试
  17. 在顺序表中插入或删除一个元素,需要平均表长的一半个元素,具体移动的元素个数与插入或删除元素的位置有关
  18. 从循环队列中删除一个元素时,其操作是先取出队头元素,后移动对头指针
  19. 广义表((a),a)的表头是(a),表尾是(a)
  20. 数据是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。如:数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
  21. 数据结构是指带有结构的数据元素的集合
  22. 栈是限定在表的一端进行插入和删除运算的线性表
  23. 存储密度是指数据元素本身所占用的存储量和整个节点结构所占用的存储量之比
  24. 存储结构由两种基本的存储方式实现:顺序存储结构、链式存储结构
  25. 顺序存储结构:借元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借用程序设计语言的数组类型来描述。

    链式存储结构:顺序存储结构是要求所有的元素依次存放在一片连续的存储空间中,当链式存储结构,不需要占用一整块存储空间,但是为了表示结点之间的关系,需要给每个结点附加指针的字段,用于存放后继元素的存储地址。所以链式存储结构通常借助于程序设计语言的指针类型来描述

  26. 数据结构存储的方式:顺序存储、链式存储、散列存储和索引存储

  27. 链式存储结构中,每一个数据的存储结点里可以有多个指向邻接存储结点的指针,用以反映数据间的逻辑关系

  28. 当线性表的数据元素个数基本稳定、很少进行插入和删除操作,但却要求以最快耳朵速度存取表中的元素时,我们应该对表采用顺序存储结构

  29. 如果两个数据结点之间有逻辑上的某种关系,那么就称这俩个结点是邻接

  30. 二叉树是个有限元素的集合,该集合或者为空、或者由一个称为根 的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空 时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。

  31. 递归是若一个对象部分地包含它自己,或用它自己给自己定义,刚 称之个对象是递归的;若一个过程直接地或间接地调用自己,则称这个过程是递归的过程。
  32. 希尔排序是插入排序的一种,又叫缩小增量排序,先按增量进行分组,组内插入排序,缩短增量,再进行分组和组内插入排序,直到增量为1时,进行最后一次排序止
  33. 数据元素是数据的基本单位,在计算机中通常作为一个整体进行考 虑和处理。在有些情况下,数据元素也称为元素、结点、记录等。数据元素用于完整地描述一个对象,如一个学记录,树中棋盘一个格局(状态)、图中的一个顶点等
  34. “基本操作”是指算法中那种所需时间与操作数的具体取值 无关的操作
填空:
  1. 中缀表达式(a+b)-(c/(d+e))对应的后缀表达式是 ab+cde+/- 。
  2. 在常见的数据处理中, 查找是最基本的处理
  3. 在长度为 n 的顺序表中,删除第 i 个元素( 1 i n )时,需要往前移动 n - i 个元素。
  4. 在链栈插入一个结点时,操作顺序应该是先插入结点,再修改栈顶指针
  5. 设有两个串S1和S2,求S2在S1中首次出现的位置的操作称为模式匹配
  6. 有串:“Ф”,那么它的长度是 1。
  7. 把一颗深度为3的左单支二叉树改造册成完全的二叉树,要增添4个空结点
  8. 在任何一颗二叉树的各种遍历序列中,叶结点的相对次序是不发生变化
  9. 权值为1、2、6、8的四个结点,所构造的哈夫曼的带权路径长度是29
  10. 在一颗二叉树中,第5层上的结点数最多是16个
  11. 将一颗树Tr转换成相应的二叉树Bt,那么对TR的先序遍历是对Bt的先序遍历
  12. 现有一颗度为3的树,它有两个度为3的结点,一个度为2的结点,两个度为1的结点。那么其度为0的结点的个数应该是6个
  13. 一个无向连通网图的最小生成树有一颗或多颗
  14. 采用顺序查找法查找长度为n的线性表,其平均查找长度为(n+1)/2
  15. 在下列各种查找方法中,只有散列查找查找法的平均查找长度与表长n无关
  16. 在最坏的情况下,查找成功时二叉查找树的平均查找长度与线性表的平均查找长度相同
  17. 在散列中采用线性探测法解决冲突时,产生的一系列后继散列地址可以大于或者小于但不等于原散列地址
  18. 当两个元素出现逆序时就交换它们的位置,这种排序方法是 交换排序
  19. 通常要求同一个逻辑结构中的所有数据元素具有相同的特性,这意味着不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致
  20. 将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是n

简答

1.递归程序设计的特点?

(1)具备递归出口。递归出口定义了递归的终止条件,当程序的执行使它得到满足时,递归执行过程便终止。有些问题的递归程序可能存在几个递归出口。

(2)在不满足递归出口的情况下,根据所求解问题的性质,将原问题分解成若干子问题,子问题大的求解通过以一定的方式修改参数进行函数自身调用加以实现,然后将子问题的解组合成原问题的解。递归调用时,参数的修改最终必须保证递归出口得以满足。

2.为什么在回溯法、分治法、减治法的算法实现中都要用到栈?

在用回溯法,分治法和减治法解决问题时,算法设计中一般需要用栈结构。这是因为:回溯法在问题求解过程中,为了实现回溯,需要依次记忆求解的每一步,以便必要时可以按照求解过程中的逆次序“回退”。显然要用栈来记忆其求解步骤。用分治法和减治法求解问题时,通常分解后的子问题往往是原问题的较小模式。此时对子问题的解法与原问题的解法是相同的,因此可以用递归的方法来求解,这也就需要用到栈。当然,有时也可以用非递归方法来实现,这种情况下,需要算法设计者建立栈来求解问题。

3.分治法与减治法的思路有什么相同之处?又有什么不同?

分治法和减治法的共同之处是,它们都是在“分而治之” 思想的指导下发展起 来的,基本思路就是把一个规模较大的问题划分为若干个规模较小的子问题,通 过对子问题的求解,得到原问题的解。
但分治法和减治法又各自适用于不同的情况,因此它们的求解过程有所不同。用分治法求解的问题,所划分的子问题是互相独立的,且原问题的解需要由各子问 题的解合并而成。因此,需要对各子问题分别求解,并合并子问题的解,才能得到原问题的解。可以用减治法求解的问题,虽然也要对原问题进行划分,但因为 原问题的或者解只在其中一个子问题中,或者是只与其中的一个子问题的解之间有着某种对应关系,因此只要对相关的一个子问题进行求解,就可以得到原问题
的解。当然它也就不存在合并解的过程。可以说,减治法是一种退化了的分治法。

4.一个带权无向图的最小生成树是否一定唯一?在什么情况下构造 出的最小生成树可以不唯一?

一个带权无向图额最小生成树不一定是唯一的。从Kruskal算法构造最小生成树的过程可以看出,当从图中选择当前权值最小的边时,如果存在多条这样的边,并且这些边与已经选取的边构成回路,此时这些边就不可能同时在一颗最小生成树中,对这些 边的不同选择结果可能会产生不同的最小生成树

5.时间复杂度与样本个数n有关,是指最深层的执行语句耗费时间,而递归算法与非递归算法在最深层的语句执行上是没有区别的,循环的次数也没有太大的差异。仅仅是确这循环是否继续的方式不同,递归用栈隐含循环次数,非递归用循环变量来显示循环资数而已

6.栈中的元素具有什么性质? 什么情况适合使用栈结构?

栈是只允许在表的一端进行插入与删除操作的特殊的线性表,表中允许做插入和删除操作的一端称之为栈顶,相应地,另一端称为栈底。正是因为有这样的限制,使得栈中的数据元素具有“后进先出”的特性。即最先进栈的元素一定是最后出栈的元素。

栈的特性决定了栈具有记忆“逆序”的功能,因为栈中元素出栈的顺序就是入栈顺序的逆序。因此,凡是需要记忆“逆序”的情况,在计算机中处理时都可以使用栈结构来实现。比如,要按照与进入使相反的顺序返回,可以把进入步骤的顺序入账,然后按出栈的步骤依次恢复。还有象程序的调用与返回,终端的调用与返回等要求按正、逆顺序处理的问题,计算机处理时都是利用栈来解决的。

7.利用中序线索是否能够实现二叉树的前序遍历?若不能,请说明理由;若能,请给出实现的基本思路。
利用中序线索可以实现前序遍历。实现的基本思路是:
从根节点开始前序遍历二叉树。
如果当前遍历的结点有左孩子,则其左孩子就说它的前序后件;
否则,如果当前遍历的结点有右孩子,则其有孩子就是他的前序后件;
不然,一定是叶子结点,此时只要沿中序后件线索查找,直至找到一个右孩子的结点,该右孩子即为当前所遍历结点的前序后件。
一直到查找完全部结点(最后一个结点的前序后件为空),则得到一个前序遍历序列
8.对有序表进行折半查找形成的折半查找树和二叉搜索树有何异同之处?
相同点:折半查找树和二叉搜索树都满足二叉搜索树的特性
不同点:折半查找树是平衡的二叉搜索树,而一般的二叉搜索树不一定平衡;折半查找树是用来描述对有序表进行折半查找的过程,并不实际存在,而二叉搜索树是实际存在的动态搜索结构。
9.对于逆序的有序序列,采用哪种基本排序方法排序的时间复杂度最低?
选择排序。因为选择排序中数据元素的移动次数与待排序序列的有序程度无关, 即是否完全逆序不会影响数据元素交换的次数;而对于冒泡排序和插入排序来说, 对完全逆序序列排序是效率最低的情况。
10.一个按递减排好序的数组是不是一个堆?为什么?
是一个堆。数组中元素可以看作完全二叉树中的元素,此时完全二叉树中所有分 支结点的元素值都大于其左、右孩子的结点值,因此它是一个最大堆

11.简述队列的上溢现象一般有几种解决方法。

一般要解决队列的上溢现象可有以下几种方法:

(1)可建立一个足够大的存储空间以避免溢出,但这样做往往会造成空间使用率低,浪费存储空间。
(2)要避免出现“假溢出”现象可用以下方法解决:第一种:采用移动元素的方法。每当有一个新元素入队,就将队列中已有的元素向队头移动一个位置,假定空余空间足够。第二种:每当删去一个队头元素,则可依次移动队列中的元素总是使front指针指向队列中的第一个位置。第三种:采用循环队列方式。将队头、队尾作是一个首尾相接的循环队列,即用循环数组实现,此时队首仍在队尾之上,作插入和删除运算时仍遵循“先进先出”的原则

你可能感兴趣的:(数据结构)