数据结构
填空题
天涯古巷 出品
1. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动 n-i+1  个元素。
2. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动 n-i  个元素。
3. 在顺序表中访问任意一结点的时间复杂度均为 O(1)  ,因此,顺序表也称为 随机存取  的数据结构。
4. 在单链表中,除了首元结点外,任一结点的存储位置由 其直接前驱结点的链域的值  指示。 5.对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为  O(1)  ,在给定值为x的结点后插入一个新结点的时间复杂度为  O(n)  。
第三章
1. 向量、栈和队列都是  线性  结构,可以在向量的  任何    位置插入和删除元素;对于栈只能在  栈顶  插入和删除元素;对于队列只能在  队尾    插入和  队首  删除元素。
2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为  栈顶    。不允许插入和删除运算的一端称为    栈底    。
3.    队列  是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。
4. 在具有n个单元的循环队列中,队满时共有  n-1  个元素。
第四章
1.  不包含任何字符(长度为0)的串  称为空串。
2.    由一个或多个空格(仅由空格符)组成的串    称为空白串。
3. 设S=“A;/document/Mary.doc”,则strlen(s)=    20      , “/”的字符定位的位置为  3  。
4. 子串的定位运算称为串的模式匹配; 被匹配的主串    称为目标串,  子串  称为模式。
5. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第  6    次匹配成功。
6. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为  (n-m+1)*m  。
7.设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为  8950      。
答:不考虑0行0列,利用列优先公式,2048+(57*60+31)*2=8950
8.求下列广义表操作的结果:
(1) GetHead【((a,b),(c,d))】===  (a, b)      ;      //头元素不必加括号
(2) GetHead【GetTail【((a,b),(c,d))】】===  (c,d)    ;
(3) GetHead【GetTail【GetHead【((a,b),(c,d))】】】===  b  ;
(4) GetTail【GetHead【GetTail【((a,b),(c,d))】】】===  (d)      ;
1.由3个结点所构成的二叉树有  5  种形态。
2. 一棵深度为6的满二叉树有 n1+n2=0+ n2= n0-1=31  个分支结点和 26-1 =32  个叶子。 注:满二叉树没有度为1的结点,所以分支结点数就是二度结点数。
3.一棵具有257个结点的完全二叉树,它的深度为  9    。
( 注:用⎣ log2(n) ⎦+1= ⎣ 8.xx ⎦+1=9)
4. 设一棵完全二叉树有700个结点,则共有  350  个叶子结点。
5. 设一棵完全二叉树具有1000个结点,则此完全二叉树有 500  个叶子结点,有  499  个度为2的结点,有  1  个结点只有非空左子树,有  0    个结点只有非空右子树。
答:最快方法:用叶子数=[n/2]=500 ,n2=n0-1=499。 另外,最后一结点为2i属于左叶子,右叶子是空的,所以有1个非空左子树。完全二叉树的特点决定不可能有左空右不空的情况,所以非空右子树数=0.
6. 二叉树的基本组成部分是:根(N)、左子树(L)和右子树(R)。因而二叉树的遍历次序有六种。最常用的是三种:前序法(即按N L R次序),后序法(即按    L R N    次序)和中序法(也称对称序法,即按L N R次序)。这三种方法相互之间有关联。若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列必是      F E G H D C B        。  解:法1:先由已知条件画图,再后序遍历得到结果;
法2:不画图也能快速得出后序序列,只要到根的位置特征。由
前序先确定root,由中序先确定左子树。例如,前序遍历BEFCGDH中,
根结点在最前面,是B;则后序遍历中B一定在最后面。
法3:递归计算。如B在前序序列中第一,中序中在中间(可知左右
子树上有哪些元素),则在后序中必为最后。如法对B的左右子树同样
处理,则问题得解。
7.用5个权值{3, 2, 4, 5, 1}构造的哈夫曼(Huffman)树的带权路径长度是    33  。
解:先构造哈夫曼树,得到各叶子的路径长度之后便可求出WPL=(4+5+3)×2+(1+2)×3=33          (15)
(9)        (6)        (注:两个合并值先后不同会导致编码不同,即哈夫曼编码不唯一)  4      5  3        (3)      (注:合并值应排在叶子值之后)
1          2
1. 图有 邻接矩阵  、  邻接表  等存储结构,遍历图有 深度优先遍历  、 广度优先遍历  等方法。
2. 有向图G用邻接表矩阵存储,其第i行的所有元素之和等于顶点i的  出度  。
3.  n个顶点e条边的图,若采用邻接矩阵存储,则空间复杂度为  O(n2)    。
4.  n个顶点e条边的图,若采用邻接表存储,则空间复杂度为    O(n+e)    。
5. 设有一稀疏图G,则G采用  邻接表  存储较省空间。
6. 一个有n个顶点的无向图最多有 n(n-1)/2 条边。
7. 图的逆邻接表存储结构只适用于  有向  图。
8. 已知一个图的邻接矩阵表示,删除所有从第i个顶点出发的方法是将邻接矩阵的第i行全部置0。
9. 图的深度优先遍历序列  不是  唯一的。
10.  n个顶点e条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为  O(n2) ;若采 用邻接表存储时,该算法的时间复杂度为  O(n+e)    。
11. n个顶点e条边的图采用邻接矩阵存储,广度优先遍历算法的时间复杂度为  O(n2)    ;若 采用邻接表存储,该算法的时间复杂度为  O(n+e)    。
12. 图的BFS生成树的树高比DFS生成树的树高 小或相等    。
13. 若要求一个稀疏图G的最小生成树,最好用  克鲁斯卡尔(Kruskal)  算法来求解。
14. 若要求一个稠密图G的最小生成树,最好用  普里姆(Prim)  算法来求解。
15. 用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按路径长度  递增  的次序来得到最短路径的。
16. 拓扑排序算法是通过重复选择具有  0  个前驱顶点的过程来完成的。
第七章
1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是  顺序查(线性查)  。
2. 假设在有序线性表a[20]上进行折半查,则比较一次查成功的结点数为1;比较两次查成功的结点数为  2  ;比较四次查成功的结点数为  8  ;平均查长度为
3.7  。 解:显然,平均查长度=O(log2n)<5次(25)。但具体是多少次,则不应当按照公式 )1(log 12++=n n n ASL 来计算(即(21×log221)/20=
4.6次并不正确!)。因为这是在假设n=2h-1的情况下推导出来的公式。应当用穷举法罗列:
全部元素的查次数为=(1+2×2+4×3+8×4+5×5)=74; ASL=74/20=3.7
3. 在各种查方法中,平均查长度与结点个数n无关的查方法是  哈希查  。
1. 大多数排序算法都有两个基本的操作:  比较      和  移动    。
2. 在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记
录60插入到有序表时,为寻插入位置至少需比较 3 次。
3. 在插入和选择排序中,若初始数据基本正序,则选用插入;若初始数据基本反序,则选用 选择 。 正序时两种方法移动次数均为0,但比较次数量级不同,插入法:n-1即O(n),选择法:O(n2)
反序时两种方法比较次数量级相同,均为O(n2),但移动次数不同,插入法:O(n2),选择法:3(n-1)即O(n)
哈夫曼编码树的带权路径长度
4. 在堆排序和快速排序中,若初始记录接近正序或反序,则选用  堆排序  ;若初始记录基本无
序,则最好选用 快速排序  。
5. 对于n个记录的集合进行冒泡排序,在最坏的情况下所需要的时间复杂度是 O(n^2)  。若对其
进行快速排序,在最坏的情况下所需要的时间复杂度是  O(n^2)  。
6. 对于n个记录的集合进行归并排序,所需要的平均时间是  O(nlog2n)  ,所需要的附加空间
是  O(n)      。
7. 对于n个记录的表进行2路归并排序,整个归并排序需进行 ┌log2n┐    趟(遍)。
8. 设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列,则:
冒泡排序一趟扫描的结果是 H C Q P A M S R D F X Y ;
二路归并排序一趟扫描的结果是 H Q C Y A P M S D R F X;
快速排序一趟扫描的结果是 F H C D P A M Q R S Y X  ;
堆排序初始建堆的结果是 Y S X R P C M H Q D F A 。(大根堆)
9. 在堆排序、快速排序和归并排序中,
若只从存储空间考虑,则应首先选取 堆排序  方法,其次选取 快速排序方法,最后选取归并排序方法;
若只从排序结果的稳定性考虑,则应 选取归并排序方法;
若只从平均情况下最快考虑,则应选取快速排序方法;
若只从最坏情况下最快并且要节省内存考虑,则应选取堆排序方法。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。