C
文章平均质量分 63
记录我C语言学习过程中,比较重要的细节知识。
念来过倒字名qwq
最开始两年学的前端+Java后端技术栈,大三从头开始学C/C++方向,另外还有数据结构、算法、Linux、操作系统、网络、Linux系统编程、linux网络编程等,加油!
展开
-
C/C++内存管理
C/C++内存分布、栈区、堆区、常量区、静态区、malloc/free、new/delete、new[]和delete[]、operator new和operator delete、malloc/calloc/realloc与new的区别、free与delete的区别、内存泄漏、避免内存泄漏、内存泄漏检测工具原创 2024-07-11 11:47:22 · 1641 阅读 · 0 评论 -
【nowcoder】NC132 环形链表的约瑟夫问题
NC132 环形链表的约瑟夫问题编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。下一个人继续从 1 开始报数。n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?原创 2024-03-08 12:32:15 · 356 阅读 · 0 评论 -
【nowcoder】NC248 左叶子之和
NC248 左叶子之和计算给定二叉树的左叶子之和。树上叶子节点指没有后继节点的节点,左叶子指连向父节点的左侧的叶子节点。原创 2024-03-07 16:56:23 · 383 阅读 · 0 评论 -
【数据结构与算法】常见排序算法(Sorting Algorithm)
C语言 冒泡排序(Bubble Sort) 快速排序(Quick Sort)插入排序(Insertion Sort)希尔排序(Shell Sort)选择排序(Selection Sort) 堆排序(Heap Sort)归并排序(Merge Sort)hoare快速排序 挖坑快速排序 双指针快速排序 非递归版快速排序归并排序非递归版 计数排序(CountSort)原创 2024-03-03 11:44:37 · 1141 阅读 · 0 评论 -
【leetcode】110. 平衡二叉树
leetcode 110. 平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。原创 2024-02-27 12:59:36 · 321 阅读 · 0 评论 -
【leetcode】二叉树的层序遍历 144. 二叉树的前序遍历 94. 二叉树的中序遍历 145. 二叉树的后序遍历
144. 二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。(二叉树的深度优先遍历)94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。145. 二叉树的后序遍历 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。二叉树的层序遍历(二叉树的广度优先遍历)原创 2024-02-24 12:37:58 · 356 阅读 · 0 评论 -
【leetcode】226. 翻转二叉树
leetcode 226. 翻转二叉树给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。原创 2024-02-22 12:32:24 · 365 阅读 · 0 评论 -
【leetcode】572. 另一棵树的子树
leetcode 572. 另一棵树的子树给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。原创 2024-02-18 12:37:23 · 345 阅读 · 0 评论 -
【leetcode】101. 对称二叉树
101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。原创 2024-02-16 10:28:30 · 407 阅读 · 0 评论 -
【leetcode】判断二叉树是否完全二叉树
递归方式判断二叉树是否完全二叉树层序遍历判断二叉树是否完全二叉树原创 2024-02-14 20:58:30 · 468 阅读 · 0 评论 -
【leetcode】100. 相同的树
leetcode 100. 相同的树给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。原创 2024-02-13 09:03:49 · 436 阅读 · 0 评论 -
【leetcode】965. 单值二叉树
965. 单值二叉树 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。原创 2024-02-11 11:42:43 · 487 阅读 · 0 评论 -
【leetcode】104. 二叉树的最大深度
leetcode 104. 二叉树的最大深度给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。原创 2024-02-09 11:18:12 · 359 阅读 · 0 评论 -
【数据结构与算法】二叉树(Binary Tree)
C语言实现二叉树 binary tree 二叉树前序遍历(二叉树的深度优先遍历) 二叉树中序遍历 二叉树后续遍历 二叉树前序中序后续遍历 二叉树层序遍历(二叉树的广度优先遍历) 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 判断二叉树是否是完全二叉树 求二叉树节点个数 求二叉树叶子结点个数 求二叉树的高度/求二叉树的深度 求二叉树第k层的节点个数 完全二叉树/满二叉树/堆heap 二叉搜索树二叉查找树二叉排序树 平衡二叉树avl树 B树 红黑树原创 2024-02-07 22:31:09 · 939 阅读 · 0 评论 -
【数据结构与算法】堆 / 堆排序 / TopK问题(Heap)
数据结构 二叉树 完全二叉树 堆(heap)最大堆最小堆 堆排序 TopK原创 2024-02-06 16:03:30 · 1277 阅读 · 0 评论 -
【leetcode】622. 设计循环队列(Circular Queue)
leetcode 622. 设计循环队列设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。计算循环队列数据个数:(rear + lgth - front) % leth。原创 2024-02-04 11:08:48 · 1150 阅读 · 1 评论 -
【leetcode】225. 用队列实现栈
225. 用队列实现栈请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。 注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop f原创 2024-02-02 12:52:55 · 337 阅读 · 0 评论 -
【leetcode】20. 有效的括号
leetcode 20. 有效的括号给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。原创 2024-02-01 19:18:55 · 481 阅读 · 0 评论 -
【LeetCode】142. 环形链表 II
142. 环形链表 II:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。原创 2024-01-31 09:48:30 · 356 阅读 · 0 评论 -
【leetcode】232. 用栈实现队列
leetcode 232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你 只能 使用标准的栈操作 —— 也就是只有 push to top, p原创 2024-01-29 21:02:29 · 494 阅读 · 0 评论 -
【leetcode】160. 相交链表
160. 相交链表:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。原创 2024-01-29 11:47:48 · 360 阅读 · 0 评论 -
【nowcoder】链表分割
链表分割:现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。原创 2024-01-27 21:40:53 · 392 阅读 · 0 评论 -
【数据结构与算法】队列(Queue)
队列是一种特殊的线性表,只允许在队尾插入数据,在队头删除数据,和日常生活中的排队一样,因此队列具有先进先出FIFO(First In First Out)的特点。队列可以用数组和链表的结构实现。使用链表的结构实现更优一些,入队列在链表尾端插入,出队列在头部删除,效率很高;如果使用数组的结构,出队列是在数组头上出数据,也就是删除数组第一个元素,效率会比较低,后面所有数据需要向前挪动。另外还有一种循环队列也可以使用数组或循环链表实现。原创 2024-01-26 18:28:13 · 390 阅读 · 0 评论 -
【数据结构与算法】栈(Stack)之 浅谈数组和链表实现栈各自的优缺点
C语言实现栈结构。栈是一种特殊的线性表,只允许在栈顶(Top)进行插入和删除元素操作,另一端称为栈底,栈中的数据元素遵守后进先出LIFO(Last In First Out)或先进后出的原则。栈的插入操作(Push):称为压栈 或 入栈 或 进栈,。栈的删除操作(Pop):也叫出栈 或 弹栈。原创 2024-01-25 10:28:35 · 2533 阅读 · 4 评论 -
【nowcoder】链表的回文结构
链表的回文结构:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。原创 2024-01-24 12:38:29 · 473 阅读 · 4 评论 -
【数据结构与算法】线性表之顺序表(sequence list)
数据结构,线性表,线性结构,逻辑结构,物理结构,顺序表,顺序表的优点缺点:查询快 增删改慢 ,链表的优点缺点:查询慢 增删改快原创 2023-11-18 21:53:11 · 372 阅读 · 0 评论 -
【leetcode】138. 随机链表的复制
138. 随机链表的复制:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random -原创 2024-01-23 10:48:01 · 518 阅读 · 1 评论 -
【LeetCode】21. 合并两个有序链表
leetcode 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。原创 2024-01-23 10:47:23 · 422 阅读 · 0 评论 -
【C++】命名空间(namespace)
C++命名空间 C语言的命名冲突问题 C语言全局变量和局部变量 C++命名空间解决命名冲突原创 2024-01-21 18:20:11 · 1040 阅读 · 4 评论 -
【LeetCode】876. 链表的中间结点
leetcode 876. 链表的中间结点 给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。原创 2024-01-18 21:33:01 · 399 阅读 · 2 评论 -
【LeetCode】203. 移除链表元素
203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。原创 2024-01-17 20:43:53 · 616 阅读 · 6 评论 -
【LeetCode】206. 反转链表
206. 反转链表:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。原创 2024-01-17 11:52:34 · 477 阅读 · 0 评论 -
【数据结构与算法】线性表之链表(linked list)
8种链表,八种链表,单向/双向,带头/不带头(哨兵位),循环/非循环,C语言 数据结构 链表。单向链表、双向链表,哨兵位链表,循环链表。链表与顺序表对比,链表与顺序表区别,链表与顺序表优劣,链表与顺序表优劣对比,链表与顺序表优缺点。链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表在逻辑上是连续的,物理上则不一定连续(因为每个节点内存由操作系统分配),节点一般从堆内存申请,堆内存空间是按照一定策略分配的,两次申请的空间可能连续,也可能不连续。原创 2024-01-13 12:39:19 · 457 阅读 · 2 评论 -
【C语言小游戏】贪吃蛇
C语言贪吃蛇原创 2024-01-11 19:22:30 · 2295 阅读 · 7 评论 -
【C语言】数组下标为啥从0开始?下标越界访问一定报错吗?
【C语言】数组下标为啥从0开始?下标越界访问一定报错吗?越界的检查是一种抽查,就像查酒驾一样。C编译器在数组后面设置一些标志位,如果这些标志位的内存被改变值了,那就报错了,不过如果越界超过这些标志位,编译器也是检查不出来的;这也是越界读不报错的原因,仅仅是访问这个内存地址,C编译器并不会察觉。原因是:数组下标访问本质是“指针解引用操作”,而指针又是地址,指针的±运算,+0就是第一个元素的地址。低些版本的,可能访问a[10],a[11],a[12]才报错,访问a[15]开始可能就不报错了。原创 2023-11-18 22:38:54 · 685 阅读 · 0 评论 -
【C语言刷题】#define宏实现一个整数的二进制位的奇数位和偶数位交换
C语言 #define宏 实现一个整数的二进制补码 二进制奇数位和偶数位交换原创 2023-10-18 11:33:08 · 313 阅读 · 5 评论 -
【C语言刷题】模拟实现offsetof宏
offsetof宏 计算结构体成员的偏移量 结构体内存对齐 模拟实现offsetof宏原创 2023-10-18 10:57:37 · 270 阅读 · 5 评论 -
【C语言】#define宏与函数的优劣对比
#define 预处理指令 #define宏 #define标识符宏与函数的对比 宏的优点缺点 函数的优点缺点原创 2023-10-17 18:53:11 · 804 阅读 · 2 评论 -
【C语言】.c源文件从编译到链接生成可.exe执行程序的过程
.c源文件 编译 链接 预编译 编译 预处理预编译 汇编 .o目标文件 汇编代码 .exe二进制程序 程序员的自我修养 编译 链接 装载 库原创 2023-10-15 22:33:41 · 2663 阅读 · 5 评论 -
【C语言】结构体中的柔性数组
结构体柔性数组原创 2023-10-07 21:29:11 · 238 阅读 · 7 评论