数据结构&算法
segment-fault
这个作者很懒,什么都没留下…
展开
-
数据结构:二叉搜索树
bst 二叉搜索树(Binary Search Tree)可以用来解决数据的查找问题. 链表,队列等线性数据结构可以存储数据 但在数据的查找,排序方面效率不高 二叉搜索树则兼具了数据的存储和查找,能用来解决涉及数据查找的问题 二叉树的原理和实现: http://blog.csdn.net/qq_21358401/article/details/79329523 二叉搜索树 和...原创 2018-02-24 20:45:28 · 244 阅读 · 0 评论 -
冒泡排序算法
普通排序算法 最简单的排序算法(升序): 假设有n个数据 1. 比较前后两个数a和b 如果 a > b 则交换a和b的位置 2. 重复比较 1和2 2和3 直到 n-1和n为止 3. 循环重复上诉流程n次 代码实现 void sort(int *a, int size) { for (int i = 0; i < size; size++) { for (i...原创 2018-02-24 00:08:07 · 226 阅读 · 0 评论 -
堆排序算法
堆排序 堆排序利用了二叉树的结构 二叉树的原理和实现:http://blog.csdn.net/qq_21358401/article/details/79329523 堆排序的大致过程: 1. 排序选出n个数中最大的一个 2. 在剩下的n-1个数中继续排序选最大的一个 3. 知道只剩下一个最小的数 堆 堆排序用到的堆并非不是管理内存的堆栈,这里的堆指的是一种完全二叉树(叶节点 只...原创 2018-02-23 17:43:19 · 149 阅读 · 0 评论 -
插入排序算法
插入排序 插入排序向一个有序的数据队列中插入一个数 要求插入后数据序列任然有序. 排序思想 将一个待排序的数字 按顺序从后往前插入已排序的队列中. 和扑克牌的插牌过程是一致的: 左手牌是有序牌堆 右手取牌插入左手牌中 并维持左手牌的规律 C/C++实现 void insert_sort_test(int *a, int size) { assert(a != NULL); ...原创 2018-03-15 20:28:22 · 129 阅读 · 0 评论 -
数据结构:通用队列
队列 队列和链表比较类似 不同之处在于队列仅允许从队列头部(front)删除节点 从队列尾部(rear)增加节点 可以将队列看作是栈的反例 队列:先入先出(FIFO) 栈:先入后出(LIFO) 前文已经分析过栈的原理: http://blog.csdn.net/qq_21358401/article/details/7...原创 2018-02-22 20:29:11 · 323 阅读 · 0 评论 -
数据结构:通用链表
linux/list.h linux内核中使用的链表 特点是可以复用,无需反复造轮子. 容易想到的一种链表用法是这样的: struct list{ strucu list *next, *prev; int priv_data; }; 数据被储存在链表的节点内部 通过next和prev移动来访问各个节点上的priv_data. 这样做的问题在于代码几乎没有复用性,不同的数据存...原创 2018-02-06 00:31:52 · 315 阅读 · 0 评论 -
数据结构:通用栈
栈 stack 栈的特点是先入后出 和链表的共同点是插入/删除节点容易 相较之下栈还更简洁一些 因为栈不需要遍历 插入和删除节点都以栈顶节点为基准 不需要像链表那样实现随机访问. 侵入式结构 前面讨论过链表的侵入式实现,实现通用的数据结构 http://blog.csdn.net/qq_21358401/article/details/79266329 栈也同样可以用侵入式的结...原创 2018-02-22 17:28:53 · 361 阅读 · 0 评论 -
数学基础
数学知识 包括指数 对数 级数 指数 指数是幂运算a^n的一个参数 a为底数 n为指数 幂运算表示 指数个底数相乘 公式: 1. a^x * a^y = a^(x+y) 2. a^x / a^y = a^(x-y) 3. (a^x)^y = a^(xy) 4. a^x + a^x = 2 * a^x 5. 2^x + 2^x = 2^(x+1) 指数的运算公式根据 指数个底数相乘...原创 2018-02-22 15:56:32 · 166 阅读 · 0 评论 -
数据结构:哈希表
hash map 链表: 链表将数据串联起来,通过链表头的指针来访问next/prev的链表节点. 更改链表节点的前后指向关系可以增加/删除链表节点. http://blog.csdn.net/qq_21358401/article/details/79266329 哈希表: 哈希表根据键值访问的数据结构,通过映射关系将数据保存到表中. 访问数据时同样的映射规则可以轻易得知对应的保存数据....原创 2018-02-14 16:43:28 · 276 阅读 · 0 评论 -
数据结构:二叉树
二叉树 二叉树和链表有类似之处,链表的每一个节点拥有对应的next和prev 分别指向前后的链表节点. struct list_head { struct list_head *next; struct list_head *prev; }; 二叉树的每一个节点拥有对应的左右节点left和right, 分别指向左右子节点. struct tree_head { st...原创 2018-02-16 00:32:10 · 192 阅读 · 0 评论 -
快速排序算法
快速排序 快速排序用了递归的方法来排序 把待排序数据分为两部分进行排序,按升序或是降序将两边数据放置后,继续二分进行排序. 排序过程 假设有这么一组数据a: 10 23 5 6 89 8 设左值i = 0 j = 5 寻找过程中若i >= j就进入下一层排序 将10设为key 从右边开始寻找比10大的数据 找到了89 此时i = 0,j = 4; 89赋给a[i]后: 89 23 5 6原创 2018-02-07 21:29:49 · 167 阅读 · 0 评论 -
C/C++代码嵌入汇编
在C代码中嵌入汇编代码 在非常看重代码性能的场合,可以通过替换关键过程的代码为汇编代码来提升性能. GCC支持通过关键字 __asm__来嵌入汇编代码段,当编译器编译到这一段代码时,会直接将__asm__字段内的代码链接到目标中. 汇编代码为什么能提升性能? 事实上并不是汇编代码提升了性能,准确的说法应该是合理的汇编代码提高了性能. 因为C/C++代码在编译时同样会被编译为汇编代码,但是编译器原创 2018-02-07 13:59:35 · 1333 阅读 · 0 评论 -
C++智能指针
智能指针 smart ptr 智能指针的目的在于利用栈会被程序自动销毁的特性来进行内存管理, 避免内存泄漏问题,也就是用栈来管理堆. C++标准中的智能指针包括 std::auto_ptr(C++98),std::shared_ptr(C++11),std::unique_ptr(c++11),std::weak_ptr(c++11) 除去标准之外,还有一些比如scoped_ptr(boost)原创 2018-02-04 21:06:25 · 1022 阅读 · 1 评论 -
数据结构:优先队列
优先队列(priority_queue) 优先队列具备队列的通用特性:先进先出(FIFO) 元素由队列尾部插入 出队列的元素则具有当期那队列中最高的优先级 优先队列这种模型 被应用于os的多任务轮转 当可以执行任务时 任务队列中优先级最高的任务被弹出 实现 为了保证队列的push和pop的效率 内部的优先级队列应该用堆排序 // 任务 struct priority_tas...原创 2018-03-16 17:59:58 · 310 阅读 · 0 评论