自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言-二叉树的构建与遍历

二叉树不仅具有广泛的应用场景,如搜索、排序、存储等,而且它的学习和理解也为后续更复杂的数据结构(如树、图)和算法打下了坚实的基础。理解二叉树的基本特性,如递归性、满二叉树、完全二叉树等,对于后续的学习和应用至关重要。常见的遍历方法有前序遍历、中序遍历和后序遍历。在实践中应用二叉树不仅可以加深对其原理的理解,还可以提高编程能力和解决问题的能力。理解递归遍历和非递归遍历的实现方式,这有助于加深对二叉树结构和遍历过程的理解。二叉树是每个节点最多有两个子节点的树结构,通常称为左子节点和右子节点。

2024-05-12 19:02:31 235 1

原创 C语言-压缩矩阵的转置

例如,如果原始矩阵是以CSR格式存储的,那么转置后的矩阵更适合以CSC格式存储,因为CSR和CSC在行和列上的存储顺序是相反的。对于稀疏矩阵的转置,我们不能简单地逐行或逐列地交换元素,因为这会导致大量的无效操作(即处理零元素)。一种常见的策略是在转置操作之前预先分配足够的内存,并在操作完成后释放不再需要的内存。在矩阵运算中,矩阵的转置是一个基本的操作,它将矩阵的行和列进行互换。然而,当涉及到压缩矩阵(如稀疏矩阵)的转置时,我们需要考虑一些额外的因素,以优化存储和计算效率。

2024-05-10 20:44:18 163

原创 二维数组与矩阵乘法

矩阵乘法有其特定的规则,包括乘法的顺序、结果的维度等。其中,最关键的规则是:只有当第一个矩阵的列数等于第二个矩阵的行数时,这两个矩阵才能进行乘法运算。此外,结果的矩阵维度是第一个矩阵的行数和第二个矩阵的列数。使用嵌套的循环来遍历两个矩阵的对应元素,并计算乘积的和,是常见的实现方式。在学习二维数组与矩阵乘法的过程中,我深刻体会到了数学理论与编程实践之间的紧密联系,以及深入理解基本概念对于解决复杂问题的重要性。在学习矩阵乘法之前,确保对二维数组和矩阵的基本概念有清晰的理解是至关重要的。

2024-05-10 20:25:08 293

原创 C语言循环队列

循环队列相较于普通队列(如链式队列)在内存使用上更为高效,因为它在固定大小的数组中实现了队列的先入先出(FIFO)特性,避免了内存的动态分配和释放,同时也通过“循环”的特性实现了对队列尾部元素的“环绕”,从而有效地利用了数组的每一个空间。常见的判断方法有两种:一种是浪费一个数组空间,当front和rear相等时表示队列为空,当(rear+1)%size == front时表示队列满(其中size是数组的大小);循环队列的核心思想是使用两个指针(front 和 rear)来指示队列的头部和尾部。

2024-05-10 19:51:17 322

原创 C语言链队列

链式队列相对于数组实现的队列来说,其优点在于动态地分配和释放内存,使得队列的大小可以根据需要动态地增长和缩小。队列有一个头指针(front)和一个尾指针(rear),分别指向队列的第一个节点和最后一个节点的下一个位置(或最后一个节点本身,取决于实现方式)。对于出队操作,你需要获取队首节点的数据,并修改头指针以指向下一个节点,然后释放原队首节点的内存。链式队列由节点(Node)组成,每个节点至少包含两个字段:数据字段和指向下一个节点的指针字段。在删除节点时,确保先断开其链接,再释放其内存。

2024-05-10 19:43:02 325

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

算法的基本思路是,遍历字符串中的每个字符,当遇到左括号时将其压入栈中,当遇到右括号时弹出栈顶元素并检查是否匹配。这些括号在匹配时需要确保类型相同,即右圆括号只能与左圆括号匹配,右中括号只能与左中括号匹配,右花括号只能与左花括号匹配。括号匹配是指在一串字符串中,每一个左括号都有与之对应的右括号,并且左右括号的顺序符合基本的语法规则。如果X和Y都是合法的括号匹配序列,那么XY也是一个合法的括号匹配序列。如果X是一个合法的括号匹配序列,那么(X)也是一个合法的括号匹配序列。空串是一个合法的括号匹配序列。

2024-04-28 20:31:33 420

原创 C语言实现-汉诺塔

