2018年北京师范大学系统科学学院408计算机学科专业基础综合之数据结构考研核心题库
● 摘要
一、算法设计题
1. 设单链表的表头指针为h ,结点结构由data 和next 两个域构成,其中data 域为字符型。写出算法dc(h,n) ,判断该链表的前n 个字符是否中心对称。例如xyx ,xyyx 都是中心对称。
【答案】算法如下:
//h是带头结点的n 个字符元素的单链表,本算法判断链表是否中心对称
//i记下结点个数,s 是字符栈
//P是链表的工作指针,指向待处理的当前元素
//链表前一半元素入栈
//恢复最后的i 值
//若n 是奇数,后移过中心结点
//测试
是否中心对称
//链表中心对称
//链表不中心对称
//算法结束
2. 己知L 为链表的头结点地址,表中共有m(m>3) 个结点,从表中第i 个结点(l<i <m) 起到第m 个结点构成一个循环部分链表,设计将这部分循环链表中所有结点顺序完全倒置的算法。
【答案】算法如下:
//L是有m 个结点的链表的头结点的指针。表中从第个结点到第m 个结点构成循环部分链表//本算法将这部分循环链表倒置
//p是工作指针,初始指向第二结点(已假定i >
l) //pre是前驱结点指针,最终指向第i ﹣i 个结点
//计数器
//查找第i 个结点
//査找结束,P 指向第i 个结点
//暂存第i 个结点的指针
//p指向第i +l 个结点,准备逆置
//上面while 循环结束时,j =i ﹣1现从第i +1结点开始逆置
//暂存P 的后继结点
+
//逆置P 结点
//P恢复为当前待逆置结点
//计数器增
1
//将原第i 个结点的后继指针指向原第m 个结点
3. 设有顺序放置的n 个桶,每个桶中装有一粒砾石,每粒砾石的颜色是红、白、蓝之一。要求重新安排这些砾石,使得所有红色砾石在前,所有白色砾石居中,所有蓝色砾石居后。重新安排时,对每粒砾石的颜色只能察看一次,并且只允许交换操作来调整砾石的位置。
【答案】算法如下:
r 为含有n 个元素的线性表,元素是具有红、白和蓝色的砾石,用顺序存储结构存储
本算法对其排序,使所有红色栎石在前,白色居中,蓝色在最后
当前元素是红色
当前元素是白色
当前元素是蓝色
4. 设要求按
是一个记录构成的数组,
是一个整数数组,其值介于1〜100之间,现
的内容调整A 中记录的次序,比如当B[l]=ll 时,则要求将A[l]的内容调整到A[ll]
中去。规定可使用的附加空间为O(1)。
【答案】算法如下:
//A是100个记录的数组,B 是整型数组,本算法利用数组B 对A 进行计数排序
//若B[i]=i 则A[i]正好在自己的位置上,则不需要调整
//B[j]和B[k]交换
//r0是数组A 的元素类型,A[j]和A[k]
交换
//完成了一个小循环,第i 个已经安排好
//算法结束
5. 二路插入排序是将待排关键字序列二路插入。编写实现2-路插入排序算法。
【答案】算法如下:
二路插入排序的算法
辅助存储
插人后部
折半査找插入位置
移动元素
插入有序位置
插入前部
移动元素
将序列复制回去
中关键字分二路分别按序插入到辅助向量
前半部和后半部(注.. 向量d 可视为循环表) ,其原则为,先将r[1]赋给d[1],再从r[2]记录开始分