2018年北京大学软件与微电子学院831计算机基础综合[专业硕士]之数据结构考研基础五套测试题
● 摘要
一、算法设计题
1. 给出以十字链表作存储结构,建立图的算法,输入(i, j , V) , 其中i , j 为顶点号,v 为权值。
【答案】算法如下:
建立有向图的十字链表存储结构
假定权值为整型
建立顶点向量
当输入i 、j 、v 之一为0时,结
束算法运行
申请结点
弧结点中权值域
算法结束
2. 请用流程图或高级语言表示算法。已知有向图有n 个顶点,请写算法,根据用户输入的数对建立该有向图的邻接表。即接受用户输入的
(以其中之一为0标志结束) ,对于每条这样的
边,申请一个结点,并插入到的单链表中,如此反复,直到将图中所有边处理完毕。
提示:先产生邻接表的n 个头结点(其结点数值域从1到n) 。 【答案】算法如下:
建立有向图的邻接表存储结构
题目要求两顶点之一为0表示结束
第 2 页,共 39 页
输入顶点信息
3. 令G=(V, E) 为一个有向无环图,编写一个给图G 中每一个顶点赋以一个整数序号的算法,并满足以下条件:若从顶点i 至顶点j 有一条弧,则应使i 【答案】算法如下: 对以邻接表存储的DAG 图g 重新编号, 使若有 记录结点的逆序序号 4. 设键盘输入n 个英语单词,输入格式为词个数,试编一程序,建立一个单向链表,实现: (1)如果单词重复出现,则只在链表上保留一个。 (2)除满足(1)的要求外。链表结点还应有一个计数域,记录该单词重复出现的次数,然后输出出现次数最多的前k(k<=n) 个单词。 【答案】定义结点数据类型如下: //频度域,记单词出现的次数 //maxsize是单词中可能含有的最多字母个数 (1)算法如下: ( ) //建立有n(n>0) 个单词的单向链表,若单词重复出现,则只在链表中保留一个 //申请头结点 //链表初始化 第 3 页,共 39 页 ,则编号 求各顶点的入度 其中n 表示随后输入英语单 //建立n 个结点的链表 //a是与链表中结点数据域同等长度的字符数组 //p是工作指针,pre 是前驱指针 //单词重复出现,频度增 1 //指针后移 //该单词没出现过,应插入 //将新结点插入到链表最后 //结束for 循环 //结束creat 算法 (2)算法如下: ( ) //建立有n 个单词的单向链表,重复单词只在链表中保留一个,最后输出频度最高的k 个单词 //申请头结点 //链表初始化 //建立n 个结点的链表 //a是与链表中结点数据域同等长度的字符数组 //P是工作指针,pre 是前驱指针 //单词重复出现,频度增 1 //先将P 结点从链表上摘下,再按频度域值插入到合适位置 //将P 结点插入到合适位置 //指针后移 //该单词没出现过,应插入到链表最后 //if新结点插入 //结束for 循环建表 r (输入要输出单词的个数 第 4 页,共 39 页 ) ;
相关内容
相关标签