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

2018年郑州大学产业技术研究院408计算机学科专业基础综合之数据结构考研基础五套测试题

  摘要

一、算法设计题

1. 输入一个字符串,内有数字和非数字字符,如:akl23x4561796073029ef4563。将其中连续的数字作为一个整体,依次存放到一数组a 中,例如123放入a[0],456放入a[l],...... 。编程统计其共有多少个整数,并输出这些数。

【答案】算法如下:

( )

//从键盘输入字符串,连续的数字字符算作一个整数,统计其中整数的个数

//整数存储到数组a ,i 记整数个数

//从左到右读入字符串

//'#'是字符串结束标记

//是数字字符

//数初始化

//拼数

//若拼数中输入了’#’,则不再输入

//输入非数字且非#时,继续输入字符

("共有

个整数,它们是:

)

//每10个数输出在一行上

//算法结束

2. 已知P 是指向单向循环链表最后一个结点的指针,试编写只包含一个循环的算法,将线性表(

) 改造为(

【答案】算法如下:

//本算法将线性表

改造为

第 2 页,共 31 页

) 。

//q指向a 1结点

//r记住a l 结点的指

//先将a 1结点放到正确位置

//从a 2结点开始

//暂存后继

//对称放置

//恢复待处理结点

3. 设稀疏矩阵中有t 个非零元素,用三元组顺序表的方式存储。请设计一个算法,计算矩阵M 的转置矩阵N ,要求转置算法的时间复杂度为0(n+t) 。

【答案】算法如下:

//采用三元组表方式存储,按列序实现矩阵的转置

//行数、列数和非零元素个数

//设置N 中第一个非零元素从下标1开始存储

//按列,共

//在//转置

//三元组表上实现矩阵的快速转置的算法

//矩阵M 每一列非零元初始化为零

//求矩阵M 每一列的非

零元个数

第 3 页,共 31 页

个元素中查找

//第1列第一个非零元在转置后的三元组中下标是

1

//求

第j 列第一个非零元在

中的序号

//求转置矩阵N 的三元组表

//同列下一非零元

素位置

4. 试为二叉树写出一个建立三叉链表的算法,并在此三叉链表中删去每一个元素值为x 的结点,以及以它为根的子树,且释放相应存储空间。二叉树的三叉链表的描述为:

{二叉树根结点的指针}

【答案】算法如下:

生成三叉链表的二叉树(题目给出PASCAL 定义,下面用类C 语言书写

)

是二叉树结点指针的一维数组,容量足够大

一维数组最后元素的下标

元素或虚结点

根结点

双亲结点和子女结点用指针链上

结束

第 4 页,共 31 页