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

2018年大连理工大学管理与经济学部408计算机学科专业基础综合之数据结构考研仿真模拟五套题

  摘要

一、算法设计题

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

【答案】算法如下:

( )

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

//初始化

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

'//数字字符

//字母字符

//输出数字字符的个数

("数字%d 的个数=

//求出字母字符的个数

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

//算法结束。

2. 请用流程图或高级语言表示算法。已知有向图有n 个顶点,请写算法,根据用户输入的数对建立该有向图的邻接表。即接受用户输入的

(以其中之一为0标志结束) ,对于每条这样的

边,申请一个结点,并插入到的单链表中,如此反复,直到将图中所有边处理完毕。

提示:先产生邻接表的n 个头结点(其结点数值域从1到n) 。 【答案】算法如下:

建立有向图的邻接表存储结构

题目要求两顶点之一为0表示结束

第 2 页,共 37 页

) ;

) ;

输入顶点信息

3. 已知一棵高度为K 具有n 个结点的二叉树,按顺序方式存储。

(1)编写用前序遍历树中每个结点的非递归算法;

(2)编写将树中最大序号叶结点的祖先结点全部打印输出的算法。 【答案】(1)算法如下:

全局变量

递妇遍历以顺序方式存储的二叉树bt ,i 是根结点下标(初始调用时为

1)

是桟s 的栈顶指针,栈容量足够大

访问根结点,设虚结点

以0表示

右子女的下标位置入

沿左子女向下

取出栈顶元素

结束

(2)算法如下:

打印最大序号叶结点的全部袓先

找最大序号叶结点,该结点存储时在最后

的双亲结点

f

从结点c 的双亲结点直到根结点,

路径上所有结点均为祖先结点

逆序输出,最老的祖先最后输出

结束

4. 给定(已生成) 一个带表头结点的单链表,设head 为头指针,结点的结构为(data,next) ,data 为整型元素,next 为指针,试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间(要求:不允许使用数组作辅助空间) 。

【答案】算法如下:

//head是带头结点的单链表的头指针

//本算法按递增顺序输出单链表各结点的值,并释放结点所占的存储空间

第 3 页,共 37 页

//循环到仅剩头结点

//pre为元素最小值结点的前驱结点的指针

//P为工作指针

//记住当前最小值结点的前驱

//输出元素最小值结点的数据

//删除元素值最小的结点,释放结点

空间

//释放头结点

5. 假设以双亲表示法作树的存储结构,写出双亲表示的类型说明,并编写求给定的树的深度的算法(注:已知树中的结点数) 。

【答案】算法如下:

求以双亲表示法作为存储结构的树的深度

深度加1, 并取新的双亲

最大深度更新

返回树的深度

’结束Depth

二、应用题

6. 假设以S 和X 分别表示入栈和出栈操作,则对初态和终态均为空的栈操作可由S 和X 生成的序列表示(如SXSX) 。

(1)试指出判别给定序列是否合法的一般规则;

(2)两个不同合法序列(对同一输入序列) 能否得到相同的输出元素序列? 如能得到,请举列说明。

【答案】(1)通常有两条规则。第一是给定序列中S 的个数和X 的个数相等;第二是从给定序列的开始,到给定序列中的任一位置,S 的个数要大于或等于X 的个数。

(2)可以得到相同的输出元素序列。例如,输入元素为A ,B ,C ,则两个输入的合法序列ABC 和BAC 均可得到输出元素序列ABC 。对于合法序列ABC ,使用SXSXSX 操作序列;对于合法序列BAC ,使用SSXXSX 操作序列。

第 4 页,共 37 页