1. 数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合用计算机存储、组织数据的方式
2. 数据结构分别为逻辑结构、存储(物理)结构和数据的运算三个部分
3. 数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构,常见如以下四种:集合结构、线性结构、树形结构、图结构
4. 数据的存储(物理)结构是指数据的逻辑结构在计算机中的表示,分为顺序存储结构和链式存储结构
5. 根据数据结构中各元素之间前后件关系的复杂程度,可将数据结构分为(线性结构和非线性结构)
(1)线性结构一般是首无前驱,尾无后继,中间元素有唯一的前驱和后继。主要有:列表、链表、队列、栈
(2)非线性结构主要有:没有对应关系的集合、一对多关系的树、多对多关系的图
6. 算法是指:解决方案的准确而完整的描述
7. 算法由(顺序、选择、循环)控制结构组合而成
8. 算法的时间复杂度是指(算法执行过程中所需要的基本运算次数)
9. 算法的空间复杂度是指(执行过程中所需要的存储空间)
10. 算法分析的目的是(分析算法的效率以求改进)
11. 算法的五大特性:有穷性、确定性、可行性、输入、输出
12. 程序=算法+数据结构
13. 线性表特点(除了第一个和最后一个元素外,其余每个元素都有一个直接前驱和直接后继)
14. 线性表的存储结构:顺序存储结构和链式存储结构
(1)顺序存储结构:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。通常用数组来描述数据结构中的顺序存储结构
(2)链式存储结构:其结点在存储器中的位置是随意的,即逻辑上相邻的数据元素在物理上不一定相邻。通过指针来实现
15. 线性表的基本运算:修改、插入、删除、查找、排序
16. 用链表表示线性表的优点和缺点是(便于插入和删除操作,插入和删除不需要移动元素,但是无法随机访问任一元素)
17. 单链表中,增加头结点的目的是(方便运算的实现)
18. 循环链表的主要优点是(从表中任一结点出发都能访问到整个链表)
19. 与单链表相比,双向链表的优点是(更容易访问相邻结点)
20. 栈和队列的共同特点是(只允许在端点处插入和删除元素)
21. 栈和队列通常采用的存储结构分别是 链式存储和顺序存储
22. 队列具有(先进先出)的特征,栈具有(后进先出)的特征
23. (队列,循环队列,顺序表)不具有记忆功能,(栈)具有记忆功能
24. 栈的应用:数制转换,括号匹配的检验,行编辑程序,迷宫求解,表达式求值,递归实现
25. 为什么要设计堆栈?它有什么独特用途?
(1)调用函数或子程序非它莫属,是递归运算的有力工具
(2)用于保护现场和恢复现场,简化了程序设计的问题
26. 由两个栈共享一个存储空间的好处是(节省存储空间,降低上溢发生的概率)
27. 在实际应用中,带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,这种带链的栈称为 (可利用栈)
28. 为什么要设计队列?它有什么独特用途?
(1)离散事件的模拟(模拟事件发生的先后顺序,例如 CPU芯片中的指令译码队列)
(2)操作系统中的作业调度(一个CPU执行多个作业)
(3)需要打印机输出数据时,一般将打印作业放在一个(队列)中
29. 在顺序队中,当尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫(假溢出)。解决假溢出的途径———采用循环队列
30. 当循环队列非空且队尾指针等于对头指针时, 说明循环队列已满,不能进行入队运算。这种情况称为 (上溢)
31. 当循环队列为空时, 不能进行退队运算, 这种情况称为 (下溢)
32. 在一个循环队列中,若约定队首指针指向队首元素的前一个位置。那么,从循环队列中删除一个元素时,其操作是先移动队首位置 ,后取出元素
33. 二叉树的性质,存储结构:
(1)性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)
(2)性质2: 深度为k的二叉树至多有2^k-1个结点(k>0)
(3)性质3: 对于任何一棵二叉树,如果其终端结点数为n0,度为2的结点数有n2个,则叶子数n0=n2+1
(4)性质4: 具有n个结点的完全二叉树的深度必为 [log2n]+1
(5)性质5: 对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i,其右孩子编号为2i+1;其双亲的编号必为i/2(i=1时为根,除外)
34. 深度为5的满二叉树中,叶子结点的个数为(16),其共有(31)个结点;设一棵完全二叉树共有699个结点。则该二叉树的叶子结点数为(350)个
35. 一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为(13)个
36. 二叉树的链式存储结构对比顺序存储结构的优点:不浪费空间+插入删除方便
37. 已知二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是(cedba)
38. 已知二叉树的前序遍历序列是abdgcefh,中序遍历序列是dgbaechf,它的前序遍历序列是(gdbehfca)
39. Huffman树:最优二叉树(带权路径长度最短的树)
40. 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,G(V,E),G表示一个图,V是图G中顶点的集合,E是图G中边的集合
41. 图中边的数目e = 各个顶点度数和的一半
42. N个顶点的连通图中边的条数至少为(N-1)条。#将所有顶点连成一条线即可;N个顶点的强连通图中边的条数至少为(N)条。#将所有顶点连成一条圈
43. 迪杰斯塔拉算法--单源最短路径
44. 对长度为n的线性表进行顺序查找,最坏情况下需要比较(N)次
45. 几种排序的性能:
(1)插入排序,时间复杂度O(n^2),空间复杂度O(1),稳定
思想:将无序序列中的各元素依次插入到已经有序的线性表中,从而得到一个新的序列
(2)希尔排序,时间复杂度O(nlog2n),空间复杂度O(1),不稳定
(3)快速排序,时间复杂度O(nlog2n),空间复杂度O(log2n),不稳定
思想:通过一趟排序将待排序记录分割成独的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,再分别对这两部分记录继续进行排序,以达到整个序列有序
(4)冒泡排序,时间复杂度O(n^2),空间复杂度O(1),稳定
(5)简单排序,时间复杂度O(n^2),空间复杂度O(1),不稳定
(6)堆排序,时间复杂度O(nlog2n),空间复杂度O(1),不稳定
(7)归并排序,时间复杂度O(nlog2n),空间复杂度O(n),稳定
思想:将两个或两个以上的有序表组成合成一个新的序列表
46. 最简单的交换排序是(冒泡排序),对长度为n的线性表进行顺序冒泡排序,最坏情况下需要比较(n(n-1)/2)次
47. 插入排序通过数据元素的交换来逐步消除线性表中的逆序,所以比较的次数与初始排列次序有关,在待排序的元素序列基本有序的前提下,效率最高
而选择排序和堆排序的比较次数与初始排列次序无关
快速排序虽然与初始排列次序有关,但在待排序的元素序列基本有序的前提下,效率低于插入排序。
48. 希尔排序属于(插入类排序),堆排序属于(选择类排序)
49. (归并排序)要求的内存量最大
50. 已知数据表 A中每个元素距其最终位置不远,为节省时间, 应采用(直接插入排序)