DataStruct数据结构2021下半年期末考总结分析

引言

在我还记得的时候写一下吧,之前也有学长写过,他们写得挺好的,我也是参照他们的思路来大致写一下吧,希望能够给后来人带来帮助。

2022.4.8更新,加了笔试的内容在最下面


1.上机前复习

  1. 考前复习的话,你要想拿高分肯定是所有老师给的OJ平台上都要做的,不能说很熟练吧,但至少你得做过,有过这么一个思路吧,不然考试你哪里够时间做
  2. 其次重点的话就是书上既有讲,老师也在OJ上布置了,这些题目一定要着重注意,例如说前面的线性表,队列和栈至少得会用吧,单链表的构建和插入删除等操作也需要熟悉 
  3. 如果是树的话什么二叉树的构建肯定要掌握的了,还要熟悉二叉树的各种特性,会求某个结点深度啊,两点之间的路径,找出叶子节点什么的
  4. 关于图就比较难了,笔者也只能说是半桶水,邻接表的构建似乎比较少见,平时的关于图应用的例题里基本上也都是用邻接矩阵来出题,所以感觉侧重点不在那,能够做到会构建邻接表就可以了我觉得(出现我觉得的时候就不太可信了)
  5. 图到后面的各种算法比较复杂,相比于前面的难度不是一个量级的,因此要是想拿高分的话至少需要了解过大概算法的思路吧,像prim算法,迪杰斯特拉算法,拓扑排序等等,但是这个基本都是压轴题了,关于题目类型我后面再说
  6. 查找表的话有难的部分也有不难的部分,像什么折半查找,插值查找,这些写一两次了解以下就好了,比较难的话有二叉排序树吧,但是其实和二叉树是比较类似的,树的基础比较好也不难理解,平衡二叉树就稍微复杂一点,这个有必要也是可以掌握的,当然这些应该都属于压轴题范畴了
  7. 哈希查找,线性探测再散列,二次探测再散列等等,查找往难了考也是可能会出这种类型的题,也不算很难。
  8. 最后就是我们亲爱的排序算法啦,要是有时间就全部排序都看一遍吧,我感觉比较难记住的主要就是归并排序,其他都没有那么的可怕,代码量也不多,多敲几次就可以记住了

以上全凭本学期个人累积的经验,本人非科班,因此有不足之处还请谅解,肯定也有写得比我好的经验贴,本人就是随手记录一下


2.考前注意

考试时不能打开任何除oj平台,编程软件之外的页面,考试开始前也不可以在编程工具上写代码,老师都会有提醒的

考试时长时两个小时,自己把握着时间,肯定先做简单题,简单题占分也高,我们今年的考试是使用华为云桌面来操作,再在云桌面上用chrome登录考试网址,考试网址是和OJ类似的平台,做题规则也是一样,只看提交结果是否正确(应该吧)反正我看到的是这样,不知道老师后面会不会再看代码,应该不会,看代码多折磨 

3.考试题型

ok接下来就是我们的重头戏啦,首先说一下大致类型

1,2题一般都是线性表,栈,队列什么比较简单的,反正我今年做的就很简单,这些题基本上大家都能做对

第三四题会和树图 有关,会难一点,

第五题一般是压轴题,无论是思路复杂度上还是代码量上都会比较大,做不出来也没有关系,很多人也做不出来

(今年我们机房(排行榜显示没有一个做出第五题,但是这个排行榜不知道是什么范围的)的人里面也没有一个做出来的)笔者在该排行榜排第七还是第八(做了四题),第一名同样没有做出最后一题

第一题(35分)

疫苗预约(题目背景),主要考察对线性表的插入和删除,这里用链表或者用数组都是可以的

题目大致要求就是给出三个初始数组

然后需要完成对某个数组的插入或删除操作,随便写反正,

能实现要求就行,非常简单,没学过数据结构都能写

第二题(25分)

(取号什么的背景,反正也是和医院有关的) 折半查找,

查找成功则输出查找位置,并且要求输出查找次数

第三题 (15分)

树的拓扑排序,有一说一这题题目我没太看懂,但是实现它的功能是非常简单的

题目要求

大致是要求将一颗二叉树通过拓扑排序转换成有向图,也就是按拓扑顺序输出结点,双亲视为弧尾,孩子结点视为弧头

输入要求

第一行要求先输入结点的个数,例如节点个数为T,然后输入T个结点,题目给出的是字符

第二行输入每个结点对应的双亲位置,-1代表没有双亲

输出要求

按拓扑排序顺序输出结点(若多个结点同时都是没有双亲,则按字典顺序输出)

输入

8 A B C D E F G H

-1 0 4 1 0 1 4 6

输出

A B D E C F G H

(应该是这样)

