![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 65
hurryddd
对单片机、Linux、IOT感兴趣,热衷于相关新技术的学习与研究
展开
-
顺序表C语言实现详解
1、线性表线性表。全名为线性存储结构,可以理解为即“把所有数据用一根线儿串起来,再存储到物理空间中”。线性表并不是一种具体的存储结构,它包含 顺序存储结构 和 链式存储结构,是顺序表和链表的统称。除了数组,链表、队列、栈等也是线性表结构。顺序存储结构:将数据依次存储在连续的整块物理空间中链式存储结构:数据分散的存储在物理空间中,通过一根线保存着它们之间的逻辑关系非线性表。在非线性表中,数据之间并不是简单的前后关系。比如树、图2、顺序表它用一组连续的内存空间,来存储一组具有原创 2022-04-03 19:47:56 · 3020 阅读 · 1 评论 -
堆排序C语言实现详解
目录一、堆二、堆实现1、堆存储2、堆操作1、插入新的元素2、删除堆顶元素三、堆的应用1、堆排序1、建堆2、排序2、优先级队列3、求 Top K4、求中位数四、堆C语言实现1、数据结构2、操作函数声明3、具体实现4、调试问题五、说明一、堆这里的堆是一种特殊的树结构,跟我们平时使用的物理内存堆没有任何关系。具有以下特点...原创 2020-01-15 18:01:46 · 2171 阅读 · 0 评论 -
二叉查找树及其C语言实现详解
目录一、树(Tree)二、二叉树1、概念2、二叉树的存储方式3、二叉树的遍历三、二叉查找树1、查找操作2、插入操作3、删除操作4、修改操作 5、节点清空和树销毁操作四、支持重复数据的二叉查找树1、每个节点存储多个对象数据2、每个节点存储单个对象数据五、二叉查找树C语言实现1、数据结构2、操作函数声明3、具体实...原创 2020-01-14 14:04:19 · 1849 阅读 · 0 评论 -
哈希算法知多少
目录一、哈希算法简介二、哈希算法的应用1、安全加密2、唯一标识3、数据校验4、散列函数5、负载均衡6、数据分片7、分布式存储三、一致性哈希算法四、说明一、哈希算法简介简单来说,就是将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值哈希算法的特点:从哈希值不能反向推...原创 2020-01-14 14:04:39 · 368 阅读 · 0 评论 -
哈希表C语言实现详解
目录1、数据结构2、操作函数声明3、具体实现1、数据结构#define HASH_TABLE_MALLOC(size) rt_malloc(size);#define HASH_TABLE_REALLOC(p,size) rt_realloc(p,size);#define HASH_TABLE_CALLOC(n,size) rt_calloc(n,size);...原创 2019-12-29 01:16:41 · 2958 阅读 · 0 评论 -
哈希表(散列表)原理
目录一、散列表(Hash Table)1、散列函数2、散列冲突1、开放寻址法:2、链表法:3、方法比较二、散列表设计三、散列表应用1、通过散列表和双向链表的组合,实现一个高效的LRU 缓存淘汰算法:2、通过散列表和跳表的组合,实现Redis有序集合3、通过散列表和双向链表的组合,实现LinkedHashMap参考链接一、散列表(Hash Tabl...原创 2019-12-29 01:11:19 · 329 阅读 · 0 评论 -
Redis知多少
一、Redis简介REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)...原创 2019-12-25 09:48:12 · 86 阅读 · 0 评论 -
跳表C语言实现详解
目录一、跳表(skip list)简介1、时间复杂度分析2、跳表索引动态更新二、跳表数据存储模型三、跳表操作1、初始化2、插入3、删除4、修改5、查询5、销毁参考链接一、跳表(skip list)简介跳表使用空间换时间的设计思路,通过构建多级索引来提高查询的效率,实现了基于链表的“二分查找”。跳表是一种动态数据结构,支持快速的插入、删除、查找...原创 2019-12-25 00:45:25 · 3563 阅读 · 2 评论 -
二分法及其四种变形查找算法C语言实现详解
目录一、二分法二、二分法变形1、变形一:查找第一个值等于给定值的元素2、变形二:查找最后一个值等于给定值的元素3、变形三:查找第一个大于等于给定值的元素4、变形四:查找最后一个小于等于给定值的元素一、二分法1、概念:一种针对有序数据集合的查找算法,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间...原创 2019-12-23 23:39:00 · 667 阅读 · 1 评论 -
通用软件定时器C语言实现
目录一、软件定时器功能描述二、使用场景三、使用注意事项四、数据结构五、操作函数声明六、具体实现一、软件定时器功能描述通用软件定时器是通过一个硬件定时器产生固定的时钟节拍,每次硬件定时器中断时,就对链表中处于运行状态的软件定时器的计数值进行递减,并判断是否递减到0以判断是否超时,如超时则执行相应的回调函数。在执行完超时回调函数后,如该软件定时器模式为单次定时则将定时器...原创 2019-12-16 00:26:58 · 2194 阅读 · 0 评论 -
归并、快速排序及其C语言实现详解
目录参考链接一、归并排序(Merge Sort)二、快速排序(quick sort)参考链接https://blog.csdn.net/MoreWindows/article/details/6684558#commentBoxhttps://blog.csdn.net/insistgogo/article/details/7785038一、归并排序(Merge ...原创 2019-12-04 23:03:28 · 287 阅读 · 0 评论 -
冒泡、插入、选择排序及其C语言实现详解
目录如何分析一个“排序算法”?1、排序算法的执行效率2、排序算法的内存消耗3、排序算法的稳定性数组排序数据结构一、冒泡排序二、插入排序三、选择排序如何分析一个“排序算法”?1、排序算法的执行效率对于排序算法执行效率的分析,一般会从这几个方面来衡量:1. 最好情况、最坏情况、平均情况时间复杂度2. 时间复杂度的系数、常数 、低阶3. 比较次数和...原创 2019-12-02 01:19:15 · 218 阅读 · 0 评论 -
什么是递归
目录一、什么是递归?二、为什么使用递归?递归的优缺点?三、什么样的问题可以用递归解决呢?四、如何实现递归?1、递归代码编写2、递归代码理解五、递归常见问题及解决方案六、如何将递归改写为非递归代码?一、什么是递归?1、递归是一种非常高效、简洁的编码技巧,一种应用非常广泛的算法,比如DFS深度优先搜索、前中后序二叉树遍历等都是使用递归。2、方法或函数调用自身...原创 2019-12-02 01:11:10 · 713 阅读 · 0 评论 -
链式队列C语言实现详解
目录一、队列基础知识二、链式队列数据结构三、链式队列操作函数声明四、创建链式队列1、队列头部动态创建2、队列头部静态创建五、出队列六、入队列七、队列删除八、队列销毁九、验证程序一、队列基础知识在上一篇的顺序队列中已经讲解过了队列的基础知识,这篇主要来讲一下队列的另一种结构 --- 链式队列,本文使用的链表结构为单向链表。同样使用两个指针:h...原创 2019-11-30 23:29:14 · 562 阅读 · 1 评论 -
顺序队列C语言实现详解
目录一、队列基础知识二、顺序队列数据结构三、顺序队列函数声明四、创建顺序队列1、队列头部动态创建2、队列头部静态创建五、出队列六、入队列七、队列删除八、队列销毁九、验证程序一、队列基础知识队列跟栈类似都是“操作受限”的线性表,只不过队列是先进先出结构,队列也有两个基本的操作:入队 enqueue(),放一个数据到队列尾部;出队 dequeue(...原创 2019-11-30 23:22:31 · 970 阅读 · 0 评论 -
链式栈C语言实现详解
目录一、栈基础知识二、链式栈数据结构三、链式栈操作函数声明四、创建链式栈1、栈头部动态创建2、栈头部静态创建五、出栈六、入栈七、栈删除八、栈销毁九、验证程序一、栈基础知识在上一篇的顺序栈中已经讲解过了栈的基础知识,这篇主要来讲一下栈的另一种结构 --- 链式栈,本文使用的链表结构为单向链表,当然了也可以使用双向链表来实现;对于栈的入栈采用的就是...原创 2019-11-30 23:03:18 · 723 阅读 · 0 评论 -
顺序栈C语言实现详解
目录一、栈基础知识二、顺序栈数据结构二、顺序栈增删改查函数声明三、创建顺序栈1、栈头部动态创建2、栈头部静态创建四、出栈五、入栈1、不支持动态扩容2、支持替代扩容六、栈删除七、栈销毁八、验证程序一、栈基础知识 在平时开发中,栈是一种非常常见的数据结构,例如函数调用、系统中断、表达式求值,相信每一个做开发的小伙伴,不管使用语言...原创 2019-11-29 20:14:19 · 484 阅读 · 0 评论 -
动态数组C语言实现详解
目录0、前言一、动态数组数据结构二、动态数组增删改查函数声明三、数组创建1、头部动态创建2、头部静态创建四、元素添加五、元素删除1、根据元素值删除2、根据元素位置删除六、元素修改七、元素查找八、数组清空九、数组销毁十、验证程序0、前言线性表(Linear List)。顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数...原创 2019-11-28 21:19:47 · 1581 阅读 · 1 评论 -
双向链表C语言实现详解
目录二、双向链表增删改查函数声明三、创建链表1、链表头动态创建2、链表头静态创建四、节点添加1、 头插法2、 尾插法3、 位置节点前或后插入五、节点删除六、链表清空七、链表销毁八、验证程序一、双向链表数据结构struct double_list_node{ struct double_list_node *prev; /* pr...原创 2019-11-27 17:08:56 · 1403 阅读 · 0 评论 -
单向链表C语言实现详解
目录一、单向链表数据结构二、单向链表增删改查函数声明三、创建链表1、链表头部动态创建2、链表头部静态创建四、节点添加1、 头插法2、 尾插法3、 位置节点前或后插入五、节点删除六、链表清空七、链表销毁八、验证程序一、单向链表数据结构struct singal_list_node{ struct singal_list_node...原创 2019-11-25 20:16:51 · 426 阅读 · 0 评论 -
常见滤波算法区别和应用
常见滤波算法区别和应用文章目录常见滤波算法区别和应用常用滤波算法简介1、限幅滤波2、中值平均滤波3、滑动平均滤波4、一阶滤波滤波算法对比常用滤波算法简介1、限幅滤波基本方法:比较相邻n 和 n - 1时刻的两个采样值y(n)和 y(n – 1),根据经验确定两次采样允许的最大偏差。如果两次采样值的差值超过最大偏差范围 ,认为发生可随机干扰 ,并认为后一次采样值y(n)为非法值 ,应予删除 ...原创 2019-11-25 11:38:25 · 3287 阅读 · 0 评论