自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 Hash表

查找、插入和删除操作的平均时间复杂度可以达到O(1),在理想情况下非常高效。动态调整哈希表大小(如自动扩容或缩容)可以维持高效性能。

2024-05-28 10:16:29 232

原创 顺序查找与二分查找

它的工作原理是将数组分成两半,比较中间元素与目标值,根据比较结果缩小搜索范围,重复此过程直到找到目标值或确定不存在于数组中。顺序查找,也称为线性搜索,是一种简单的查找方法,通过遍历数据结构中的每个元素,逐个与目标值进行比较,直到找到匹配项或遍历完所有元素。4. 不适用于无序数据:由于其依赖于数据的有序性,对于无序数据集,必须先排序再使用二分查找,这会增加额外的时间成本。顺序查找和二分查找是两种基本的在数据结构(如数组或列表)中查找特定元素的算法。1. 前提条件:数据必须是有序的(升序或降序)。

2024-05-28 10:12:16 279

原创 Prim与Dijkstra算法

3)更新邻居距离: 对于当前顶点的所有未访问邻居,如果通过当前顶点到达该邻居的距离比已知的最短距离要短,则更新该邻居的最短距离。2)迭代扩展:在每一步中,选择一个连接已选择顶点集合与未选择顶点集合的最小权重边,将这条边的另一端点加入已选择顶点集合。1)初始化:为每个顶点分配一个距离值,源点的距离设为0,其他所有顶点的距离设为无穷大。3)重复步骤2),直到所有顶点都被加入到已选择顶点集合中,此时得到的边集即为最小生成树的边集。2)选择顶点:从未访问顶点中选择距离最小的顶点,访问并标记为已访问。

2024-05-23 19:08:01 275 1

原创 数据结构 图的遍历

广度优先遍历(BFS):这种遍历方式是从图的某一顶点出发,首先访问这个顶点,然后找出这个顶点的所有未被访问过的相邻顶点,访问完后再从这些相邻顶点出发,继续寻找它们的未被访问过的相邻顶点,如此类推,直至图中所有已被访问过的顶点的邻接点都被访问到。分为无向图和有向图,无向图中的边没有方向,而有向图中的边有方向。在有向图中,顶点的度分为入度和出度,入度是以该顶点为终点的边的数目,出度是以该顶点为起点的边的数目。2)图的遍历:图的遍历主要有深度优先遍历(DFS)和广度优先遍历(BFS)两种。

2024-05-18 17:16:09 363

原创 N皇后问题

子节点生成:对于树中的每个节点(除叶节点外),可以通过在当前节点的基础上尝试放置一个新的皇后来生成子节点。剪枝:如果在尝试放置新皇后时发现无法找到合适的位置(即所有可能的位置都与已放置的皇后冲突),则当前节点成为叶节点,并且不再生成新的子节点。解的状态:当算法找到一个满足N皇后问题规则的节点时(即已经成功放置了N个皇后),该节点就是一个解状态。从根节点到该解状态的路径代表了一个有效的解。回溯:当一个节点的所有子节点都已经被探索过,且没有找到有效的解时,算法会回溯到该节点的父节点,并继续探索其他可能的路径。

2024-05-16 21:36:39 347

原创 数据结构 二叉树

迭代创建二叉树通常涉及遍历一个输入列表(或其他数据结构),并根据其结构来创建节点。这种方法在处理从外部数据源(如文件、数据库或网络)获取数据时更为常见。数据结构中的二叉树是一种常见且重要的树形结构,每个节点最多有两个子节点,通常被称为左子节点和右子节点。二叉树通常可以使用链表结构来表示,每个节点包含三个字段:一个数据字段和两个指向子节点的指针字段。递归创建二叉树时,可以从根节点开始,然后递归地为每个子节点创建子树。二叉树的创建通常通过递归或迭代的方式来完成。

2024-05-14 22:17:55 124 2

原创 压缩矩阵的转置

