Leetcode 0010. Regular Expression Matching
10. Regular Expression MatchingGiven an input string s and a pattern p, implement regular expression matching with support for '.' and '*' where: '.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire input string (not partial). Example 1: 123Input: s = "aa", p = "a"Output: falseExplanation: "a" does not match the entire string "aa". Example...
Leetcode 0009. Palindrome Number
9. Palindrome Number题目Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward. Example 1: 12Input: 121Output: true Example 2: 123Input: -121Output: falseExplanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome. Example 3: 123Input: 10Output: falseExplanation: Reads 01 from right to left. Therefore it is not a palindrome. Follow up: Coud you solve it without converting...
从Socket编程到QUIC协议(Computer-Networking)
计算机网络学习计算机网络体系结构物理层数据链路层网络层传输层应用层计算机网络计算机网络体系结构物理层数据链路层网络层传输层应用层
从逻辑门到多核CPU的硬件(Computer-Organization)
计算机组成学习计算机系统概论数据的表示和运算系统总线概念指令系统概述CPU的功能和基本结构总线概述I/O系统基本概念计算机组成计算机系统概论数据的表示和运算系统总线概念指令系统概述CPU的功能和基本结构总线概述I/O系统基本概念
从线性表到分布式(Data-Structures)
数据结构学习绪论线性表栈、队列、数组串树与二叉树图查找排序设计模式之禅 大话设计模式 数据结构与算法分析.C语言描述 大话数据结构 算法导论绪论线性表栈、队列、数组串树与二叉树图查找排序
再学习《C程序设计语言》
作为有 C 语言基础的学习者,我整理《C 程序设计语言 第二版》(2004 年版本)这本旧书时倒没费太多功夫。不过得说句实话,这本书里的内容和现在的 C 语言差异不小。要是你刚入门,我真心不建议只啃这本书单打独斗,多去逛逛开源社区,看看大佬们写的开源项目,在实战里摸索,收获肯定比光看书多得多! 导言类型、运算符与表达式控制流函数与程序结构指针与数组结构输入与输出导言:类型、运算符与表达式:控制流:函数与程序结构:指针与数组:结构:输入与输出: 通读此书后,我深刻意识到,书中函数实现的思想内核才是真正的精华所在,这些精妙的思维方式远比单纯的知识罗列更具价值。书中设置的习题也颇具匠心,对编程学习有浓厚兴趣的同学,若能深入钻研,定能收获颇丰。 此次阅读既是学习新程,也是对旧知的梳理与巩固。浏览过程中,许多熟悉的概念重焕清晰,还挖掘出不少被忽略的细节,让知识体系更加完善。虽暂时仅完成主体内容复习,但这只是新起点。后续我会合理规划时间,认真解答课后习题,通过练习让书中思想落地生根,将理论转化为实践能力,稳步前行在编程之路上。
Leetcode 0004. Median of Two Sorted Arrays
4. Median of Two Sorted Arrays题目There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). You may assume nums1 and nums2 cannot be both empty. Example 1: nums1 = [1, 3] nums2 = [2] The median is 2.0 Example 2: nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5 题目大意给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m +...
Leetcode 0007. Reverse Integer
7. Reverse Integer题目Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Example 2: Input: -123 Output: -321 Example 3: Input: 120 Output: 21 **Note:**Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−2^31, 2^31 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows. 题目大意给出一个 32 位的有符号整数,需要将这个整数中每位上的数字进行反转。注意:假设我们的环境只能存储得下 32...
Leetcode 0005. Longest Palindromic Substring
5. Longest Palindromic Substring题目Given a string s, return the longest palindromic substring in s. Example 1: 1234Input: s = "babad"Output: "bab"Note: "aba" is also a valid answer. Example 2: 123Input: s = "cbbd"Output: "bb" Example 3: 123Input: s = "a"Output: "a" Example 4: 123Input: s = "ac"Output: "a" Constraints: 1 <= s.length <= 1000 s consist of only digits and English letters...
C语言实现二叉搜索树(BST):从增删改查到三种遍历的完整解析
引言二叉搜索树(Binary Search Tree, BST)是一种经典的动态数据结构,因其高效的查找、插入和删除操作(平均时间复杂度O(logn)),广泛应用于数据库索引、缓存系统、排序算法等领域。本文将基于C语言实现一个完整的BST,详细解析其核心原理、关键操作及三种遍历方式,并通过测试用例验证功能正确性。 一、BST基础概念:定义与核心性质1.1 BST的定义二叉搜索树(BST)是一种特殊的二叉树,满足以下性质: 左子树性质:对于任意节点,其左子树中所有节点的键值均小于该节点的键值。 右子树性质:对于任意节点,其右子树中所有节点的键值均大于或等于该节点的键值(注:部分定义要求严格大于,本文采用“大于等于”以支持重复值处理)。 递归结构:左子树和右子树本身也是BST。 1.2...
用C语言文件流实现轻量级图书管理系统:从0到1的实战解析
引言在C语言的学习过程中,文件操作是一个绕不开的核心技能。无论是保存用户数据、记录日志,还是实现小型系统,“如何将数据持久化到本地”都是必须解决的问题。今天,基于之前写的轻量级图书管理系统,通过文件流复现,带你深入理解C语言文件流的核心概念(如文件指针、文本/二进制模式、文件读写逻辑),并展示如何用文件流替代内存存储,解决小型系统的实际需求。 一、为什么选择文件流?——对比内存存储的局限性在开发小型系统时,我们可能会先用数组或链表在内存中存储数据。但内存存储存在两个致命问题: 临时性:程序退出后,内存数据会被操作系统回收,无法长期保存。 容量限制:内存大小有限(如32位系统约4GB),无法处理大规模数据。 而文件流(File...
动态哈希表:从0到1解析C语言动态数组+链表冲突解决方案
引言哈希表(Hash Map)是一种高效的数据结构,通过哈希函数将键映射到数组索引,实现O(1)时间复杂度的插入、查询和删除操作。但传统静态哈希表(固定容量数组)存在空间浪费(数据少时数组空置)和冲突频发(数据多时哈希碰撞概率激增)的痛点。本文将基于C语言,手把手实现一个动态哈希表,通过「动态数组+链表」的组合方案解决这些问题,并深入解析核心设计与实现细节。 一、设计背景:为什么选择「动态数组+链表」?1.1 传统静态哈希表的痛点传统哈希表通常使用固定大小的数组存储键值对,通过哈希函数计算索引。但这种设计存在两大缺陷: 空间浪费:若初始容量过大,数据稀疏时大量数组空间闲置;若初始容量过小,数据增多时频繁扩容(需重新哈希所有数据),效率低下。 冲突频发:当数据量超过数组容量时,哈希碰撞概率激增,链表法(拉链法)虽能解决冲突,但链表过长会导致查询时间退化为O(n)。 1.2...
C语言文件流:从字符到二进制的三种高效实现
引言在C语言中,文件操作是处理数据存储与传输的核心能力。无论是文本文件还是二进制文件(如图片、视频),复制操作都是最常见的需求。但不同场景下,选择不同的复制方式会直接影响程序的性能与数据完整性。本文将结合三种经典复制实现(字符复制、按行复制、二进制复制),深入解析文件流的核心机制,并给出实战优化建议。 一、文件流基础:文本模式vs二进制模式1.1 文件打开模式的选择C语言中,fopen函数的第二个参数(模式)决定了文件的读写方式。最常用的模式有: 文本模式("r"/"w"/"a"):以字符形式读写,自动处理换行符转换(如Windows的\r 转Unix的 )。 二进制模式("rb"/"wb"/"ab"):以字节形式直接读写,不进行任何转换。 1.2...
Leetcode 0003. Longest Substring Without Repeating Characters
3. Longest Substring Without Repeating Characters题目Given a string, find the length of the longest substring without repeating characters. Example 1: 123Input: "abcabcbb"Output: 3 Explanation: The answer is "abc", with the length of 3. Example 2: 123Input: "bbbbb"Output: 1Explanation: The answer is "b", with the length of 1. Example 3: 1234Input: "pwwkew"Output: 3Explanation: The answer is "wke", with the length of 3. ...
Leetcode 0001.two sum
1. Two Sum题目Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. Example: 1234Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1]. 题目大意在数组中找到两个数,它们的和等于给定的目标值 target,并返回这两个数在数组中的下标。要求每个元素只能使用一次,且保证有且仅有一个解。 解题思路方法一:双层循环(暴力枚举)思路 通过双重循环遍历数组中的每一对元素,检查它们的和是否等于目标值 target。外层循环控制第一个元素的索引...
Leetcode 0002. Add Two Numbers
2. Add Two Numbers题目You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list. You may assume the two numbers do not contain any leading zeros, except the number 0 itself. Example 1: 123Input: l1 = [2,4,3], l2 = [5,6,4]Output: [7,0,8]Explanation: 342 + 465 = 807. Example 2: 12Input: l1 = [0], l2 = [0]Output: [0] Example...
从0到1实现C语言哈希表:底层原理与实战解析
引言在C语言的标准库中,没有像C++ unordered_map或Java HashMap这样现成的哈希表容器。当我们需要在C中实现高效的键值对存储时,手动实现一个哈希表是绕不开的选择。本文将以我近期实现的轻量级哈希表为例,从数据结构设计、核心逻辑解析到内存管理,带您深入理解哈希表的底层原理,并结合实际测试用例验证其正确性。 一、为什么需要自己实现哈希表?在开始代码解析前,先聊聊为什么选择手动实现哈希表: 场景适配:标准库未提供通用哈希表(C++的unordered_map依赖模板,无法直接用于纯C项目)。 性能可控:手动实现可以针对具体场景优化(如自定义哈希函数、内存分配策略)。 学习价值:理解哈希表的核心原理(哈希冲突、负载因子、动态扩容),是进阶C语言开发的必经之路。 本文的哈希表实现定位为轻量级字符串键值对存储,适用于配置管理、缓存系统等需要快速查找的场景。 二、数据结构设计:从抽象到具体2.1...
从基础到进阶:常见排序算法的C语言实现与深度解析
引言排序算法是计算机科学中最基础且重要的算法之一,广泛应用于数据库查询、日志处理、数据统计等场景。理解不同排序算法的核心思想、时间复杂度及适用场景,不仅能帮助我们写出更高效的代码,还能在实际工程中根据需求选择最优方案。 本文将以C语言实现为切入点,深入解析插入排序、希尔排序、归并排序、快速排序(双向优化)、堆排序五大经典算法,结合代码逐行分析其底层逻辑,并通过测试用例验证正确性。文末附完整可运行源码。 一、插入排序:从“摸牌”到有序1.1 算法思想插入排序的核心思想是将未排序元素逐个插入到已排序序列的正确位置,类似于整理扑克牌的过程:初始时左手为空(已排序序列),每次从桌面(未排序序列)取一张牌,插入左手已有牌中的正确位置。 1.2 代码实现与解析插入排序代码如下(已修正注释格式): 123456789101112131415void insertion_sort(int arr[], int len) { for (int i = 1; i < len; i++) { // 从第2个元素开始(索引1) if...
C语言单链表操作详解(含二级指针深度解析)
一、简介本文档详细解析一段C语言单链表操作的代码,涵盖头插法插入节点、尾插法插入节点、修改头节点值和打印链表四大核心功能。重点讲解二级指针在链表操作中的作用,帮助理解动态内存管理与指针操作的核心逻辑。 二、前置知识:二级指针的本质2.1 什么是二级指针? 一级指针(Node *head):存储某个节点的内存地址(指向节点)。 二级指针(Node **head):存储一级指针的内存地址(指向“指向节点的指针”)。 2.2 为什么链表操作需要二级指针?在C语言中,函数参数传递是值传递。若链表头指针(head)通过一级指针传递,函数内部对head的修改(如让它指向新节点)只会影响函数的局部副本,外部头指针不会改变。 示例对比: 错误写法(一级指针): 12345void insert_head(Node *head, ElementType new_val) { Node *new_node = calloc(1, sizeof(Node)); new_node->next = head; head = new_node; //...
C语言数组与指针深度解析
引言:为什么需要理解数组与指针的差异?在C语言中,数组和指针是最基础且容易混淆的概念。尤其是*p[](指针数组)和(*p)[](数组的数组)的语法差异,涉及类型优先级、内存布局和操作方式的本质区别。本文通过具体代码示例,结合fruits1(二维数组)和fruits2(指针数组)的对比,深入解析两者的核心差异,并探讨实际开发中的应用场景。 核心概念:*p[]与(*p)[]的类型优先级C语言中,运算符优先级决定了表达式的解析顺序。其中,[](下标运算符)的优先级高于*(解引用运算符)。因此: *p[]会被解析为*(p[]),即数组的指针(指针数组):数组的每个元素是指针; (*p)[]会被解析为(*p)[],即数组的数组(二维数组):数组的每个元素是另一个数组。 用户代码中的fruits1和fruits2正是这两种类型的典型代表: 12char fruits1[][10] = { "apple", "banana", "cherry" }; // 二维数组(数组的数组)char...

