从线性表到分布式(Data-Structures)
Created|Data-Structures
|Word Count:58|Reading Time:1mins

Author: Hespethorn
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2022-01-11
C程序项目计划书
刷题项目开源项目学习 2025 6.9 0001.Two-Sum 0001.万年历程序0002.书籍管理程序0003.书籍管理系统基于文件流输入输出acwj 1教程注重实战循序渐进,一步步教你如何用 C 语言写一个可以自己编译自己(自举)、能够在真正的硬件上运行的 C 语言编译器。 db_tutorial 1用 C 从零创建一个简单的数据库 SimpleKerne 1提供了各个阶段完成度不同的内核,可以选择从自己喜欢的地方开始。 TinnySTL 1TinnySTL 是一个轻量级的 C++ STL 实现,它由一系列头文件组成,可以方便地嵌入到你的项目中使用。这个项目涵盖了很多基础的 STL 组件,比如 vector、list、map 等,它们都是在 STL 标准基础上重新实现的,可以帮助你更好地理解 STL 的实现原理,可以用来理解服务器程序的原理和本质。 Webbench 1Webbench...

2022-01-16
C语言日期工具完整实现
引言:为什么需要自己写日期工具?在开发日程管理、财务统计或数据分析类应用时,日期处理是绕不开的需求。虽然C标准库提供了相关函数,但实际场景中往往需要更灵活的功能——比如精确计算两个日期的天数差、自定义格式打印月历,或验证用户输入的日期合法性。今天我们就用C语言手写一个全功能日期工具,覆盖从基础判断到复杂交互的全流程,并拆解核心算法原理。 核心功能清单这个日期工具实现了5大核心功能,覆盖日常开发中最常用的日期操作场景: ✅ 计算日期差:精确计算任意两个日期之间的天数间隔; ✅ 查询星期几:输入年月日,快速得到对应的星期名称; ✅ 打印月历:以表格形式展示当月日期与星期的对应关系; ✅ 打印年历:按月份分开展示全年日历; ✅ 输入验证:自动检查日期合法性(如闰年二月是否有29天)。 关键数据与算法:日期计算的底层逻辑基础数据:月份天数与星期映射代码中定义了两个全局常量数组,它们是整个工具的「数据基石」: 1234const int mon[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; //...

2022-02-13
Vector动态数组复现
引言:为什么需要动态数组?在C语言中,静态数组的大小在编译时确定,无法根据运行时需求动态调整。当数据量不确定或需要频繁插入/删除元素时,静态数组会暴露出明显缺陷:要么浪费内存(声明过大),要么溢出(声明过小)。动态数组(Vector)通过堆内存分配和自动扩容机制,完美解决了这一问题。它支持灵活的元素插入、删除,且内存使用更高效,是实现栈、队列等高级数据结构的基础。 核心结构:Vector的设计哲学结构体定义:封装底层细节代码中的Vector结构体通过三个字段封装了动态数组的核心状态: 12345typedef struct { ElemType *table; // 指向堆空间的数组(存储实际元素) int size; // 当前元素个数(逻辑长度) int capacity; // 数组的最大容量(物理长度)}...

2022-03-12
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; //...

2022-03-30
从0到1实现C语言哈希表:底层原理与实战解析
引言在C语言的标准库中,没有像C++ unordered_map或Java HashMap这样现成的哈希表容器。当我们需要在C中实现高效的键值对存储时,手动实现一个哈希表是绕不开的选择。本文将以我近期实现的轻量级哈希表为例,从数据结构设计、核心逻辑解析到内存管理,带您深入理解哈希表的底层原理,并结合实际测试用例验证其正确性。 一、为什么需要自己实现哈希表?在开始代码解析前,先聊聊为什么选择手动实现哈希表: 场景适配:标准库未提供通用哈希表(C++的unordered_map依赖模板,无法直接用于纯C项目)。 性能可控:手动实现可以针对具体场景优化(如自定义哈希函数、内存分配策略)。 学习价值:理解哈希表的核心原理(哈希冲突、负载因子、动态扩容),是进阶C语言开发的必经之路。 本文的哈希表实现定位为轻量级字符串键值对存储,适用于配置管理、缓存系统等需要快速查找的场景。 二、数据结构设计:从抽象到具体2.1...

2022-03-25
从基础到进阶:常见排序算法的C语言实现与深度解析
引言排序算法是计算机科学中最基础且重要的算法之一,广泛应用于数据库查询、日志处理、数据统计等场景。理解不同排序算法的核心思想、时间复杂度及适用场景,不仅能帮助我们写出更高效的代码,还能在实际工程中根据需求选择最优方案。 本文将以C语言实现为切入点,深入解析插入排序、希尔排序、归并排序、快速排序(双向优化)、堆排序五大经典算法,结合代码逐行分析其底层逻辑,并通过测试用例验证正确性。文末附完整可运行源码。 一、插入排序:从“摸牌”到有序1.1 算法思想插入排序的核心思想是将未排序元素逐个插入到已排序序列的正确位置,类似于整理扑克牌的过程:初始时左手为空(已排序序列),每次从桌面(未排序序列)取一张牌,插入左手已有牌中的正确位置。 1.2 代码实现与解析插入排序代码如下(已修正注释格式): 123456789101112131415void insertion_sort(int arr[], int len) { for (int i = 1; i < len; i++) { // 从第2个元素开始(索引1) if...