3)转置赋值:最后,开始转置过程,将原始压缩矩阵中的非零元素赋值给转置后的压缩矩阵。1.压缩矩阵的转置,实际上是将压缩矩阵的行和列进行交换。压缩矩阵是将一个二维矩阵的非零元素单独记录并存储与之对应的行和列,以达到节省存储空间的目的。2 )计算转置后首元素位置:接着,需要计算转置后每一行(或列)的第一个非零元素在压缩矩阵中的位置。需要注意的是,如果转置后的某一行(或列)已经赋值了一个元素,那么该行的首个元素的相对地址需要加一。1 )记录非零元素:首先,需要遍历原始压缩矩阵,记录每一列(或行)的非零元素个数。

2024-05-11 15:15:58 192 1

原创 数据结构循环队列

但与普通队列不同的是,循环队列在物理上表现为一个数组,并且其操作是循环的,即当到达数组的末尾时,下一个操作将回到数组的开头。操作效率高:在循环队列中,添加和删除元素的操作都可以在常数时间内完成,这主要得益于其循环的特性。如果队尾指针到达数组的末尾,则将其回绕到数组的起始位置。如果队首指针到达数组的末尾,则将其回绕到数组的起始位置。无需移动元素:与链表相比,循环队列在添加和删除元素时无需移动其他元素,从而提高了操作的效率。空间利用率高:由于循环队列的特性,它可以有效地利用数组的每一个位置,避免空间的浪费。

2024-05-10 16:14:01 264 1

原创 二维数组与矩阵乘法

5)计算方法:矩阵乘法在计算机编程中可以通过定义三个二维数组来存储第一个矩阵、第二个矩阵和相乘后得到的新矩阵,并使用嵌套的for循环来执行乘法操作。4)矩阵乘法的实际操作涉及将第一个矩阵的第i行的每个元素分别乘上第二个矩阵第j列的每个元素然后进行相加,得到的结果即为新矩阵的第i行第j列的元素。3)矩阵相乘最重要的方法是一般矩阵乘积,但这种方法只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义。2)二维数组也可以被视为矩阵。

2024-05-09 22:31:33 306

原创 汉诺塔问题

递归:汉诺塔问题的核心思想是分治策略,通过将问题分解为更小的子问题来解决。我们可以将n个盘子的移动问题分解为三个子问题:将n-1个盘子从起始塔座移动到辅助塔座,将剩下的一个盘子从起始塔座移动到目标塔座,最后将n-1个盘子从辅助塔座移动到目标塔座。递归地解决这些子问题,最终可以完成整个汉诺塔问题的求解。栈:在汉诺塔问题中,每个塔座都可以被看作是一个栈,用于存储盘子。当我们需要移动某个盘子时,我们需要从栈中取出该盘子,并将其放到目标栈中。汉诺塔问题是一个经典的递归问题,其数据结构主要涉及栈、递归和指针。

2024-04-28 17:02:15 131 1

原创 栈的应用--括号匹配

