数据结构
文章平均质量分 62
数据结构学习笔记,代码实现
岳麓山美食家
这个作者很懒,什么都没留下…
展开
-
数据结构(栈)的代码实现和测试
STL中实际上也由stack的容器,因此,重复造轮子是完全没有必要的。实现一下栈可以帮助我们更好的理解栈的应用和结构。栈的实现算是非常简单的。原创 2024-05-20 14:53:25 · 212 阅读 · 1 评论 -
数据结构(队列)的代码实现和测试(1)——顺序队列实现,以及关于虚函数的理解
每在队尾放进一个新元素后,rear向后移动一位,每从队首提取一个元素之后,front会向后移动一位。因此,不可避免的会遇到数组的长度不够用的问题。因为引入了将数组转化为循环结构,因此判断队列是否满不能直接用 rear == maxsize 来判断,因为有可能数组的前端位置还有空间。在上述代码中,父类的print方法是虚函数,子类的是实函数,我们执行父类的print,输出结果为。这里的解决方法是,将线性数组围成一个环,从而实现空间的重复利用。如果父子都为virtual,那么实际是哪类,就用哪类的方法。原创 2024-05-09 23:00:46 · 736 阅读 · 0 评论 -
数据结构(堆)的代码实现和测试——堆的原理及代码实现
由于堆是由数组实现的完全二叉树,因此我们每次插入新的元素只能将其按顺序放在数组的末尾,然后再进行上推操作将其放到合适的位置(因为此时新元素处于叶子节点,只能上推)由于完全二叉树的特性,前 n / 2 个节点全部为非叶子节点,所以我们只需对n/2 个节点全部进行下推操作完毕即可。所以,堆的存储用数组来实现,而其左右子树以及父亲节点的位置关系依靠数学计算来推导。如果上推成功,那么下推自然推不下去,如果上推不成功,也不影响后面下推的操作。因此,最大堆的根节点是整个堆中最大的,最小堆的根节点是整个堆中最小的。原创 2024-05-17 17:51:05 · 904 阅读 · 0 评论 -
数据结构(图)的代码实现及测试(1)——邻接矩阵实现和DFS
下面是数据结构图的基本实现的代码,参考Shaffer的书《数据结构与算法分析》按照课本p256的图进行测试,将ABCDEF节点分别作为0,1,2,3,4,5。这里BFS还未作实现,因为需要用到队列,会在代码实现队列后再做这里的内容。运行结果为:表示以0,2,3,5,1,4的路径进行深度优先搜索。并递归实现了基本遍历方式的一种——DFS 深度优选搜索遍历。下面的代码基本实现了图的基类和邻接矩阵实现。学习数据结构最重要的就是落实到代码。2.源文件 Graph.cpp。1.头文件 Graph.h。原创 2024-05-06 21:00:01 · 279 阅读 · 1 评论 -
数据结构(图)的代码实现和测试(2)——广度优先搜索BFS
另外需要注意的是,在这里我写了一个新的函数:setEdge_undirected();这个函数是为了弥补原来的setEdge函数只能一条一条添加有向边 导致效率低下的缺点。setEdge_undirected函数可以直接在两个顶点之间添加无向边。我们对图的遍历函数进行一些小小的改动,主要将最后测试的DFS改为BFS。在实现队列的代码之后,经过调整,开始着手实现广搜BFS。下面是setEdge_undirected函数的实现。代表从0 2 4 1 3 5的路径进行BFS遍历。之后来看BFS的实现。原创 2024-05-11 17:41:24 · 334 阅读 · 2 评论 -
数据结构(图)的代码实现和测试(3)——Dijkstra算法寻找单源最短路径问题
另外,其中的minVertex函数 遍历数组,找出距离最小的一个节点,从这个距离最小的节点开始找这个节点到其他路径的节点。这表示将0号顶点到自己的距离设为0,那么这可以表明这个算法是从0号节点开始查找单源最短路径问题的。根据注释,作者应该是想要将s作为单源寻找的起点,但是,代码中并未涉及到s。Dijkstra算法用于寻找图中的某个节点到其他节点的最短路径的大小。按照以下的图来测试,测试从顶点B到各个顶点的最短路径。B->A 最短路径 5。B->B 最短路径 0。下面是更改过后的代码。原创 2024-05-13 00:02:29 · 440 阅读 · 0 评论