2018年清华大学软件学院408计算机学科专业基础综合之数据结构考研强化五套模拟题
● 摘要
一、算法设计题
1. 借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key 的记录。设此组记录存放于数组
【答案】算法如下:
本句的有无不影响査找结果
2. 写出一趟快速排序算法。
【答案】算法如下:
一趟快速排序算法,枢轴记录到位,并返回其所在位置
3. 设有一个数组中存放了一个无序的关键序列
【答案】算法如下:
第 2 页,共 37 页
中。若查找成功,则输出该记录在r 数组中的位置及其值,否则显示“not
find ”信息。请编写出算法并简要说明算法思想。
。现要求将K n 放在将元素排序后
的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过n(注:用程序实现) 。
4. 设记录
的关键字为
。
,树结点
指向败者记录,
和1
为全胜以外,只
记录下标。写一算法产生对应上述用O(1)辅助空间。
【答案】算法如下:
的败者树,要求除
选得最小关键字记录后,沿从叶结点R[s]到根结点T[0]的路径调整败者树
是
指示新的胜者
到:_
小数
设置T 中" 败者" 的初值
依次从
出发调整败者
为完全二叉树T 的叶结点,本算法建立败者树
是与题中要求的关键字类型相同的机器最
的双亲结点
5. 设键盘输入n 个英语单词,输入格式为词个数,试编一程序,建立一个单向链表,实现:
(1)如果单词重复出现,则只在链表上保留一个。
其中n 表示随后输入英语单
(2)除满足(1)的要求外。链表结点还应有一个计数域,记录该单词重复出现的次数,然后输出出现次数最多的前k(k<=n) 个单词。
【答案】定义结点数据类型如下:
//频度域,记单词出现的次数
//maxsize是单词中可能含有的最多字母个数
(1)算法如下:
第 3 页,共 37 页
( )
//建立有n(n>0) 个单词的单向链表,若单词重复出现,则只在链表中保留一个
//申请头结点
//链表初始化
//建立n 个结点的链表
//a是与链表中结点数据域同等长度的字符数组
//p是工作指针,pre 是前驱指针
//单词重复出现,频度增
1
//指针后移
//该单词没出现过,应插入
//将新结点插入到链表最后
//结束for 循环
//结束creat 算法 (2)算法如下:
( )
//建立有n 个单词的单向链表,重复单词只在链表中保留一个,最后输出频度最高的k 个单词
//申请头结点
//链表初始化
//建立n 个结点的链表
//a是与链表中结点数据域同等长度的字符数组
//P是工作指针,pre 是前驱指针
//单词重复出现,频度增
1
//先将P 结点从链表上摘下,再按频度域值插入到合适位置
//将P 结点插入到合适位置
//指针后移
//该单词没出现过,应插入到链表最后
第 4 页,共 37 页
相关内容
相关标签