- 博客(19)
- 收藏
- 关注
原创 【数据结构】排序
本文系统介绍了常见排序算法及其实现。主要内容包括:1)排序基本概念(稳定性、内外排序);2)四大类排序算法(插入、选择、交换、归并)的具体实现,包含直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序和归并排序的C语言代码;3)各算法的时间/空间复杂度及稳定性分析。实验数据展示了VS2026下处理10万数据时各算法的性能表现,其中快速排序和归并排序表现最优。文章详细阐述了每种算法的核心思想、特性及优化方法,为排序算法的学习和应用提供了全面参考。
2025-12-13 22:18:51
648
原创 【数据结构】二叉树OJ
本文整理了8个二叉树相关算法题的C语言实现,包括单值二叉树判断(LeetCode965)、相同树判断(LeetCode100)、对称二叉树(LeetCode101)、三种遍历方式(前序144、中序94、后序145)、子树判断(LeetCode572)以及牛客网的二叉树遍历。所有解法均采用递归思路,核心思想是通过比较节点值和递归处理左右子树来实现各种二叉树操作。代码结构清晰,每个问题都包含完整的结构体定义和递归函数实现,适合作为二叉树算法的学习参考。
2025-12-02 08:36:28
912
原创 【数据结构】堆的原理与C语言实现
本文系统介绍了堆数据结构及其应用。主要内容包括:1.堆的基本概念与性质,分为大根堆和小根堆;2.堆的实现方法,详细阐述了向下调整算法、堆创建、插入删除操作及完整代码实现;3.堆的两个重要应用场景:堆排序算法(包括升序和降序实现)和TOP-K问题解决方案。文章通过完整代码示例展示了堆的具体实现过程,并分析了其时间复杂度。堆作为一种高效的完全二叉树结构,在排序和优先级队列等场景中具有重要应用价值。
2025-12-02 08:00:39
818
2
原创 【数据结构】二叉树介绍及C语言实现链式二叉树
本文系统介绍了树和二叉树的数据结构。首先阐述了树的基本概念,包括节点度、叶子节点、双亲节点等术语,以及树的表示方法。重点讲解了二叉树的定义、特性(如满二叉树和完全二叉树)及其数学性质。详细展示了二叉树的链式存储实现,包括创建、销毁、遍历(前序、中序、后序)等核心操作,并提供了节点统计、查找等实用功能的递归实现代码。全文通过清晰的函数定义和测试案例,完整呈现了二叉树的C语言实现方案,为理解和应用这一重要数据结构提供了实践指导。
2025-11-30 21:53:06
745
原创 【数据结构】链表OJ
定义两个新链表,一个less,一个great,遍历原链表,将原链表中val值比x小的结点插入到less链表中,val值比x大的插入到great链表中,最后将great最后一个结点的next指向空,并将less和great连接起来。将链表的后半部分反转,两个指针分别从开头和中间开始走,当两个指针指向的结点的val值不同时返回false,当从中间开始走的结点走到NULL时说明原链表为回文结构,返回true。如果相交,求出两个链表长度的差值gap,让较长的链表上的指针先走gap步,再让两个链表上的指针同时走。
2025-11-26 13:43:49
890
原创 【数据结构】队列简单介绍及C语言实现链式队列
队列是只允许在一端进行插入操作,在另一端进行删除操作的特殊线性表。队列中的数据元素遵循先进先出FIFO(First In first Out)的原则。入队列:进行插入操作的一段称为队尾出队列:进行删除操作的一段称为队头}QNode;int size;}Queue;// 初始化// 销毁// 队尾插入// 队头删除// 取队头数据// 取队尾数据// 返回队列元素个数// 判空使用数组实现队列会出现假溢出现象,可以使用循环队列避免假溢出。
2025-11-20 13:31:10
635
原创 【数据结构】栈:C语言实现支持动态增长的顺序栈
int top;// 栈顶// 容量}ST;// 初始化// 销毁// 入栈// 出栈// 获取栈顶元素// 判空// 获取元素个数。
2025-11-16 14:59:43
192
原创 【数据结构】链表介绍及代码实现
链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。与顺序表不同的是,链表是由一个个节点/结点组成的,每个结点有两个组成部分:当前节点要保存的数据和保存下一个结点的地址(指针变量)因为链表的每个结点都是独立申请的(即需要插入数据时才申请一块结点的空间),所以需要通过指针变量保存下一个结点的地址才能从当前结点找到下一个结点。链表的结点也是使用结构体保存,假设当前链表保存的数据是整型数据int data;// 结点数据。
2025-10-11 14:49:20
927
原创 【数据结构】顺序表的应用:基于动态顺序表实现通讯录
因为顺序表中不仅可以保存内置类型,还可以保存自定义类型,所以在Contact.h中定义personInfo结构体用来保存联系人信息,并给该类型起别名为PeoInfo为了方便修改,可以将结构体中的数组大小定义为常量// 定义联系人结构// 姓名、性别、年龄、电话、地址int age;}PeoInfo;因为顺序表中存储的数据是自定义类型数据,所以需要在SeqList.h中修改。此处修改完成会出现很多报错,将SeqList.c中报错的代码暂时注释掉即可。
2025-10-10 17:26:02
318
原创 【数据结构】顺序表介绍及代码实现
这一步在SeqList.h中完成在SeqList.h中需要包含的头文件有:stdio.h,stdlib.h(动态申请内存)#pragma once //确保头文件只被编译一次,防止重复包含#include<stdlib.h> //动态申请内存的头文件#define SLDataType int //给int起别名为SLDataType,代表顺序表存储的数据类型,方便后续修改int size;//有效数据个数//空间容量}SL;//定义顺序表的结构,并给顺序表重命名为SL。
2025-10-08 16:43:21
608
原创 【数据结构】复杂度
数据结构(data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法(Algorithm)就是定义良好的计算过程,取一个或一组的值为输入,并产生一个或一组值作为输出。简单来说算法就是一系列计算步骤,用来将输入数据转化成输出结果。
2025-10-06 20:57:42
723
原创 【C语言】动态内存管理
在学习动态内存管理之前,我们知道两种内存开辟的方式上述开辟内存空间的方式有两个特点:空间开辟的大小是固定的;数组在声明时必须指定数组的长度,数组空间一旦确定大小就不能再调整。但对于空间的需求不仅仅只有上述的情况。有时候需要的空间大小只有在程序运行时才知道,那么上述两种开辟内存空间的方式就不能满足了。C语言引入了动态内存开辟,让程序员可以自己申请和释放空间,就比较灵活了;但相应的,如果不规范使用,也会有一些风险。
2025-10-04 11:52:15
964
原创 【C语言】指针(4)——strlen与sizeof;指针代码题目
如果操作数是类型,计算的是使用类型创建的变量所占内存空间的大小。strlen统计的是从strlen函数的参数str的地址开始,直到'\0'之前的字符串的字符个数。3.关注内存中是否有'\0',如果没有'\0',就会持续往后找,可能会越界。sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小;2.strlen是求字符串长度的,统计的是'\0'之前字符个数。sizeof(数组名)计算的是整个数组的大小,单位是字节。&数组名,数组名表示整个数组,取出的是整个数组的地址;
2025-09-19 22:35:41
578
原创 【C语言】指针(3)——更多指针类型:数组指针、函数指针;回调函数
函数指针变量是用来存放函数地址的,未来通过地址能够调用函数。总结:二维数组传参,形参可以写成指针形式,也可以写成数组形式。4.函数指针变量4.1函数指针变量的创建函数指针变量是用来存放函数地址的,未来通过地址能够调用函数。通过函数结果可以发现,函数名和&函数名都是函数的地址。要将函数的地址存放起来,就需要创建函数指针变量。parr1先和[]结合,说明parr1是数组,数组的内容是int(*)()类型的函数指针。
2025-09-16 07:38:59
1146
原创 【C语言】指针(2)——指针与数组
可以看出数组名是数组首元素(第一个元素)地址。在两种情况下数组名不代表数组首元素地址,而是代表整个数组:sizeof(数组名):sizeof中单独放置数组名,数组名表示整个数组,计算的是整个数组的大小,单位是字节。&数组名:这里的数组名表示整个数组,取出的是整个数组的地址(与数组首元素地址的值相同,但数组地址+1是跳过整个数组)。数组名是数组首元素地址时,类型是type*,+1就是跳过一个sizeof(type)。数组名是数组地址时,类型是type*[],+1就是跳过整个数组。
2025-09-10 14:28:37
779
原创 【C语言】指针(1)——指针简单介绍及指针相关运算
计算机中最小的单位是比特位bit,可以用来存储1个二进制位内存单元编号 == 地址 == 指针计算机中的编址,不是把每个字节的地址记录下来,而是通过硬件设计完成的。地址总线:32位机器有32根地址总线,可以表示2^32种含义,每种含义表示一个地址。
2025-09-07 11:39:35
777
原创 【C语言】实现辗转相除法求最大公约数
辗转相除法又称欧几里得算法,是指用于计算两个正整数a,b的最大公约数。。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。以除数和余数反复做除法运算,当余数为 0 时,取当前算式的除数为最大公约数。例:求24和18的最大公约数当余数为0时当前算式的除数即为最大公约数。
2025-06-01 17:38:05
840
原创 【C语言】实现趣味猜数字小游戏
猜数字小游戏是一个经典的代码练习题目,今天我们要通过C语言实现猜数字小游戏。游戏过程:1、电脑生成一个 1~100 范围内的随机数2、玩家猜数字,电脑根据玩家的输入给出反馈(猜大或猜小),直到玩家猜对,游戏结束。
2025-05-30 18:58:54
1295
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