当前位置:文档之家› 数据结构 考研试题

数据结构 考研试题

for i:=1 to n do for j:=1 to I do for k:=1 to j do x:=x+1 (2) 画出对长度为8的有序表进行折半查找的判定树,并求其在等概率时查找成功的平均 查找长度。 (3) 已知一棵二叉树如右图,给出对这棵二叉树进行前序、中序、后序遍历的结果序列.
(4) 假设用于通讯的电文仅由 8 个字母组成,字母在电文中出现的频率分别为{2,3,5, 7,11,4,13,15},试为这 8 个字母设计哈夫曼编码. (5) 在地址空间为 0~15 的散列区中,对以下关键字序列构 G 造哈希表,关键字序列为 (Jan,Feb,Mar, Apr,May,Jun,Jul Aug,Sep,Oct,Nov,Dec),H(x)=[i/2] ,其中 i 为关键字中第一 字母在字母表中的序号。要求用线性探测开放定址法处理冲突,并求出在等概率情况下查找 成功的平均查找长度。 (6) 构造有 7 个元素组成的线性表一实例,是进行快速排序时比较次数最少的初始排序。 三、 写一算法,完成对这棵二叉树的左右子树的交换,设二叉树以二叉链表作存储结构。 [15 分] 四、 编写一非递归算法,对一棵二叉排序树实现中序遍历。[15 分] 五、 编写程序,完成下列功能:[15 分] 1. 读入整数序列,以整数 0 作为序列的结束标志(0 不作为序列元素),建立一个单链表。 2. 实现单链表原地逆转,即单链表中结点指针方向反转,反转操作不使用额外的链表结点, 可使用临时工作单元。 例:输入序列为:1,8,4,3,0
PROCEDURE hanoi(n:integer;x,y,z:char); begin if n=1 then move(x,1,z) else [hanoi(n-1,x,z,y);
move(x,n,z); hanoi(n-1,y,x,z)] end 请写出执行 hanoi(3,a,b,c)时递归过程的实在参量变化过程及 move 的搬动过程。 三、数学归纳法证明非空满 K 叉树的叶子结点数目为(K-1)N+1,其中 N 为分支结点数目。 (10分) 四、编写程序,判断一带头结点的双向链表是否对称,对称是指表中各元素满足 ai=an-i+1 结点结构为如下:(10分) next
写出程序输出结果,说明为什么 T 的树出结果不同。 2. 有过程定义如下: PROCEDURE PRIT(N:INTEGER); BEGIN VAR N1:INTEGER; N1:=TRUNC(N/10);{TRUNC(x)表示取 x 的整数部分} S:=S*10+(N MOD 10); IF N1<>0 THEN PRIT(N1); WRITELN(N MOD 10) END; 问:置 S 初值为0,用 PRIT(12345)调用此过程,写出打印结果;当执行完此次调用 后,S 值是多少?
1. 一棵树采用孩子-兄弟方式存放,结点结构为
fc da ns le h ta ib ve
l
其中 fch 表示指向第一个孩子,nisib 表示指向下一个兄弟, level 表示结点层 次。
设根结点层次为1,其它以此类推,编写一算法,将树中所有结点层 次值置入相应 level 域。[10分]
六、以顺序存储结构表示串,设计算法,求串 S 中出现的第一个最长重
dada
prior
五、有一个由英文书目构成的文件(书名不定长度,以“;”为分割符);读入该文件,分)
六、二叉树按链表方式存放,且树中结点的关键字均不同。写一个判别给定二叉树是否为 二叉排序树的非递归算法。(10分)
写一个算法,确定一个 N 个顶点的无向图是否包含回路,此算法的时间代价应为 O(N)(10 分)
1) 算法的定义和特性 2) 抽象数据类型 3) 广义表与字符串属于线性表的理由 4) 封装 5) 排序算法的稳定性 6) 结构化程序设计 二、写出要求结果:(30分) 1.已知一二叉树中序序列为 DBGEAFC,后序序列为 DGEBFCA,给出其对应的二叉树。 2.给定权值{8,12,4,5,26,16,9},构造一棵带权路径长度最短的二叉树,并计 算其带权路径长度。 1. 有一线性表,要求重新排列,使所有的正数均在非正数之前,要求用最小交换次数 实现,你认为应采用什么方法? 4.只想得到 N 个元素序列中第 K 个最大元素之前的部分递减有序序列(K<<N),列出3 种速度快的方法名称与原因。 5 . 在 地 址 空 间 为 0~12 的 散 列 区 中 , 对 以 下 关 键 字 序 列 建 哈 希 表 : (Jan,Feb,Apr,May,Jun,Jul,Aug,Sep,Oct)。用线性探测法处理冲突,求出在等概率的情况 下查找成功与不成功的平均查找长度。 6.下面给出求 N 价 hanoi 塔的过程:
[注]:编写程序可选用盘 Pascal 或 C 语言,算法描述可选用类语言,必要时加上注释
一、简答下列问题: 1. 结构化程序设计 2. 参数传递的常用方式及含义 3. 数据类型 4. 几种基本数据结构的名称及特征 5. 算法定义与性质 6.
二、写出要求结果 1. PROGRAM PF(OUTPUT); VER T,M:INTEGER; FUNCTION F(N:INTEGER):INTEGER; BEGIN M:=N+M;F:=M END BEGIN M:=10;T:=(M+1)*F(10);WRITELN(T); M:=10;T:=F(10)*(M+1); WRITELN(T); M:=10;T:=M*F(10)+F(10); WRITELN(T); END.
三、编写一程序,要求打印以下的杨辉三角形(n 可设为10) [10分]
for i:=1 to n do for j:=1 to I do for k:=1 to j do x:=x+1 (2) 画出对长度为8的有序表进行折半查找的判定树,并求其在等概率时查找成功的平均 查找长度。 (3) 已知一棵二叉树如右图,给出对这棵二叉树进行前序、中序、后序遍历的结果序列.
(4) 假设用于通讯的电文仅由 8 个字母组成,字母在电文中出现的频率分别为{2,3,5, 7,11,4,13,15},试为这 8 个字母设计哈夫曼编码. (5) 在地址空间为 0~15 的散列区中,对以下关键字序列构 G 造哈希表,关键字序列为 (Jan,Feb,Mar, Apr,May,Jun,Jul Aug,Sep,Oct,Nov,Dec),H(x)=[i/2] ,其中 i 为关键字中第一 字母在字母表中的序号。要求用线性探测开放定址法处理冲突,并求出在等概率情况下查找 成功的平均查找长度。 (6) 构造有 7 个元素组成的线性表一实例,是进行快速排序时比较次数最少的初始排序。 三、 写一算法,完成对这棵二叉树的左右子树的交换,设二叉树以二叉链表作存储结构。 [15 分] 四、 编写一非递归算法,对一棵二叉排序树实现中序遍历。[15 分] 五、 编写程序,完成下列功能:[15 分] 1. 读入整数序列,以整数 0 作为序列的结束标志(0 不作为序列元素),建立一个单链表。 2. 实现单链表原地逆转,即单链表中结点指针方向反转,反转操作不使用额外的链表结点, 可使用临时工作单元。 例:输入序列为:1,8,4,3,0
3.
给定一组权值(7,18,3,32,5,26,12,8),构造
一棵哈夫曼树,并计算带权路径长度。 4. 将树转换成二叉树 5. 对给定以下关键字序列(Jan,Feb,Mar,Apr,May,
Jun,Jul,Aug),哈希函数 H(Key)为 Key 的第一字母 表中序号 MOD 7,采用线性探测再散列方法处理冲突, 要求:①构造一个装填因子为0.8的哈希表 ②求出等概率情况下查找成功与查找不成功的平均查找长度 6. 在 m 行 n 列的稀疏矩阵中,有七个非零元素,若用十字链 表表示,共需要多少个结点?
4.说明在图的遍历中,设置访问标志数组的作用。
5.在一个连通无向图上,欲求从一点 VI 到另一点 VJ(VI≠VJ)所经结点数目最少 的路径,在深度优先搜索、广度优先搜索、从一点到其余各顶点的最短路径或图 的其它算法中,你认为最好选择那种方法为基础,简述原因。
三、构造结果 [25分]
1. 二叉树按二叉链表方式存放,其中的 data 域为 char 类型,已 有按前序方式构造二叉树的算法,若输入序列为 AB□CD□□ED□G□□□,请给 出构造的相应二叉树。
六、 给出有向图 G 的邻接表表示。找出其一棵最小生成树。[11 分]
[注] 编写程序可选用 PASCAL 或 C 语言 算法描述采用类语言,应加上必要的注释 所有答案均要求写在答题纸上
一、 回答问题 [15分]
1.结构化程序设计 2.面向对象开发方法与面向过程开发方法的不同之处 3.数据类型含义与作用 4.稳定排序与不稳定排序
[注]:编写程序可选用任一种高语言,算法描述可采用类语言,必要时加上注释 一、 回答下列问题:[20分] 1、 算法的定义和性质 2、 为什么说数组与广义表是线性表的推广? 3、 什么是结构化程序设计? 4、 哈希方法的基本思想 5、 给出一不稳定排序方法名称与实例 二、 构造结果:[24分] (1) 确定 x:=x+1语句在下面程序段中的频率,要求写出分析过程。
2.已知 Ackerman 函数定义如下:
n+1 当 m=0时 akm(m,n) = akm(m-1,1) 当 m≠0,n=0时
akm(m-1, akm(m,n-1)) 当 m≠0,n≠0时
写出 akm(2,1)时调用时变化过程与执行结果。
3. 对于正整数 A、B,说明下面程序段定义了什么函数功能,要求重写程序段, 使之完成原函数功能,且执行时间仅可能短。 Unsigned int f(a,b) int a,b; {if (a*b==0) return (a+b) else return(f(b-(b/a)*a,a); (注:b/a 相当整除) } 4. 写出在中序线索树 BT 中找结点 X 的后继结点的函数过程。
相关主题