- 博客(16)
- 收藏
- 关注
原创 初阶数据结构:树---二叉树的链式结构
在计算机科学的广袤领域中,数据结构犹如基石,支撑着无数复杂系统与高效算法的构建。而二叉树链式结构,作为数据结构家族中的重要成员,以其独特的组织方式和强大的功能,在诸多领域发挥着不可或缺的作用。无论是数据库索引的优化,还是编译器中语法树的构建;无论是文件系统的目录管理,还是人工智能中决策树的实现,都能看到二叉树链式结构活跃的身影。它不仅为数据的存储与检索提供了高效的解决方案,还为算法的设计与优化开辟了新的思路。本次博客本文将深入探索二叉树链式结构的奥秘,领略其独特魅力与无限潜力。
2025-02-12 19:48:20
1184
4
原创 初阶数据结构:树---堆
在数据结构的广阔领域中,树与堆犹如两颗璀璨的明星,散发着独特的魅力。它们不仅是计算机科学的基础,更是解决各种复杂问题的有力武器。树,以其独特的层次结构,模拟了现实世界中的众多场景,如文件系统的目录结构、公司的组织架构等,让我们能够清晰地梳理和管理复杂的数据关系。而堆,作为一种特殊的完全二叉树,凭借其高效的插入、删除和查找操作,在优先队列、排序算法等领域发挥着关键作用。那树究竟是什么呢?
2025-02-06 19:00:12
1115
原创 初级数据结构:栈和队列
在数据结构的大家庭中,队列是一位独特而重要的成员。想象一下,在超市结账的队伍里,先来的顾客排在前面先结账离开,后来的顾客则依次在队尾加入等待,这就是典型的 “先进先出(FIFO,First In First Out)原则,而队列正是这种原则在计算机领域的完美体现。队列作为一种特殊的线性表,它的操作被严格限定在两端进行。一端被称为队尾(rear),专门用于插入新元素,就像新顾客加入结账队伍的末尾;另一端是队头(front),负责删除元素,恰似排在队伍最前面的顾客完成结账后离开。
2025-02-02 22:06:50
1698
2
原创 初阶数据结构:链表(二)
在上一篇博客中,我们实现的是单链表。我们知道链表有8种结构,由单向和双向、有头和无头、循环和非循环组合而成。单链表就是无头单向非循环链表。它是一种结构简单的链表,通常不会用来单独作为存储数据用,实际中更多的是作为其它数据结构的子结构存在,如哈希桶、图的邻接等等。单链表虽然在头插、头删方面很方便,但在尾插和尾删又比不过顺序表。那么有没有一种链表,在头插头删和尾插尾删上都很方便呢?当然有,那就是链表中的“王者”------带头双向循环链表。它的结构非常复杂,但效率极高。
2025-01-24 21:23:15
1373
原创 初阶数据结构:链表(一)
链表,作为一种线性数据结构,在计算机科学领域占据着举足轻重的地位。与数组不同,链表中的数据元素并非在内存中连续存储,而是通过指针将一个个节点连接起来,形成一种链式结构。这就好比用一根无形的线,将散落各处的珠子串联起来,每颗珠子都知道下一颗珠子的位置,从而构成了一个有序的序列。在链表的世界里,每个节点就像是一个信息载体,不仅存储着数据本身,还包含一个指向下一个节点的指针。这个指针,如同一条无形的纽带,将各个节点紧密相连,使得数据能够按照特定的顺序被访问和处理。链表一共有8种结构。
2025-01-20 23:59:21
1224
原创 初阶数据结构:顺序表
什么顺序表?顺序表是线性表中的一种。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。那线性表又是什么?线性表是n个具有相同特性的数据元素的有限序列,是一种在实际中广泛使用的数据结构。常见的线性表:顺序表、链表、栈、队列、字符串等等。线性表在逻辑上是线性结构,也就是连续的一条直线。但其在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
2025-01-18 21:31:32
1134
原创 初阶数据结构:时间复杂度和空间复杂度
用不同方式达到同一目的,每个方式达到目的所用的时间和空间是不同的。在程序上,使用不同算法来获取结果所需的时间和空间也是不同的。时间复杂度和空间复杂度主要功能就是判断算法的好坏,也可以说算法效率的高低。时间复杂度主要用于衡量一个算法的运行快慢,空间复杂度主要用于衡量一个算法运行所需要的额外空间。
2025-01-17 23:17:14
1141
原创 C语言实践:基础通讯录实现(二)
本次博客,是为了之前基础通讯录在运行时,联系人信息都存储在内存中,一旦程序结束,写入的联系人信息不会存在。故使用文件操作来达到保存联系人信息和导入联系人信息的功能。
2025-01-14 22:43:45
399
原创 C语言实践:基础通讯录实现(一)
在上一篇博客中,我们写了如何实现通讯录,但上次的代码仍有一些不足之处,如在每一个传入结构体指针的函数内未使用assert进行判断,这会造成程序运行会不安全。且由于我们define定义的MAX只有100,能存储的联系人信息也只有100,这在通讯录使用过程中会有一定限制,我们能不能让程序在存储联系人信息满员的情况下,自己扩容存储空间。这当然是可行的,我们可以使用动态内存开辟的方法。
2025-01-13 19:42:48
285
原创 C语言实践:基础通讯录实现
3.删除联系人:通常,我们一看到数组中的删除就会想到,将要删除的数的后一位向前移,覆盖掉要删除的数,后面的数重复这样的操作,从而达到删除这一个数的操作,且这样做数的存储顺序不会发生改变。这时,我们的菜单就做好了,我们知道一个联系人的信息有姓名、性别、年龄、地址、电话。2.增加联系人:想要添加联系人,我们要先判断p数组中是否还有存储空间,总不能p数组已经存储了100个联系人信息,还添加吧。这个就可以借用查找联系人功能的代码,来进行一个完善的查找,这里就提供一个基础的修改代码。自此,基础通讯录就完成了。
2025-01-11 21:17:13
814
原创 每日一题:异或变换【蓝桥杯2021国ABC】
上述的ABC指这道题在ABC组中都出现过。今天的这道题想要解决它很简单,那为什么它能被选入蓝桥杯国赛中呢?它的难点就在于如何减少程序的运行时间。专业一点的说法就是如何减少程序运行的时间复杂度。先来看题。
2024-12-23 23:42:41
702
原创 每日一题:乘法表【蓝桥杯2020省B】
3、我们先判断i和j是否大于等于10,并将大于等于10的用大写字母表示。这时就有一个问题,判断数字是否大于等于10很容易,但如何将大于等于10的数用大写字母表示呢?1、经阅读题目,我们可以知道,题目中的乘法表只是我们小学学过的九九乘法表的变表。这个题目中的坑在它的输出格式要求上:输出 P 进制下的乘法表。因为输出格式的意思是所有只要大于等于10的数就要用A、B、C、⋯⋯ 表示,所以我们要分两步。它输出格式的意思是所有只要大于等于10的数就要用A、B、C、⋯⋯ 表示,可以看以上用例二、三。
2024-12-21 23:24:02
618
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人