数据结构期末考试试题总结
文章目录
第1章 第一单元课程介绍; 数据结构第1~2章
1:在双向循环链表中,在q指针所指的结点后插入p所指向的新结点,其修改指针的操作是( )
(4.0分)
解:
p->prior=q; p->next=q->next; q->next->prior=p; q->next=p;
解:在改变原链表之前,将p指针(插入指针)连接好,再去把p的next的prior指向q;再把p的next指向q,主要是不能丢失p原有的next节点;
![a14FSS.png](https://i-blog.csdnimg.cn/blog_migrate/2fcd5cb9216bc1980f026663816d3055.png)
解:
顺序结构中,第n个元素的地址为An=A0+(n-1)*L (A为地址,L为元素长度)。
A6=200+(6-1)*2=210
第2章 第二单元第3章栈和队列
1.0中缀表达式为( A + B ) × C – D / E,则其后缀表达式为何?
1.先用括号将优先顺序分出来
(((A+B)xC)-(D/E))
2.将运算符取代右边最近之右括号
(1) (((A+BXC)-(DE/)
(2) (((ABXC+DE/-
3.把左括号全部拿掉,即为所得。
ABxC+DE/-
2.0中缀表达式为A+B×C-D,则其前缀表达式为何?
- 先用括号将优先顺序分出来
((A+(BxC))-D)
-
将运算符取代左边最近之左括号
((A+xBC))-D)
(+AxBC))-D)
\-+AxBC))D)
- 把右括号全部拿掉,即为所得。
-+AxBCD
-
后缀表达式为2 5 + 4 × 6 3 / -,则其后缀式求值结果为何?
答案:26
处理句元 | 处理动作 | 操作数栈 |
---|---|---|
2 | push(2) | push(2) |
5 | push(3) | push(5) push(2) |
+ | 作两次Pop,先Pop出来的5为第二操作数,后Pop出来的2为第一操作数,执行5+2=7,设为X,Push(X) | push(7) |
4 | push(4) | push(4) push(7) |
x | 作两次Pop,先Pop出来的4为第二操作数,后Pop出来的7为第一操作数,执行4x7=28,设为Y,Push(Y) | push(28) |
6 | push(6) | push(6) push(28) |
3 | push(3) | push(3) push(6) push(28) |
/ | 作两次Pop,先Pop出来的3为第二操作数,后Pop出来的6为第一操作数,执行6/3=2,设为Z,Push(Z) | push(2) push(28) |
- | 作两次Pop,先Pop出来的2为第二操作数,后Pop出来的28为第一操作数,执行28-2=26,Push(26) | 26 |
第3章 第三单元第4章 串、数组、广义表
1.0串“abcaabbabcab”的next数组为( )。(5.0分)
B、011122312345
j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
模式串 | a | b | c | a | a | b | b | a | b | c | a | b |
next[j] | 0 | 1 | 1 | 1 | 2 | 2 | 3 | 1 | 2 | 3 | 4 | 5 |
口诀: next[j]=前同数+1(即串起始下标值)
(前同数:在j-1位置之前,字首==字尾的字数)
解:j=1,时next[j]=0;
j=2时候,其他情况next[j]=1;j=3时候,其他情况;j=4,其他情况;j=5,前同数+1=2……以此类推。
2.0串“abcaabbabcab”的nextval为( )。(5.0分)
C、011021301105
j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
模式串 | a | b | c | a | a | b | b | a | b | c | a | b |
next[j] | 0 | 1 | 1 | 1 | 2 | 2 | 3 | 1 | 2 | 3 | 4 | 5 |
nextval[j] | 0 | 1 | 1 | 0 | 2 | 1 | 3 | 0 | 1 | 1 | 0 | 5 |
解答:(1)第一位nextval必为0,第二位的字符如何和第一位相等,则为0,不同则为1
(2)第三位next值为1,与第一位比较,不同nextval= next=1;
(3)第四位next值为1,与第一位比较,相同则第四位nextval=第一位nextval=0
(4)第五位next值为2,与第二位比较,不同则nextval= next=2;
(5)第六位next值为2,则与第二位比较,相同则第二位next=1,第二位继续与第一位比较,不同,则nextval[6]=1
(6)第七位next值为3,则与第三位比较,不同nextval=next=3;
(7)第八位next值为1,与第一位比较,相同,nextval=next=0;
(8)第九位next值为2,则与第二位比较,相同,第二位next=1,则第二位继续与第一位比较,不同,则nextval【9】=
next【2】
(9)第十位next值为3,则与第三位比较,相同next[3]=1,则第三位next继续与第一位比较不同,则nextval[10]=1;
(10)第十一位next值为4,则与第四位比较,相同则第四位next=1,第四与第一比较,相同,则nextval[11]=
next[0]
(11)第十二位next值为5,与第五位比较,不同则nextval= next=5
第4章 第四单元第5章树和二叉树
1.0设某棵二叉树的中序遍历序列为BDCAEHGIF,后序遍历序列为DCBHIGFEA,则先序遍历该二叉树得到序列为( )。
我们知道先序遍历的特点:根->左->右,中序遍历的特点:左->根->右;后序遍历:左->右->根;
可以使用后序找出根,再由中序找出左右孩子;
(1) | 后序:DCBHIGFEA 中序:BDCAEHGIF | 可以分出树的根A |
---|---|---|
(2) | 后序:DCB 中序:BDC | 左子树根为B 可以画出左子树 |
(3) | 1)后序:HIGFE 中序:EHGIF 2)后序:HIGF 中序: HGIF 3)后序:HIG 中序: HGI | 画出右子树 |
![a14PW8.png](https://i-blog.csdnimg.cn/blog_migrate/07d77944c24a91ad0ecfeb2f7a52a70f.png)
所以先序遍历为:ABCDEFGHI
2.0设在一棵度数为3的树中,度数为3的结点数有2个,度数为2的结点数有1个,度数为1的结点数有2个,那么叶结点数有( )个。
解: 度以3的树,只存在四种度数的节点(0,1,2,3)度
总度数和=节点个数-1(通用公式)
则依题意共有:32+21+1*2=10(度),则共有11个节点,再减去(1,2,3)度的节点数:11-2-1-2=6个度为0的节点
第5章 第五单元第5章树和二叉树
1.0 假设用于通信的电文仅由abcdef(6种字母)组成,字母abcdef在电文中出现的频率分别为0.45,0.13,0.12,0.16,0.09,0.05。试问在哈夫曼编码后,其带权路径长度WPL=?
解:
字母 | a | b | c | d | e | f |
---|---|---|---|---|---|---|
频率 | 0.45 | 0.13 | 0.12 | 0.16 | 0.09 | 0.05 |
45 | 13 | 12 | 16 | 9 | 5 |
把频率乘100
WPL=(451+253+163+144)=244
244/100=2.44
2.0设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有(
)个。
-
设终端结点数为f,总结点数 f + n。每个结点有两个指针,总指针数 2(f + n)
-
二叉树B除去根结点,都是某个结点的孩子, 也就是其余每个结点都有指针指向,
占用指针数为 f + n - 1; -
剩余空指针数为 2(f + n)- (f + n - 1)= f + n + 1 个
-
f 个终端结点没有孩子, 所以空的左指针域数为f 个;
-
二叉树B 中右指针域为空的结点有 ( f + n + 1 ) - f = n + 1;
第6章 第六单元第6章 图
1.0已知图的邻接表如图
![a14AyQ.png](https://i-blog.csdnimg.cn/blog_migrate/bb77c00dbb830e133db71495c7179b9a.png)
所示,则从顶点v0出发按广度优先遍历的结果是( )。
解答:图的广度优先遍历就类似于树的层序遍历。
0 | 1 | 2 | 3 |
---|---|---|---|
0 |
接着访问V1
0 | 1 | 2 | 3 |
---|---|---|---|
0 | 1 |
访问V2
0 | 1 | 2 | 3 |
---|---|---|---|
0 | 1 | 2 |
访问V3
0 | 1 | 2 | 3 |
---|---|---|---|
0 | 1 | 2 | 3 |
2.0在背包问题中,假设有5个不可分解的物品,其各物品之(价值,重量)分别为(20,10)、(30,20)、(66,30)、(40,40)、(60,50),背包限重90,若以重量之贪婪算法来解,则所获得之最大利益为
( )。
解:
重量W | 10 | 20 | 30 | 40 | 50 |
---|---|---|---|---|---|
价值V | 20 | 30 | 66 | 40 | 60 |
贪婪策略的选择问题。对于本题,常见的贪婪策略有三种.
1.根据物品价值选择,每次都选价值最高的物品
2.根据物品重量选择,每次都选择重量最轻的物品
3.定义一个价值密度的概念,每次选择都选择价值密度最高的物品.
最大利益=20+30+66=116
第7章 第七单元第6章 图的应用
![a14uF0.png](https://i-blog.csdnimg.cn/blog_migrate/943241451522b6ccb023369eca3c8a10.png)
所示的AOE-网,此工程最早完成时间为( 31 )。
2.0所示的AOE-网,此关键路径为( v0→v2→v3→v4→v7→v9 )。
事件的最早发生时间和最迟发生时间
事件(定点) | 最早完成时间Ve(i) | 最晚发生时间Vl(i) |
---|---|---|
v0 | 0 | 0 |
v1 | 5 | 10 |
v2 | 7 | 7 |
v3 | 13 | 13 |
v4 | 17 | 17 |
v5 | 18 | 19 |
v6 | 23 | 25 |
v7 | 25 | 25 |
v8 | 26 | 27 |
v9 | 31 | 31 |
计算各个活动ai的最早开始时间e(i) ;各个活动ai的最晚开始时间l(i) ;
活动ai | e(i) | l(i) | l(i)- e(i) |
---|---|---|---|
a1 | 0 | 5 | |
a2 | 0 | 0 | 0 |
a3 | 5 | 10 | |
a4 | 7 | 7 | 0 |
a5 | 7 | 14 | |
a6 | 13 | 13 | 0 |
a7 | 13 | 14 | |
a8 | 13 | 21 | |
a9 | 17 | 19 | |
a10 | 17 | 17 | 0 |
a11 | 18 | 19 | |
a12 | 23 | 25 | |
a13 | 23 | 26 | |
a14 | 25 | 25 | 0 |
a15 | 26 | 27 |
第8章 第八单元第7章 查找
1.0设哈希表长为14,哈希函数是H(key)=key%11,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为49的元素加到表中,用二次探测法解决冲突,则放入的位置是( )。(5.0分)
二次再散列法是用来解决哈希冲突的,二次再散列法包括"开放地址法"和"开链法"。开放地址法又包括:线性探测法和二次探测法, 二次探测法:与线性探测法类似,只不过每次寻找的是当前寻找位置的前后第n²个位置。
拿这个题来说:通过哈希函数H(key)=key%14构造哈希表:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
15 | 38 | 61 | 84 |
H(49)=49%11=5
设寻找的位置下标为:loc
第一次寻找:loc = 5+1²=6; 下标为6的位置已经有元素,所以继续寻找;
第二次寻找:loc=5-1²=4;下标为4的位置已经有元素,所以继续寻找;
第三次寻找:loc=5+2²=9,下标为9的位置没有元素,所以给该元素放到这个位置。寻找结束。
2.0 设哈希函数H(K)= K mod 11,哈希地址空间为0~10,对关键字序列(33,13,47,22,38,23,6,57),按线性探测法解决冲突的方法构造哈希表,查找成功时平均查找长度为(17/8 )。
解:(33,13,47,22,38,23,6,57)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
33 | 22 | 13 | 47 | 23 | 38 | 6 | 57 |
1 | 2 | 1 | 1 | 4 | 1 | 1 | 6 |
计算H(K)= K mod 11
H(33)=0
H(13)=2
H(47)=3
H(22)=0冲突;H(22+1)=1;
H(38)=5
H(23)=1冲突;H(23+1)=2冲突;H(23+2)=3冲突;H(23+3)=4;
H(6)=6
H(57)=2冲突;H(57+1)=3冲突; H(57+2)=4冲突; H(57+3)=5冲突; H(57+4)=6冲突; H(57+5)=7冲突;
,查找成功时平均查找长度为(1*5+2+4+6 )/8=17/8
第9章 第九单元第8章 排序
1.0设待排序的关键字(a1~ a10)序列为{12,2,16,30,28,10,16*,20,6,18},a0为”枢轴”暂存位置,则利用快速排序的方法,以第一个记录a1基准(枢轴)得到的一次划分结果(a1~ a10)为( )。(5.0分)
6 2 10 12 28 30 16* 20 16 18
解:初始序列:
![a14ELj.png](https://i-blog.csdnimg.cn/blog_migrate/c7c6a62a671a8e47345fa0a8719816a7.png)
以a1为基准,进行划分
2.0 设待排序的关键字(a1~ a10)序列为{12,2,16,30,28,10,16*,20,6,18},a0为”交換”暂存位置,解:
![a14moq.png](https://i-blog.csdnimg.cn/blog_migrate/791eedf0000d31056c1e6e366cd5b3b1.png)
等到:
第10章 第十单元第第8章 排序
1.0 T(n)= 8T(n/2) +O(n2),根据主(Master)定理,T(n)=( )。
![a14KYV.png](https://i-blog.csdnimg.cn/blog_migrate/d6edcb574a8c2375b5eca0f4e84c51a6.png)
a=8,b=2,k=2
23<22
T(n)=O(n3)
2.0若一组记录的排序码为(30,60,8,40,70,12,10),则利用自底向上构造堆排序的方法,其建立的初始堆为( )。
第11章 第十一单元第8章 排序
1.0假设有一个含10,000个记录的磁盘文件,而当前所用的计算机一次只能对1,000个记录进行内部排序,设采用2-路归并,每次读或写“数据块”大小为200,则总访问外存的次数为(
)。
解:进行2-路归并(即两两归并),则
第一趟由10个归并段得到5个归并段;
第二趟由 5 个归并段得到3个归并段;
第三趟由 3 个归并段得到2个归并段;
最后一趟归并得到整个记录的有序序列。
分析上述外排过程中访问外存(对外存进行读/写)的次数:
假设“数据块”的大小为200,即每一次访问外存可以读/写200个记录。
则对于10,000个记录,处理一遍需访问外存100次(读和写各50次)。
由此,对上述例子而言,
1. 求得10个初始归并段需访问外存100次;
2. 每进行一趟归并需访问外存100次;
3. 总计访问外存 100 + 4*100 = 500次。
2.0设待排序的关键字(a1~
a10)序列为{12,2,16,30,28,10,16*,20,6,18},a0为”交換”暂存位置,则利用二路归并排序的方法,以第二回合(pass)后得到的划分结果(a1~
a10)为( )。
2 12 16 30 10 16* 20 28 6 18
解:
初始关键字:12,2,16,30,28,10,16*,20,6,18
第一回合:(2 12)(16 30)(10 28)(16* 20)(6 18)
第二回合(2 12 16 30)(10 16* 20 28)(6 18)