算法和数据结构
文章平均质量分 86
他过江
分享C/C++/Linux/Qt/音视频/FFmpeg/OpenCV等相关技术。
展开
-
理解linux内核数据结构尾队列(Tail queue)
Tail queue位于/usr/include/x86_64-linux-gnu/sys/queue.hqueue.h包含以下几种数据结构:双链表(List) 单链表(Singly-linked List) 单链尾队列(Singly-linked Tail queue) 简单队列(Simple queue) 双链尾队列(Tail queue) 循环队列(Circular queue)Tail queue几个参数含义HEADNAME链表头结点的名字,用TAILQ_HEAD(H原创 2021-11-29 15:53:12 · 2363 阅读 · 0 评论 -
代码配图快速理解红黑树
红黑树(英语:Red–black tree)是一种自平衡二叉查找树,典型用途是实现关联数组。红黑树的操作有着良好的最坏情况运行时间,并且在实践中高效:它可以在O(log n)时间内完成查找、插入和删除,这里的n是树中元素的数目。红黑树的性质红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:节点是红色或黑色。 根是黑色。 所有叶子都是黑色(叶子是NIL节点)。 每个红色节点必须有两个黑色的子节点。(从每原创 2021-10-20 01:36:52 · 244 阅读 · 0 评论 -
平衡二叉树快速入门
定义平衡因子二叉树结点的左子树与右子树的高度(深度)差即为该结点的平衡因子(BF,Balance Factor)。最小失衡子树代码实现《大话数据结构》里的平衡二叉树是用平衡因子实现的,这种方法效率略高,却实现复杂。《数据结构与算法分析C++》里是用的高度实现的。接下来会分别介绍两种实现方式。利用平衡因子实现平衡二叉树这种实现方式复杂的地方在于平衡因子的更新。插入节点插入流程:按二叉排序树插入 插入后判断是否平衡 平衡则修改平衡因子 不平衡则判断类型,单旋..原创 2021-08-25 00:05:35 · 324 阅读 · 0 评论 -
字符串查找匹配算法KMP
是什么:在主字符串中查找子字符串,返回第一次出现的子字符串的第一个字符索引为什么:暴力查找字符串的时间复杂度O(n*m),kmp时间复杂度O(n+m)。n是主串长度,m是模式串长度。例如待查找字符串ababababca(本文统称为主串s),要匹配的字符串abababca(本文统称模式串p)按照暴力查找的逻辑,主字符串匹配失败后接着回溯到首字符的下一个位置开始匹配,这样效率是很低的。而KMP可以在匹配失败的时候主串不回溯,只回溯模式串,这一行查找速度就快了很多。部分匹配表,即PMT.原创 2021-05-16 04:09:49 · 567 阅读 · 1 评论 -
C++模板实现十大排序算法
所有排序算法默认升序排序。1. 冒泡排序适用:元素个数小的情况template<typename T>void Swap(T &lhs, T&rhs){ T tmp = rhs; rhs = lhs; lhs = tmp;}template<typename T>void bubble_sort(T *arr, int n){ for (int i = 0; i < n - 1; ++i) { ..原创 2021-05-15 00:23:50 · 680 阅读 · 0 评论 -
冒泡排序法
1、void bubble_sort(int *pi_array, const int i_size){ int i_last_swap = 0; int i_last_swap_tmp = 0; for (int i = 0; i < i_size; ++i) { i_last_swap = i_last_swap_tmp;原创 2017-04-02 01:11:02 · 353 阅读 · 0 评论