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

2018年河北师范大学信息技术学院833数据结构考研基础五套测试题

  摘要

一、算法设计题

1. 辅助地址表的排序是不改变结点物理位置的排序。辅助地址表实际上是一组指针,用它来指出结点排序后的逻辑顺序地址。设

表示辅助地址表。初始时

减序) 算法的语句序列。

【答案】算法如下:

一趟排序无交换发生,结束

表示n 个结点的值,用

,在排序中,凡需对结点交换就用它的地址

来进行。例如当n=3时,对K(31,11,19) 则有T(2,3,1) 。试编写实现辅助地址表排序(按非递

2. 已知两个链表A 和B 分别表示两个集合,其元素递增排列。编一函数,求A 与B 的交集,并存放于A 链表中。

【答案】算法如下:

//设工作指针pa 和pb ;

//结果表中当前合并结点的前驱的指针

//交集并入结果表中

//释放结点空

//释放结点空间

//释放结点空间

//置链表尾标记

//注:本算法中也可对B 表不作释放空间的处理

3. 已知L 为没有头结点的的单链表中第一个结点的指针,每个结点数据域存放一个字符,该字符可能是英文字母字符、数字字符或其他字符,编写算法构造三个以带头结点的单循环链表表示的线性表,使每个表中只含同一类字符(要求用最少的时间和最少的空间) 。

【答案】算法如下:

L 是不带头结点的单链表第一个结点的指针,链表中的数据域存放字符

//本算法将链表L 分解成含有英文字母字符、数字字符和其他幸符的带头结点的三个循环链表

//建立三个链表的头结点

//置三个循环链表为空表

//分解原链表

//L指向待处理结点的后继

//处理字母字符

//处理数字字符

//处理其他符号

//结束while(L!=

null) //算法结束

4. (1)试分别找出满足下列条件的所有二叉树:(a)前序序列和中序序列相同:(b)前序序列和后序序列相同;(c)中序序列和后序序列相同。

(2)已知非空二叉树的结点结构为(lchild,data , rchild) ,设计算法:从右向左依次将所有叶子的数据值放到向量(假定向量的空间大于叶子的总个数) 中。

【答案】(1)满足条件的二叉树如下:

(a)若前序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树。 (b)若前序序列与后序序列相同,则或为空树,或为只有根结点的二叉树。

(c)若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树。 (2)算法如下:

全局变量

从右向左依次将二叉树bt 的所有叶子的数据值放到a 向量中 .

中序遍历右子树

叶结点

中序遍历左子树

5. 设线性表存于A[l..size]的前mun 各分量中,且递增有序。请设计一个算法,将x 插入到线性表的适当位置上,以保持线性表的有序性,并在设计前说明设计思想,最后说明所设计算法的时间复杂度。

【答案】算法如下:

//A是Size 个元素空间但目前仅有num(num<size}个元素的线性表 //本算法将元素x 插入到线性表中,并保持线性表的有序性

//题目要求下标从1开始

//对分査找元素x 的插入位置

//元素后移

//将元素x 插人

算法结束

设计思想:算法中当查找失败(即线性表中无元素X) 时,变量low 在变量high 的右面(low=high +l) 。移动元素从位置low 开始,直到num 为止。

时间复杂度:查找的复杂度为O (logn),插入的时间复杂度为O (n),若用顺序查找,则查找的时间复杂度亦为O(n)。

二、应用题