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

2018年郑州大学软件技术学院408计算机学科专业基础综合之数据结构考研强化五套模拟题

  摘要

一、算法设计题

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

【答案】算法如下:

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

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

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

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

//分解原链表

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

//处理字母字符

//处理数字字符

//处理其他符号

//结束while(L!=

null) //算法结束

2. 设A 和B 均为下三角矩阵,每一个都有n 行n 列。因此在下三角区域中各有n(n+l)/2个无素。另设有一个二维数组C ,它有n 行n +1列。试设计一个方案,将两个矩阵A 和B 中的下三角区域元素存放于同一个C 中。要求将A 的下三角区域中的元素存放于C 的下三角区域中,B 的下三角区域中的元素转置后存放于C 的上三角区域中。并给出计算A 的矩阵元素矩阵元素

在C 中的存放位置下标的公式。

//本算法将n 阶方阵的下三角矩阵A 和B 置于C 中,矩阵B 要逆置

第 2 页,共 38 页

和B 的

【答案】算法如下:

//算法结束

3. 设键盘输入n 个英语单词,输入格式为词个数,试编一程序,建立一个单向链表,实现:

(1)如果单词重复出现,则只在链表上保留一个。

(2)除满足(1)的要求外。链表结点还应有一个计数域,记录该单词重复出现的次数,然后输出出现次数最多的前k(k<=n) 个单词。

【答案】定义结点数据类型如下:

//频度域,记单词出现的次数

//maxsize是单词中可能含有的最多字母个数

(1)算法如下:

( )

//建立有n(n>0) 个单词的单向链表,若单词重复出现,则只在链表中保留一个

//申请头结点

//链表初始化

//建立n 个结点的链表

//a是与链表中结点数据域同等长度的字符数组

//p是工作指针,pre 是前驱指针

//单词重复出现,频度增

1

//指针后移

//该单词没出现过,应插入

//将新结点插入到链表最后

//结束for 循环

//结束creat 算法

第 3 页,共 38 页

其中n 表示随后输入英语单

(2)算法如下:

( )

//建立有n 个单词的单向链表,重复单词只在链表中保留一个,最后输出频度最高的k 个单词

//申请头结点

//链表初始化

//建立n 个结点的链表

//a是与链表中结点数据域同等长度的字符数组

//P是工作指针,pre 是前驱指针

//单词重复出现,频度增

1

//先将P 结点从链表上摘下,再按频度域值插入到合适位置

//将P 结点插入到合适位置

//指针后移

//该单词没出现过,应插入到链表最后

//if新结点插入

//结束for 循环建表

r

(输入要输出单词的个数

//输出频度最髙的k 个单词

(”第

//结束算法

4. 给出以十字链表作存储结构,建立图的算法,输入(i, j , V) , 其中i , j 为顶点号,v 为权值。

【答案】算法如下:

建立有向图的十字链表存储结构

假定权值为整型

建立顶点向量

第 4 页,共 38 页

) ;

个单词出现次\n”,++i,p ﹣>data ,p ﹣>freg) ;