递归是解决这个问题的一种有效方法,其步骤可以概括为:先将前n-1个盘子从起始柱子借助目标柱子移动到辅助柱子上,然后将最大的盘子从起始柱子移动到目标柱子上,最后再将前n-1个盘子从辅助柱子借助起始柱子移动到目标柱子上。我们要将N个盘子从A->B,可以当成先把最上面的N-1个盘子从A通过B移动到C,然后将最下面那一块盘子从A->B,然后再将放在C上的N-1个盘子从C通过A移动到B,每次打印移动的起点和终点即可清除盘子的移动情况。随着盘子数量的增加,移动的次数将呈指数级增长,这反映了问题的复杂性和挑战性。

2024-04-28 19:21:17 370

原创 C语言-数据结构-结构体实现栈

栈在许多算法和编程问题中都有广泛应用,例如函数调用和递归实现、表达式求值、括号匹配、页面访问历史记录、字符串逆序、深度优先搜索等。在函数调用中,每个函数的执行上下文会被推入栈中,函数执行结束后,上下文被弹出,控制权返回到调用者。这种特性使得栈具有后进先出(LIFO)的特性,即最后进入栈的元素会最先被移出。:栈的基本操作主要包括入栈(push)、出栈(pop)、读栈顶元素以及判断栈是否为空等。入栈操作是将元素添加到栈顶,而出栈操作则是移除栈顶的元素。:栈的空间是连续的,且大小有限,因此不能发生溢出。

2024-04-25 18:29:12 265 2

原创 C语言-链表的多项式加法

链表是一个用于存储多项式项的合适数据结构,其中每个节点代表多项式的一项,包含系数和指数信息。学习链表多项式的加法不仅是为了掌握这个特定的知识点,更重要的是培养数据结构和算法的思维方式和解决问题的能力。在进行链表多项式的加法时,需要掌握链表的基本操作,如节点的创建、插入、删除和遍历等。:在实现链表多项式的加法时,需要注意处理各种细节和边界情况,如空链表、只有一个节点的链表、相同指数的项等。实践是检验知识掌握程度的有效方法,通过不断尝试和修正,我加深了对链表操作和多项式加法算法的理解。

2024-04-24 19:54:25 498

原创 静态链表-C语言

由于静态链表在物理上是连续的,因此在进行插入和删除操作时,不需要像顺序表那样移动大量元素,这是静态链表的一个主要优点。:静态链表适用于不支持动态链表的场景,如某些嵌入式系统或特定的内存管理环境中。:静态链表的初始化过程涉及为数组中的每个元素分配一个初始的游标值。通常,第一个元素的游标值指向下一个元素,最后一个元素的游标值设为0,表示链表的结尾。总的来说,静态链表是一种在特定环境下非常有用的数据结构,它结合了数组和链表的某些特性,使得在某些特定场景下能够更有效地管理数据。以下是一些关于静态链表的主要知识点。

2024-04-20 21:09:04 394

原创 双向链表-C语言

它具备动态性,可在运行时动态添加、删除和修改节点。尽管空间利用率略低于单向链表,但双向链表在插入和删除操作时的高效性以及双向遍历能力使其在某些场景中非常有用。两个方向组成的链式结构。双向链表是一种复杂但高效的数据结构,每个节点包含前驱和后继指针,支持。是相对于单链表增加了前驱,链式的。

2024-04-18 20:29:05 359 2

原创 数据结构单链表

数据域存放自身数据,指针域存放下一个结点的地址,指向下一个结点,最后一个结点没有下一个结点可以指向,所以指向空-NULL。心得体会:单链表是学很多其他数据结构的基础,虽然可以用数组模拟,但是其实用性和通用性比不上结构体链表,继续好好学吧!代码中还有一种插入没有写出来---头插(当然还有有无头结点的头插,这里只写无头结点的头插。代码如下 带有些许注释。

2024-04-07 20:23:00 228

原创 数据结构线性表-C语言实现

心得体会:通过敲这整个代码,我对链表的理解更深刻,链表的链式结构储存数据,具有的功能也是通过一个连一个的链式结构进行遍历来实现。代码功能:链表的增删改查,还有查找目标值在链表中位置,链表内存检查的输出,链表清空等。插入、删除不需要移动数据,只需要移动指针,效率高(时间复杂度为O(1));是存取时需要遍历所有数据,效率低(时间复杂度为O(n))。

2024-04-06 16:10:21 275 1

空空如也

空空如也

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

TA关注的人

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