第三题的话可能有些人一开始看着没看明白什么意思,其实我也没太懂,题目要求说要用到双亲结构来存储,就是要求写二叉树的结构吗?

但其实我感觉根本不用写,直接用结构体数组存储所有结点的字符和双亲位置,从0开始存储就好,然后就按着输入的双亲位置,自己画一颗树出来,推一下很快就知道怎么做了(第三题也并不算难)

第四题 (15分)

希尔排序

本次题目的要求是对一串字符序列进行升序排序(按ABCDEF这样排下去)

只要你掌握了希尔排序,写出这道题只是时间问题,不过这一次它的题目输入是不小心给少了一个数据,害的我做错了一次(就很不严谨啊好吧出题老师)

每年的话基本都会有一道排序题的,所以

第五题 (10分)

求单调最短路径问题

说白了就是迪杰斯特拉算法,基本上就是和Djikstra算法一模一样的要求,

输入输出要求可以直接参考OJ上的最短路径题目,可以说是一模一样了

可以参考我之前写的一篇迪杰斯特拉的算法,输入输出要求基本上是一致的

DS数据结构--求到各顶点的最短路径(迪杰斯特拉算法)_CHessheep的博客-CSDN博客


更新于2022.4.8

关于期末笔试

期末考成绩出来了,92分,可恶差一分就A+了,血亏,现在是多么后悔当初OJ课上有些题不会做的题就没写空在那里了,期末考也是,有一选择题明明算出来了但是却还是选错了,

不过结果还是比较出乎我的预料的,因为我感觉这个课真的好多内容而且好难,知识点好多

关于填空选择

关于填空和选择的话,有些就是考书上的知识点,我记得有一道填空题,就是在那个多路查找树那个B+树那里直接书本上原话概念给你挖空,哇靠这谁记得啊,

然后选择的话会考一些计算题,然后还有算法的时间复杂度啥的,这些都要多记的啦,我记得考了一题对称矩阵

笔试的话好像是10道选择题和10道填空题吗(填空题有点忘了),然后大题有五道吗好像,我尽量回忆一下

关于大题

第一题大题

考了队列,非常基础的一道题,就是你要弄清楚循环队列的原理,它是考了你队列中留一个空位的方法,就大概叫你写一下队列进出几个数字的情况。

第二题

考了串,叫你用next数组的方式来实现KMP算法完成串的比对,这一题第一问应该是叫你写一下next值算出来是多少,不知道有没有问nextval的

然后第二问就是叫你把算法代码写出来,基本就是把整个kmp算法写出来吧,只要这个熟练点的话也没什么问题,代码量不算多

第三题

排序算法,第一问好像考了堆排序吧,叫你把第几种情况的堆给画出来,只要你能够理解堆排序的话写出来应该不是很大问题

第二问是归并排序,也是写出排序的情况出来就可以,没有叫你手撕代码,所以说这些只要理解好就可以了,代码嘛归并排序我也背不下来,最好背的当然还是希尔排序hhh

我不记得考了几个小问了,总之只要考到这些,所有排序都理解并记住就好啦,也就七种排序吧好像。

第四题

这一题比较难了有点

考平衡二叉树的原理,这里也不用写代码应该,但是要把平衡二叉树的结点构建方法写出来,

具体是出一个乱序数组给你,让你用平衡二叉树的方法来给数组排序(我忘了是不是叫平衡二叉树了,过了都快三个月了),然后肯定会涉及左旋右旋,先左后右啊,先右后左啊什么的,它还会叫你把每一次的结点增加后的情况给画出来,差不多就是这样。

第五题

这一题是考图的路径了,第一问好像是要你求最小生成树来着,然后第二问直接让你手撕普利姆算法或者迪杰斯特拉算法都行,反正就是求最小路径,这里的代码量比较大,建议想拿下这题的人需要对图方面的知识特别熟悉,不过prim我考试前写过很多次了,所以把大概思路写出来是没有什么特别大的问题。

附加题

也是路径问题,但是我看不懂,没做,溜了,有个交叉路径啥的,忘了

最后

其实我感觉这次的题目还是算简单了,虽然说第五题(机考)我没做出来,不过我也没见到有多少个做出来的(不枉我认真学了一学期呜呜呜)

我看过一个学长写的2020年的关于机考和笔试的题,感觉他们那一年的机考更加难吧(第五题考了什么三叉霍夫曼)二叉霍夫曼我还不会写呢hhh 

今年虽然简单吧,但是迪杰斯特拉我最后还是不够时间敲了加上也不熟练(千万不要学我考前一天还去玩密室)有能力的可以冲下第五题,我们一般人就快点写完前四题就挺好的了

你可能感兴趣的:(数据结构,算法,c++)