- 博客(17)
- 收藏
- 关注
原创 数据结构 : 哈希表
当存在哈希冲突时,可以采用开放地址法或者链式哈希法来解决。在链式哈希法中,每个数组位置都链表,当多个元素映射到同一个位置时,它们会以链表的形式存储在该位置上。然而,哈希表的性能高效是以空间换时间为代价的,当哈希表元素过多时,会导致内存占用过大,甚至可能会影响程序的稳定性。因此,在使用哈希表时,需要避免一些常见的问题,例如哈希冲突、哈希函数设计、扩容和哈希表的负载因子等问题。哈希表的基本思想是,通过一种哈希函数将元素的键值转化为一个整数,将该整数作为数组的下标,从而实现元素的快速查找。先上代码,废话少说。
2023-06-12 18:57:59
89
原创 数据结构 : Prim 算法与 Dijkstra 算法
先上代码,废话少说。10000Prim算法和Dijkstra算法都是图的最短路径算法,它们的实现方法有所不同。
2023-06-12 18:47:54
109
原创 数据结构 : 邻接表及广度优先遍历
从起始节点开始,先将其入队,然后从队头开始,依次将队列中的节点出队,并将其未访问过的邻居节点入队。在使用邻接表表示图时,进行广度优先遍历的方法是首先将起始节点加入队列,然后从队头开始出队,再遍历出队节点的所有邻居节点,并将未被访问的节点加入队列。数组中每个元素表示一个节点,而链表则表示该节点与其它节点的关系。具体来说,每个节点的链表包含了该节点所连出去的所有边所对应的目标节点,这些目标节点被称为该节点的邻居节点。邻接表的优点在于它可以节省存储空间,因为只需要存储有边的节点即可,而没有边的节点可以省略。
2023-06-12 18:40:31
160
原创 数据结构:图的遍历
先上代码,废话少说。10图的遍历是指访问图中所有节点的过程。对于无向图和有向图分别存在两种遍历方式:深度优先遍历(DFS)和广度优先遍历(BFS)。
2023-06-12 18:34:27
72
原创 数据结构:N后问题
如果找到了这样的位置,就递归地考虑在第k+1行上放置皇后,否则就需要回溯,重新考虑在第k-1行上放置皇后的位置,以此类推。为了判断皇后是否会互相攻击,可以记录当前棋盘已被占用的列、主对角线和副对角线,如果在放置皇后时,发现一个皇后会与已经放置的皇后冲突,则需要回溯。N皇后问题的时间复杂度是指数级,但是实际上,由于大量的冗余搜索,算法的效率非常低,因此在实际应用中,需要使用一些优化技巧,例如剪枝等来加速算法。N皇后问题是经典的回溯算法问题,它的目的是在N×N的棋盘上放置N个皇后,使得它们互相攻击不了。
2023-06-12 18:23:04
33
原创 数据结构:循环队列
当入队时,先检查队列是否已满,如果满了,则不能入队,否则将元素插入到队尾指针指向的位置,然后将队尾指针向后移动一个位置。当出队时,先检查队列是否为空,如果空了,则不能出队,否则将队首指针向后移动一个位置,并将头部元素弹出。循环队列相对于普通队列的优点在于,当队列的头部和尾部指针到达数组边界时,它们会绕回到数组的起始位置。因此,在实现中,数组的长度通常是指定数量的元素,例如2的幂次方,这样才能使用对长度取模的方式实现循环。循环队列可以使用一个数组来实现,数组长度固定,并且存储的元素在逻辑上是首尾相接的。
2023-06-12 18:16:17
39
原创 数据结构 : 二叉树的构建与遍历
二叉树的遍历有三种方式:前序遍历、中序遍历和后序遍历。在前序遍历中,先遍历根节点,然后遍历左子树,最后遍历右子树。在中序遍历中,先遍历左子树,然后遍历根节点,最后遍历右子树。在后序遍历中,先遍历左子树,然后遍历右子树,最后遍历根节点。左子树中的所有节点的值都小于它的父节点的值,而右子树中的所有节点的值都大于它的父节点的值。二叉树是一种树形数据结构,它由一组节点构成,每个节点最多只有两个子节点,称为左子节点和右子节点。在二叉树中,每个节点都有一个父节点,除了根节点没有父节点。先上代码,废话少说。
2023-06-12 18:08:30
36
原创 汉诺塔问题详解
每次递归调用时,当前函数的参数和局部变量都会被压入栈中,在递归返回时,又会弹出栈中的数据,以此达到保存状态和信息的目的。汉诺塔问题是经典的递归问题。在我们解决汉诺塔问题的时候,通过这个思想,将一个较为复杂繁琐的问题分解成三个较小,更好解决的子问题,在我们编程过程中,对于变量的命名也不能过于随便,例如a,b,c等,我们应该使用具有意义,让人简单易懂的单词来对变量进行命名,有利于对代码更好的阅读和理解。形参(parameter)指的是函数或方法定义时声明的参数,它们是一种变量,用来存储将会传递给该函数的值。
2023-04-24 22:45:03
1125
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人