当前位置:问答库>考研试题

2018年清华大学计算机科学与技术系408计算机学科专业基础综合之数据结构考研核心题库

  摘要

一、算法设计题

1. 借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key 的记录。设此组记录存放于数组

【答案】算法如下:

本句的有无不影响査找结果

2. 编写程序,统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A 〜Z 这26个字母和0〜9这10个数字) 。

【答案】算法如下:

( )

//统计输入字符串中数字字符和字母字符的个数

//初始化

//’#’表示输入字符串结束

'//数字字符

//字母字符

//输出数字字符的个数

("数字%d 的个数=

//求出字母字符的个数

("字母字符%c 的个数=

//算法结束。

中。若查找成功,则输出该记录在r 数组中的位置及其值,否则显示“not

find ”信息。请编写出算法并简要说明算法思想。

) ;

) ;

3. 有n 个记录存储在带头结点的双向链表中,现用双向起泡排序法对其按上升序进行排序,请写出这种排序的算法(注:双向起泡排序即相邻两趟排序向相反方向起泡) 。

【答案】算法如下:

对存储在带头结点的双向链表head 中的元素进行双向起泡排序

设标记

双向链表尾,算法过程中是向上起泡的开始结点

是工作指针,指向当前结点

假定本趟无交换

向下(右) 起泡,一趟有一个最大元素沉底

交换两结点指针,涉及6条链

有交换

先将结点从链表上摘下

将temp 插到p 结点前

无交换,指针后移

准备向上起泡

向上(左) 起泡,一趟有一个最小元素冒

交换两结点指针,涉及6条链

有交换

先将temp 结点从链表上摘

将temp 插到p 结点后(右

)

无交换,指针前移

准备向下起泡

算法结束

4. 已知两个线性表A , B 均以带头结点的单链表作存储结构,且表中元素按值递增有序排列。设计算法求出A 与B 的交集C ,要求C 另开辟存储空间。,并同样以元素值的递增有序的单链表形式存储。

【答案】算法如下:

//线性表A 和B 以带头结点的单链表作为存储结构。本算法求A 和B 的交集C , C 另辟空间

//pa、pb 是两链表的工作指针

//监视哨

//pa指针后移

//pb指针后移

//处理交集元素

//删除重复元素

//交集元素并入结果表

//置结果链表尾

5. 编写算法打印出由指针Hm 指向总表头的以十字链表形式存储的稀疏矩阵中每一行的非零元的个数。注意:行、列及总表头结点的形式为:

它们已用val 域链接成循环链表。非零元的结点形式也同上,每一行(列) 的非零元由right(down)域把它们链接成循环链表,该行(列) 的表头结点即为该行(列) 循环链表的表头。

【答案】算法如下:

//输出由Hm 指向的十字链表中每一行的非零元素个数

//数组A 记各行非零元个数,i 记行号

//循环完各行列表头

//P是稀疏矩阵行内工作指针,num 记该行非零个

//完成行内非零元的查找