
数据结构与算法
文章平均质量分 80
自学数据结构日记
Yann Chase
嵌入式爱好者准备入行嵌入式
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构与算法:卡尔曼滤波
卡尔曼滤波(Kalman Filter)是一种用于估计动态系统状态的算法。它通过结合系统的预测模型和实际观测数据,逐步优化状态估计,从而得到更准确的结果。利用系统的动态模型和噪声统计特性,对状态进行最优估计。导航系统:如GPS定位、无人机导航。控制系统:如机器人运动控制、自动驾驶。信号处理:如传感器数据融合、图像处理。卡尔曼滤波是一种强大的状态估计算法,适合处理动态系统中的噪声和数据不确定性。通过学习卡尔曼滤波的原理和实现,你可以更好地理解状态估计的基本方法。原创 2025-02-24 13:32:17 · 1397 阅读 · 0 评论 -
数据结构与算法:均值滤波
均值滤波是一种简单的图像处理技术,用于去除图像中的噪声。它的核心思想是用一个像素周围邻域像素的平均值来代替该像素的值。通过这种方式,可以平滑图像,减少噪声的影响。举个例子:假设我们有一个 3x3 的图像区域,像素值如下:10 20 3040 50 6070 80 90如果我们对中心像素50进行均值滤波,那么新的像素值就是周围 9 个像素的平均值:均值滤波是一种简单而有效的图像处理技术,适合去除图像中的噪声和平滑图像。通过学习均值滤波的原理和实现,你可以更好地理解图像处理的基本方法。原创 2025-02-24 13:26:24 · 598 阅读 · 0 评论 -
数据结构:二叉树( Binary tree)及其实现
二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。每个节点最多有两个子节点。左子节点和右子节点是有序的,不能随意交换。举个例子:1/ \2 3/ \4 5这是一个二叉树,根节点是1,左子节点是2,右子节点是32的左子节点是4,右子节点是5。二叉树是一种非常重要的数据结构,适合表示层次关系和递归结构。通过学习二叉树的存储、遍历和操作,你可以更好地理解树形数据结构的原理和应用。希望通过这篇文章,你能轻松掌握二叉树的相关知识!原创 2025-02-22 08:00:00 · 512 阅读 · 0 评论 -
数据结构与算法:数组的增删查改
数组是一种最基本的数据结构,它是一块连续的内存空间,用来存储相同类型的数据。顺序存储:数据在内存中是连续存储的。固定大小:数组的大小在定义时就确定了,不能动态改变。快速访问:通过下标可以直接访问任意位置的元素。举个例子:定义一个数组,它存储了 5 个整数。通过arr[0]可以访问第一个元素1,通过arr[4]可以访问最后一个元素5。数组是一种简单而强大的数据结构,适合存储固定大小的数据。通过学习数组的增删查改操作,你可以更好地理解数据结构的基本原理。希望通过这篇文章,你能轻松掌握数组的相关知识!原创 2025-02-21 17:16:49 · 349 阅读 · 0 评论 -
数据结构与算法:奇校验与偶校验
奇校验和偶校验是一种简单的数据校验方法,用于检测数据在传输过程中是否发生了单比特错误。它们的核心思想是通过增加一个校验位,使得数据中1 的个数满足奇数(奇校验)或偶数(偶校验)的条件。举个例子:假设我们要传输的数据是1011001。如果使用奇校验,校验位应该是1,因为数据中已经有 4 个1(偶数),加上校验位后1的个数变为 5(奇数)。如果使用偶校验,校验位应该是0,因为数据中已经有 4 个1(偶数),加上校验位后1的个数仍然是 4(偶数)。原创 2025-02-21 17:13:55 · 1270 阅读 · 0 评论 -
数据结构与算法:多项式存储及运算
多项式是数学中常见的一种表达式,由多个项组成,每个项包含系数和指数。例如:在计算机中,我们需要用合适的数据结构来存储多项式,并实现多项式的加法、减法、乘法等运算。多项式是一种非常重要的数学表达式,通过合适的数据结构和算法,我们可以在计算机中高效地存储和运算多项式。希望通过这篇文章,你能轻松掌握多项式的存储及运算!原创 2025-02-22 09:30:00 · 369 阅读 · 0 评论 -
数据结构:广义表( Generalized List)及其实现
广义表(Generalized List)是一种扩展的线性表,它可以存储原子(单个数据元素)或子表(另一个广义表)。它可以递归定义,也就是说,一个广义表的元素可以是另一个广义表。:这是一个普通的线性表,包含 3 个原子。:这是一个广义表,包含 2 个原子和 1 个子表(2, 3)。:这是一个更复杂的广义表,包含嵌套的子表。广义表的灵活性使其非常适合表示复杂的数据结构,比如树、图等。广义表是一种非常灵活的数据结构,适合表示复杂的数据结构。通过学习广义表的基本操作和实现,你可以更好地解决实际问题。原创 2025-02-20 13:32:45 · 1513 阅读 · 0 评论 -
数据结构:串( Bunch)及其实现
串(String)是由零个或多个字符组成的有限序列,比如"hello"就是一个串。串是编程中非常常见的数据结构,常用于处理文本数据。顺序存储:串中的字符是连续存储的,类似于数组。链式存储:串中的字符也可以通过链表的方式存储,每个节点存储一个字符。常用操作:包括插入、删除、查找、替换等。串是一种非常重要的数据结构,常用于处理文本数据。顺序存储和链式存储各有优缺点,适合不同的场景。通过学习串的基本操作和常用算法,你可以更好地解决实际问题。希望通过这篇文章,你能轻松掌握串的相关知识!原创 2025-02-20 13:19:25 · 890 阅读 · 0 评论 -
数据结构:静态链表( Static Linked List)及其实现
静态链表是一种特殊的链表结构,它用数组来模拟链表的操作。你可以把它想象成一个“固定大小的链表”,每个节点都存储在一个固定的位置(数组下标),并通过一个“游标”来指向下一个节点。用数组实现:节点存储在数组中,数组的大小是固定的。游标代替指针:用数组下标(游标)来模拟指针,指向下一个节点。适合内存受限的场景:因为不需要动态分配内存,适合嵌入式系统等内存受限的环境。下面是一个静态链表的示意图:头节点下标:1空闲链表头节点下标:3数组下标:0 1 2 3 4 5。原创 2025-02-19 17:21:22 · 589 阅读 · 0 评论 -
数据结构:双向循环链表( Double Circular Linked List)及其实现
双向循环链表是一种更高级的链表结构,它就像一条双向环形跑道,每节车厢(节点)都有两个挂钩(指针),一个指向下一节车厢,另一个指向上一节车厢。数据:存储实际的数据(比如数字、字符串等)。前驱指针:指向前一个节点的地址。后继指针:指向下一个节点的地址。链表的最后一个节点的后继指针指向头节点,头节点的前驱指针指向最后一个节点,形成一个双向闭环。正因为如此,双向循环链表可以从任意节点开始,向前或向后无限遍历。下面是一个双向循环链表的示意图:复制。原创 2025-02-19 09:00:00 · 804 阅读 · 0 评论 -
数据结构:循环链表(Circular Linked List)及其实现
循环链表是一种特殊的链表结构,它就像一条环形跑道,每节车厢(节点)都通过挂钩(指针)连接到下一节车厢,最后一节车厢又连接回第一节车厢。数据:存储实际的数据(比如数字、字符串等)。指针:指向下一个节点的地址。链表的最后一个节点的指针指向头节点,形成一个闭环。正因为如此,循环链表可以无限遍历下去。下面是一个循环链表的示意图:头指针 -> [10] -> [20] -> [30] -> (回到起点)每个方框代表一个节点,包含数据和指针。指针指向下一个节点,最后一个节点的指针指向头节点,形成一个环。原创 2025-02-18 08:00:00 · 414 阅读 · 0 评论 -
数据结构:双向链表(Double Linked List)及其实现
双向链表是一种更高级的链表结构,它就像一辆可以双向行驶的火车,每节车厢(节点)都有两个挂钩(指针),一个指向下一节车厢,另一个指向上一节车厢。数据:存储实际的数据(比如数字、字符串等)。前驱指针:指向前一个节点的地址。后继指针:指向下一个节点的地址。可以从前往后遍历,也可以从后往前遍历。正因为如此,双向链表在某些场景下比单链表更方便。下面是一个双向链表的示意图:头指针 -> [10] <-> [20] <-> [30] -> NULL每个方框代表一个节点,包含数据、前驱指针和后继指针。原创 2025-02-18 08:30:00 · 473 阅读 · 0 评论 -
数据结构:单链表(Single Linked List)及其实现
单链表是一种最简单的链表结构,它就像一列火车,每节车厢(节点)都通过挂钩(指针)连接到下一节车厢。数据:存储实际的数据(比如数字、字符串等)。指针:指向下一个节点的地址。数据在内存中不是连续存储的,而是通过指针连接起来的。正因为如此,单链表可以动态地增加或删除节点,而不需要像数组那样移动大量数据。下面是一个单链表的示意图:头指针 -> [10] -> [20] -> [30] -> NULL每个方框代表一个节点,包含数据和指针。指针指向下一个节点,最后一个节点的指针指向NULL。原创 2025-02-17 13:15:08 · 1371 阅读 · 0 评论 -
数据结构:顺序表(Sequence List)及其实现
顺序表是一种最简单的数据结构,它就像一排连续的小房子,每个房子里都住着一个数据元素。这些房子是按顺序排列的,每个房子都有一个门牌号(下标),我们可以通过门牌号快速找到对应的数据。数据在内存中是连续存储的。正因为数据是连续的,所以我们可以通过下标快速访问任意位置的元素。数组是最基础的数据结构,适合数据量固定、操作简单的场景。顺序表是基于数组实现的“高级版”,适合数据量变化、操作复杂的场景。顺序表是一种简单而实用的数据结构,适合数据量固定且需要快速访问的场景。它的实现简单,但插入和删除操作效率较低。原创 2025-02-17 11:44:21 · 1163 阅读 · 0 评论 -
数据结构:队列(Queue)及其实现
队列是一种重要的线性数据结构,它遵循先进先出的原则,常见的操作包括入队、出队、查看队头元素等。通过C语言实现的队列,能够帮助我们解决许多实际问题,如进程调度、广度优先搜索、消息队列、缓冲区管理等。理解队列的实现和应用场景,对于编写高效的程序和解决各种实际问题至关重要。原创 2025-02-15 14:30:00 · 925 阅读 · 0 评论 -
数据结构:栈(Stack)及其实现
栈是一种遵循LIFO(先进后出)原则的线性数据结构,它的常见应用包括递归函数调用、表达式求值、括号匹配等。本文通过C语言实现了一个基于数组的栈,演示了栈的基本操作:压栈、弹栈、查看栈顶元素、判断栈空和栈满,并附上了详细的注释。栈是一种非常简单但功能强大的数据结构,理解栈的基本操作和应用场景对于学习计算机科学非常重要。栈作为一种数据结构,在许多计算机科学和实际应用中都扮演着重要的角色。原创 2025-02-15 11:00:00 · 1889 阅读 · 0 评论 -
C语言实现的常见查找算法
本文介绍了四种常见的查找算法,包括线性查找、二分查找、插值查找和跳跃查找。线性查找适用于无序数组,最简单,但效率较低。二分查找适用于有序数组,效率高(O(log n)),但数组必须是排序过的。插值查找适用于均匀分布的数据,性能比二分查找更高,但需要数据均匀分布。跳跃查找适用于有序数组,通过跳跃查找减少查找次数。根据实际需求选择合适的查找算法,可以大大提高程序的性能。原创 2025-02-14 11:30:00 · 1337 阅读 · 0 评论 -
C语言实现的常见排序算法
冒泡排序(Bubble Sort)冒泡排序是最简单的排序算法之一。它通过重复交换相邻的元素,将最大或最小的元素逐渐“冒泡”到序列的一端。虽然实现简单,但其时间复杂度较高,通常不适用于大规模数据的排序。实现逻辑本文介绍了几种经典的排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。每种排序算法都有其特定的优缺点,适用于不同的应用场景。在选择排序算法时,需要根据数据的规模、要求的时间复杂度以及是否需要稳定排序来做出决策。原创 2025-02-14 11:30:00 · 804 阅读 · 0 评论