![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
主要记录复习408计算机考研数据结构科目的思考和体会,先是记录、其次才是分享、若有读者可以从中受益,再好不过~
iamstevenlu
先是沉淀积累,再有组合创新
展开
-
PAT A1131 Subway Map
这道题是图论的题目,一开始看到最短距离马上想到要用SPFA+DFS的框架来写,但因为各结点之间的距离是1,即没有另外的其他边权值,所以又想到用BFS来求最短路径,但由于BFS用来求最短路径的值可以但如果要存储路线的话就比较困难,最后用了DFS来做,还挺好写的。我的思路是,在DFS这个函数里,有四个参数,分别是s,t,level,pre_line,分别代表当前结点,终点,当前所经过的结点个数和上一个结点到当前结点所在的线路。如果当前结点就是终点,则通过对比最小经过结点数和最小中转数来存放路径,否则遍历当前原创 2021-02-26 14:32:50 · 98 阅读 · 0 评论 -
PAT A1103 Integer Factorization
1103 Integer FactorizationPAT甲级中涉及DFS的题目有几个注意点:1.该抽象的函数就抽象出来处理,比如这道题目里的pow函数2.在回溯算法里深度遍历函数中,最好不要涉及太多参数的传递,无论是否使用引用,因为会非常的耗时导致超时。最好的解决方法是,将所有涉及到的vector全都设置为全局变量。本人亲测,如果在DFS函数的参数列表中包含了vector会有至少一组超时。3.DFS的写法也有一些讲究,我自己写过两种DFS函数。函数一:void DFS(int index, i原创 2021-01-28 11:05:47 · 130 阅读 · 0 评论 -
PAT A1074 反转链表
思路:1.依照题目要求,创建两个数组,一个用来存放原始的结点,另一个用来存放有效的结点2.从头结点开始直到遇见尾结点遍历链表,并将遍历到的链表结点依照次序存放在第二个数组中3.在第二个数组中每K个结点进行逆转,若不满K个则跳出循环需要注意的是,PAT甲级的与链表相关的题目,输入中都可能包含无效的结点,即从题目给出的头结点出发无法遍历到的结点,这些结点是不予输出的。#include <cstdio>#include <algorithm>const int maxn =原创 2021-01-25 12:56:29 · 117 阅读 · 0 评论 -
PAT甲级 1012 The Best Rank
这道题逻辑的实现上其实坑不多,主要分为三部分。声明一个结构数组保存每个学生的成绩,写一个循环录入数据依照晴神的实现还需要一个记录排名的二维数组rank[1000000][4],并写一个循环分四次将A,C,M,E的排名计算并放入rank[][]中,主要复杂度在这一部分,其实也就O(n)的级别。根据给出的query ID来分别给出各个学生的排名和对应科目字符。代码就没必要列出来了,主要是有这么一个小坑,我卡了很久。我自己按照自己的思路写了一遍后,提交后一直出现段错误,和晴神笔记里的代码仔细对比也没原创 2021-01-11 22:11:50 · 134 阅读 · 0 评论 -
数据结构——树与二叉树学习笔记(一)
数据结构——树与二叉树,记录了与树相关的重要知识点,可作为查阅使用。文章目录1. 树的基本概念1.1 树的概念术语1.2 树的基本性质2. 二叉树的概念2.1 几个特殊的二叉树2.2 二叉树的性质2.3 二叉树的存储结构3. 二叉树的遍历和线索二叉树3.1 递归遍历3.2 非递归遍历3.3 用遍历序列确定二叉树3.4 线索二叉树的构造3.5 线索二叉树的遍历4. 树、森林4.1 树的存储结构4.2 树、森林与二叉树的转换4.3 树/森林的遍历1. 树的基本概念1.1 树的概念术语结点、根、分支、.原创 2020-05-23 19:00:24 · 379 阅读 · 0 评论 -
KMP算法背后的细节与难点
本文是笔者在复习数据结构时的笔记,在初次接触KMP算法时觉得理解起来困难重重,在翻阅网上众多自称“通俗易懂地解释KMP算法”的文章后,发现大多文章都只是粗浅地停留在对比KMP和暴力匹配算法的不同,而没有深入地去探讨算法细节中关于next数组的计算和推导、next数组应如何用代码实现等问题。所以笔者在花费大量时间思考并最终理解后,希望通过这篇文章讲清和讲透KMP算法其中的细节。在进入正题之前,让...原创 2020-04-28 11:40:27 · 1189 阅读 · 2 评论