随笔分类 - 数据结构与算法
摘要:1、堆的定义 堆就是用数组实现的二叉树,所有它没有使用父指针或者子指针。 堆就是利用完全二叉树的结构来维护的一维数组。 创建一个堆除了一个简单的一维数组以外,不需要任何额外的空间。 如果我们不允许使用指针,那么我们怎么知道哪一个节点是父节点,哪一个节点是它的子节点呢?节点在数组中的位置index 和
阅读全文
摘要:栈与队列的算法总结 栈与队列实现 含有最小值的栈 两个栈实现队列 一个栈排序另一个栈 含有最小值的栈 思路:用一个辅助栈来记录主栈的最小值,对于主栈来说有两种操作:插入,弹出。 插入:当向主栈插入元素时,有三种情况: 1.当向主栈插入元素后,如果辅助栈为空,则直接将此元素插入辅助栈顶。 2.当向主栈
阅读全文
摘要:原文链接:各种互联网中常见的推荐算法锦集 我们在上网购物、看小说、买电影票的时候,都会遇到各种各样的推荐,给我们推荐一些我们曾经买过或收藏过的同类型产品,或者是推荐一些我们看过的小说题材相同的小说。那这些产品推荐都是如何实现的呢? 我们今天就来聊聊这些“无聊”的算法。 在互联网的应用中,常用的推荐算
阅读全文
摘要:对称加密与非对称加密 对称加密:加密和解密都是用同一个密钥的算法,称作对称加密。 非对称加密:加密和解密需要不同的密钥。 什么是RSA RSA是一种非对称加密算法,它的名字由三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母组成的。 RSA被用于公
阅读全文
摘要:链表: 倒序输出链表 链表的倒数第k个节点 合并两个排序的链表 倒序输出链表 两种思路: 1.利用栈:遍历链表,将链表元素添加的栈中,遍历结束后,从栈顶依次取出元素即可。 2.利用链表:新建一个新链表,遍历旧链表,将元素插入新链表的头指针后面,遍历结束,遍历新链表即可。 这里利用都是栈先进后出的特性
阅读全文
摘要:LRU算法 LRU(Least recently used,最近最少使用)最近使用的数据会在未来一段时期内仍然被使用,已经很久没有使用的数据很有可能在未来较长的一段时间内仍然不会被使用。基于这个思想,会存在一种缓存淘汰机制,每次从内存中找到最久未使用的数据然后置换出来,从而存入新的数据!它的主要衡量
阅读全文
摘要:双向链表的定义 双向链表也是链表的一种,它每个数据结点中都有两个结点,分别指向其直接前驱和直接后继。所以我们从双向链表的任意一个结点开始都可以很方便的访问其前驱元素和后继元素。 第一就是头节点的前驱指针指向NULL空指针。 第二就是尾节点的后驱指针指向NULL指针。 双向链表的结构: 双向链表的操作
阅读全文
摘要:作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguanh/ GitHub : https://github.com/af913337456/ 腾讯云专栏:
阅读全文
摘要:数组算法 完美洗牌算法 窗口大小为K的最大子数组和 寻找最小的k个数 寻找和为定值的两个数 数组中出现次数超过一半的数字 寻找二维数组递增数组的一个数 奇偶数排序 荷兰国旗 删除有序数组中的重复值 完美洗牌算法 c语言随机数如何产生: 利用srand((unsigned int)(time(NULL
阅读全文
摘要:布隆过滤器 布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “一定不存在或者可能存在”。 相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性
阅读全文
摘要:字典树 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高,缺点是内存开销大。 字典
阅读全文
摘要:BF暴力匹配算法 所谓暴力匹配,就是从字符串第一个字符开始,一个一个与被匹配的字符串按顺序比对,如果有一个不配,则字符串右移一位,继续重新开始一个一个比较,直到完全匹配或者匹配结束都没有匹配上。 #include <stdio.h> #include <string.h> //BF暴力匹配字符串 /
阅读全文
摘要:字符串算法 字符串翻转 字符串旋转 数字转字符串 字符串转数字 回文字符串判断 字符串包含 字符串删除 字符串哈希 字符串压缩 十进制数转十六进制数 字符串替换 字符串匹配 第一个只出现一次的字符 字符串翻转 第一种方法: #include <stdio.h> #include <string.h>
阅读全文
摘要:原文地址:http://blog.csdn.net/morewindows/article/details/6684558 作者:MoreWindows 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想 分治法也确实实用,因此很多软件公司的笔试
阅读全文
摘要:二叉树的遍历 先序遍历指的就是先访问本节点,再访问该节点的左孩子和右孩子; 中序遍历指的就是:先访问左孩子,再访问本节点,最后访问右孩子; 后序遍历指的就是:先访问左右孩子,最后访问本节点。 层次遍历:按照树的每一层(高度)进行遍历。 深度遍历 递归实现:先序、中序、后序 非递归实现:先序、中序、后
阅读全文
摘要:栈 栈满足下列两点: 1.栈只能从表的一端存取数据,另一端是封闭的。2.在栈中,无论是存数据还是取数据,都必须遵循"先进后出"的原则,即最先进栈的元素最后出栈。总结:栈是一种只能从表的一端存取数据且遵循 "先进后出" 原则的线性存储结构。 如图:栈存储结构存储 {1,2,3,4} 栈的顺序表实现:
阅读全文
摘要:原文链接:https://blog.csdn.net/abel_liujinquan/article/details/89435686z 作者:https://blog.csdn.net/Abel_Liujinquan 1、二叉树的概念 二叉树:每个节点最多有两个分支(分支的度小于2)的树结构,可为
阅读全文
摘要:直接选择排序 数组分成有序区和无序区,初始时整个数组都是无序区,然后每次从无序区选一个最小的元素直接放到有序区的最后,直到整个数组变有序区。 选择排序的步骤是这样的: 首先,找到数组中最小的元素,将它和数组的第一个元素交换位置。 第二步,在剩下的元素中继续寻找最小的元素,和数组的第二个元素交换位置。
阅读全文
摘要:冒泡算法 冒泡排序:从序列的一端开始往另一端冒泡,依次比较相邻的两个数的大小。 设数组长度为N。 1.每轮比较相邻的前后两个数据,如果前面数据大于或者小于后面的数据,就将二个数据交换。 2.这样每轮对数组的第0个数据到N-1个数据进行一次遍历后,最大或者最小的一个数据就到数组第N-1个位置。 3.
阅读全文
摘要:前言 顺序表的存贮特点是用物理上的相邻实现了逻辑上的相邻,它要求用连续的存储单元顺序存储线性表中各元素,因此,对顺序表插入、删除时需要通过移动数据元素来实现,影响了运行效率。这里介绍线性表链式存储结构,它不需要用地址连续的存储单元来实现,因为它不要求逻辑上相邻的两个数据元素物理上也相邻,它是通过“链
阅读全文