
C语言
文章平均质量分 63
trust Tomorrow
只要胆子大,万物皆可码
展开
-
高级树结构:B树、B+树、Trie树、线段树与树状数组
数据结构主要优势主要应用场景B树/B+树减少磁盘IO,适合外存数据库索引、文件系统Trie树快速字符串前缀匹配自动补全、拼写检查线段树高效区间查询和更新区间统计、计算几何树状数组简单高效的前缀和查询前缀和问题、逆序对统计。原创 2025-03-20 21:47:14 · 1229 阅读 · 0 评论 -
高级数据结构应用:并查集、跳表、布隆过滤器与缓存结构
并查集是一种用于管理不相交集合的树形结构,通过路径压缩和按秩合并优化,可以实现近乎常数时间的操作复杂度。它在处理连通性问题、查找等价关系和构建最小生成树等场景中有广泛应用。跳表是一种随机化的多层链表结构,在保持插入删除操作简单的同时,实现了对数级别的查找复杂度。它被用于实现有序集合、数据库索引以及作为平衡树的替代方案。布隆过滤器是一种空间效率极高的概率型数据结构,可以快速判断元素是否可能存在于集合中。它广泛应用于缓存过滤、重复检测、拼写检查等需要空间高效的场景。缓存结构。原创 2025-03-20 21:46:30 · 598 阅读 · 0 评论 -
哈希表与哈希算法:原理、实现与优化
哈希表(Hash Table)是一种基于键值对(key-value)存储数据的数据结构,它通过计算键的哈希值来确定数据在内存中的存储位置,从而实现O(1)平均时间复杂度的插入、查找和删除操作。原创 2025-03-19 22:51:08 · 1104 阅读 · 0 评论 -
图结构与算法:从表示到高级算法实现
图数据结构及其算法是解决各种网络相关问题的强大工具。本文介绍了图的两种主要表示方法(邻接矩阵和邻接表),以及常见的图算法,包括遍历算法(DFS 和 BFS)、最短路径算法(Dijkstra、Bellman-Ford 和 Floyd-Warshall)和最小生成树算法(Prim 和 Kruskal)。每种算法都有其适用场景和性能特点,选择合适的表示方法和算法对解决实际问题至关重要。通过深入理解这些算法的原理和实现,可以更有效地解决复杂的网络问题。原创 2025-03-14 11:00:00 · 716 阅读 · 0 评论 -
堆与优先队列:从理论到应用
堆和优先队列是解决优先级相关问题的强大工具,从理论上讲,它们提供了对数级别的时间复杂度,在实践中表现出色。无论是系统编程、算法设计还是数据处理,掌握堆数据结构及其变种,都能帮助开发者设计出更高效的解决方案。原创 2025-03-12 21:30:00 · 843 阅读 · 0 评论 -
平衡树结构详解:原理、实现与性能分析
平衡树结构是解决搜索效率问题的关键数据结构,通过维持树的平衡性来确保操作的对数时间复杂度。平衡树结构是算法和数据结构领域中的经典问题,它们在计算机科学的各个领域都有广泛应用。理解 AVL 树和红黑树等平衡树的原理、实现和性能特点,有助于在设计系统时做出更明智的选择。虽然红黑树因其在插入删除操作上的优势和较好的整体性能在实践中更为常见,但 AVL 树在查询密集型应用中仍然有其独特价值。原创 2025-03-12 20:30:00 · 910 阅读 · 0 评论 -
树结构基础:从二叉树到表达式树
树结构是计算机科学中最重要、最通用的数据结构之一。二叉树及其特例二叉搜索树为许多高效算法提供了基础。掌握树的表示与遍历、基本操作以及应用,对于理解更复杂的数据结构和算法都有很大帮助。二叉搜索树提供了 O(log n) 的查找、插入和删除性能,是许多高性能应用和数据库的基石。而表达式树则展示了树结构在实际问题中的应用,特别是在表达式处理、编译器设计等领域。表达式树不仅能够表示和计算复杂表达式,还能支持各种高级操作,如符号求导、代数变换和优化。原创 2025-03-11 20:15:00 · 938 阅读 · 0 评论 -
栈与队列的实现方法:从基础到应用
在数据结构的世界中,栈与队列是两种最基础且应用广泛的数据结构。它们虽然概念简单,但却能解决许多复杂问题。本文将详细介绍栈和队列的不同实现方法,包括数组实现和链表实现,并通过实际应用案例展示它们的强大功能。栈是一种后进先出(LIFO, Last In First Out)的数据结构,只允许在一端(通常称为栈顶)进行插入和删除操作。栈的基本操作包括:使用数组实现栈是最直观的方法之一。需要一个数组来存储元素,以及一个指向栈顶的指针。关键设计要点动态扩容:当栈满时,创建一个更大的数组(通常是原来的两倍),并将原创 2025-03-11 11:30:00 · 860 阅读 · 0 评论 -
链表完全指南:实现、操作与算法
特性自定义链表STL 链表实现复杂度高,需要手动管理内存和节点低,STL 提供完整实现功能丰富度根据需求定制功能丰富,提供多种操作性能控制可以针对特定应用优化通用实现,性能适中内存使用额外存储指针,每个节点不连续连续内存块,无额外指针内存分配动态分配,大小可变静态数组固定大小,动态数组需要重新分配缓存友好性低,节点分散在内存中高,连续内存有利于缓存命中链表是一种基本而强大的数据结构,具有灵活的内存分配和高效的插入删除操作。原创 2025-03-10 15:04:01 · 890 阅读 · 0 评论 -
数组与字符串的C/C++实现
合适的数据结构选择对于固定大小的数组,使用C风格数组或std::array对于动态大小的数组,使用对于字符串,优先使用而非C风格字符串对于只需读取不需修改的字符串,考虑使用(C++17)性能优化预分配内存以减少重新分配尊重内存局部性(按行访问2D数组)使用移动语义而非复制,特别是大型数组/字符串使用高效的算法(如二分搜索而非线性搜索)内存管理使用标准容器自动管理内存如果使用动态分配的数组,确保正确释放内存避免内存泄漏和悬挂指针边界检查和安全性使用at()方法进行边界检查。原创 2025-03-10 09:45:00 · 420 阅读 · 0 评论 -
C语言学习笔记(二)
由[ ] 包裹的为可选,即[ ] 包裹的可省略初步学习了c语言的一些发展史、特点,四大运行过程,编写了一个Hello Word程序,并成功执行。原创 2024-03-01 11:08:56 · 816 阅读 · 0 评论 -
C 日常记录
一些记录原创 2023-03-24 12:13:33 · 320 阅读 · 0 评论 -
C语言学习笔记(一)
c语言的一些发展史、特点,四大运行过程,编写了一个Hello Word程序,并成功执行。原创 2023-03-22 07:51:00 · 275 阅读 · 0 评论 -
线性表(c)
#include<stdio.h>#include<stdlib.h> #define MAX_SIZE 100#define SIZE 20 typedef int ElemType;typedef struct{ ElemType *elem; ElemType size; ElemType count;}SqList; ElemType InitList(SqList *L) //初始化线性表原创 2021-10-21 21:38:10 · 95 阅读 · 0 评论 -
链式队列示例(c)
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//设计节点typedef struct LQnode{ int data; //值域 struct LQnode *next; //next指针}Lqueue, *LQueue;//设计队列typedef struct queue{ LQueue front; //指向队首节点的指针原创 2021-10-09 14:59:49 · 178 阅读 · 0 评论 -
顺序队列(c示例)
#include <stdio.h>#include <stdbool.h>#include <stdlib.h>#define MAXSIZE 10 //数组队列的最大大小//先入先出typedef struct Queue{ int data[MAXSIZE]; //队列的总大小 int front; //记录队列首元素的下边标量 int rear;原创 2021-10-08 16:25:28 · 156 阅读 · 0 评论 -
链式栈(c示例)
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//链式栈见到那来说就是数组存储链表//栈底为链表的尾,栈顶为链表的首节点//定义节点typedef struct Stacknode{ int data; //数据域 struct Stacknode *next; //链表的next指针}S_node, *s_Node;//定义栈结构体type原创 2021-10-08 14:40:43 · 105 阅读 · 0 评论 -
顺序栈示例(c)
#include <stdio.h>#include <stdbool.h>#include <stdlib.h>// 栈 尽在表尾端(栈顶)进行插入和删除// 后进先出 // 顺序栈#define MAXSIZE 10 //数组最大容量//顺序栈就是功能不完整的数组,栈顶相当于数组的最后一个typedef struct STACK{ int stacksize; //栈最大可用容量 int count;原创 2021-10-01 12:06:51 · 142 阅读 · 0 评论 -
循环双向链表示例(c)
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//循环双向链表typedef struct DNode{ int data; //数据域 struct DNode *prev; //前驱指针 struct DNode *next; //后继指针}Dnode, *DLinkList;DLinkList Init_DLinkList(void);原创 2021-10-01 09:16:00 · 113 阅读 · 0 评论 -
带头结点的双向链表示例(c)
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef struct DLnode{ int data; //数据域 struct DLnode *pre; //前驱指针 struct DLnode *next; //后继指针}Dnode, * DLinklist;DLinklist Init_DLinkList(void); //原创 2021-09-30 18:32:28 · 116 阅读 · 0 评论 -
循环单链表示例(c)带头结点
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef struct LNode{ int data; struct LNode *next;}Node, *LinkList;void Init_List(LinkList *Head); //链表初始化LinkList creat_newNode(int DATA); //创建新节点void Insert_head_li原创 2021-09-30 16:38:09 · 130 阅读 · 0 评论 -
带头结点的单链表(c)
#include <stdio.h>#include <stdlib.h>// 定义单链表数据结构 typedef struct LNode{ int data; //数据域 struct LNode *next; //指针域}Node, *LinkList;void Init_LinkList(LinkList *L); //初始化链表LinkList create_NewNode(); //创建一个新的链表,原创 2021-09-28 22:15:23 · 99 阅读 · 0 评论 -
不带头结点的单链表实现示例(C语言)
不带头结点的单链表实现示例(C语言)大部分代码为参考代码,在此基础上做了以下修改代码较长,需耐心观看其中 LinkList* 等价于 Lnode** 这俩个使用哪一个都可以,前提是在声明结构体的时候要加上。修改的地方有: 在指定位置插入一个元素 删除指定位置的元素 打印链表更加合理心得:最重要的还是懂得原理如何创建一个不带头结点的链表如何实现增、删、改、查、打印等功能重点还是原理。不行就画图,慢慢理清逻辑,下一次不就会了嘛加油!#include<std原创 2021-09-23 21:51:43 · 771 阅读 · 0 评论 -
航班管理系统(C语言)
航班管理系统使用了C语言的标准库进行输入输出、字符串操作和动态内存分配。系统采用结构体和链表存储航班和用户信息,包含用户注册、登录、航班信息管理等功能。通过指针和链表操作,实现了航班信息的增删改查和购票退票功能。原创 2021-09-12 18:22:20 · 9344 阅读 · 1 评论