括号匹配是检查一个字符串中的括号是否正确配对的问题,其中可以包括小括号“()”、中括号“[]”和大括号“{}”。如果栈为空,说明没有匹配的左括号,因此括号不匹配。如果栈不为空,我们弹出栈顶元素,并检查它是否与当前的右括号匹配。此外,在实际应用中,还需要考虑错误处理和边界情况,例如空字符串或包含非括号字符的字符串等。遍历完整个字符串后,如果栈为空,说明所有括号都正确匹配;如果栈不为空,说明还有未匹配的左括号,因此括号不匹配。当遇到左括号(小括号“(”、中括号“[”或大括号“{”)时,我们将其压入栈中。

2024-04-27 08:12:08 177

原创 数据结构递归累加

递归调用:在递归函数中,我们将问题分解为更小的子问题。对于累加算法,这通常意味着从参数列表中移除一个元素,并递归地调用自身来处理剩余的列表。递归终止条件:接下来,我们需要确定递归的终止条件。这通常是当参数列表为空或只包含一个元素时,直接返回该元素(如果非空)或0(如果为空)。定义递归函数:首先,我们需要定义一个递归函数,该函数将接收一个参数列表(如数组或链表),并返回这些参数的累加和。递归累加算法是一种基于递归思想的算法,用于求解一系列数的累加和。

2024-04-27 08:05:35 128

原创 数据结构 多项式加法

数据结构中的多项式加法,实际上是对多项式的系数进行相应的操作,而不是直接对数据结构本身进行加法。在多项式的数据结构表示中,通常使用数组或链表来存储多项式的系数和对应的指数。多项式加法的核心步骤是逐项相加同类项,即指数相同的项。4.处理剩余项:当一个多项式遍历完后,将另一个多项式剩余的项直接复制到新数据结构。如果指数不同,则将系数较小的项直接复制到新数据结构中,并继续遍历下一个项。如果指数相同,则将两个项的系数相加,并将结果存储到新数据结构的对应位置。3.比较指数:对于当前遍历到的项,比较它们的指数。

2024-04-25 14:50:41 123 1

原创 数据结构 栈

应用: 栈的特性使得它在许多场景中都有广泛的应用。例如,在计算机科学中,栈常被用来存储函数调用时的参数和返回地址,以实现递归调用和函数调用。限制:栈是一种受限的数据结构,它不支持像队列那样的随机访问操作。这种限制使得栈在某些场景下非常有用,但也限制了它的应用范围。特点: 数据结构中的栈是一种非常特殊且重要的线性表,它遵循后进先出(LIFO)的原则。栈只允许在表尾进行插入和删除操作,这使得栈顶元素始终是最后入栈的元素,也是最先出栈的元素。数组实现的栈具有较快的访问速度,但空间利用率可能不如链表实现的栈高。

2024-04-25 14:45:00 239 1

原创 数据结构双向链表

双向链表是在单链表的基础上,为每个节点增加了一个指向其直接前驱的指针域,从而形成了两个方向不同的链。这种结构使得双向链表中的每个节点都包含三个部分:前一个节点的指针(previous)、当前节点保存的元素(data)以及后一个节点的指针(next)。而在最后一个节点,其next指针为NULL。双向链表支持多种常见操作,如向列表尾部添加新项(append)、向链表的特定位置插入新项(insert)、获取对应位置的元素(get)、返回元素在列表中的索引(indexOf)、删除某位置的元素(delete)。

2024-04-21 14:47:14 264

原创 数据结构静态链表

在进行插入操作时,需要为新结点分配一个空闲的数组空间,并更新相关结点的游标;在删除操作时,需要找到要删除结点的位置,并将其从链表中移除,同时释放其占用的数组空间;在静态链表中,通常用数组的第一个元素(下标为0)的游标来指示链表的第一个元素。此外,在一些需要固定大小数据结构的场景中,静态链表也可以作为一种有效的解决方案。其次,由于数组的大小是固定的,因此静态链表的大小也受到限制,无法像动态链表那样根据需要动态调整大小。由于通过游标来指示结点的位置,因此具备链表插入与删除操作方便的特点。

2024-04-21 14:46:57 183 1

原创 数据结构单链表

缺点: 单链表的随机访问速度较慢,访问特定位置的元素需要从头节点开始遍历链表,直到找到目标节点,导致访问时间是线性的,与数组的常数时间访问相比效率较低。每个节点都需要一个额外的指针来指向下一个节点,这会导致内存开销相对较大,尤其是当节点数量很大时。此外,单链表只有一个指向下一个节点的指针,不能直接访问前一个节点,这意味着它不支持双向访问。优点: 单链表在内存中分配空间时不需要提前指定大小,它可以根据需要动态增长,适合处理未知大小的数据集,这避免了预先分配固定大小的内存空间,从而提高了空间利用率。

2024-04-09 21:34:50 144

原创 数据结构作业1

操作效率:由于顺序表的长度固定,当插入或删除一个元素时,需要将插入或删除位置后的所有元素依次向后或向前移动,以保持元素之间的顺序不变。这种操作需要耗费大量的时间,因此顺序表的插入和删除操作效率较低。然而,当需要频繁地根据下标访问元素或者进行顺序查找时,顺序表是一个较为合适的选择。固定长度:顺序表在创建时需要指定表的长度,即可以容纳的元素个数。一旦顺序表已满,再插入新的元素就会导致溢出。因此,顺序表的长度是固定的,无法动态地改变。

2024-04-06 18:21:13 185 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除