![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
经典数据结构与算法
文章平均质量分 96
数据结构与算法的一些整理
拾牙慧者
会点c++、python;
展开
-
红黑树的实现
如题原创 2021-03-08 12:57:19 · 560 阅读 · 0 评论 -
详细讲解设计跳表的三个步骤(查找、插入、删除)
目录写在前面跳表概要查找步骤插入步骤删除步骤完整代码写在前面关于跳表的一些知识可以参考这篇文章,最好是先看完这篇文章再看详细的思路->代码的复现步骤:Redis内部数据结构详解(6)——skiplist关于跳表的插入、删除基本操作其实也就是链表的插入和删除,所以如果不熟悉的话还得先回顾链表的插入以及删除是怎样的,可以参考:【数据结构基础笔记】【链表】相关代码以及其他语言的写法或者其他思路可以参考:1206. 设计跳表代码参考链接:https://leetcode-cn.com/p.原创 2020-12-03 23:43:15 · 6414 阅读 · 3 评论 -
剑指 Offer 10- I. 斐波那契数列 (从重叠子问题到备忘录到dp数组迭代解法)
斐波那契数列求解方法:1、暴力递归,含有大量冗余计算,时间复杂度O(2^n)2、备忘录递归解ordp动态规划,可以将时间复杂度降为O(n)3、滚动数组优化,将空间复杂度由O(n)降低至O(1)原创 2020-11-24 21:39:40 · 333 阅读 · 0 评论 -
栈与队列在SGI STL的底层实现
栈栈提供push和pop等接口,不提供走访功能,也不提供迭代器。STL中栈不被归类为容器,而被归类为container adapter(容器适配器),这是因为栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可以插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。SGI STL栈的底层实现是用双向队列deque实现的。当然也指定可以vector为栈的底层实现:std::stack<int,std::vector<int>> st;队列STL中队列也不原创 2020-11-20 22:22:55 · 343 阅读 · 0 评论 -
二叉树笔记(深度遍历与广度遍历+13道leetcode题目(深度3道、广度10道))
本文章为结合leetcode题目以及公众号“代码随想录”的文章所做的笔记!感觉代码随想录的题目整理真的很好,比自己盲目刷题好很多。目录1、二叉树小记1、满二叉树与完全二叉树2、二叉搜索树3、平衡二叉搜索树AVL4、二叉树存储方式5、二叉树遍历方式6、二叉树的定义2、二叉树深度优先遍历递归算法书写1、leetcode144题:2、leetcode145题:3、leetcode94题:3、二叉树深度优先遍历迭代算法书写1、先序遍历(迭代法)2、中序遍历(迭代法)3、后序遍历(迭代法)4、二叉树深度优先遍.原创 2020-10-15 13:04:09 · 715 阅读 · 0 评论 -
【数据结构基础】【散列表】
散列表也叫做哈希表(hash table),这种数据结构提供了键(key)和值(value)的映射关系。只要给出一个key,就可以高效查找它匹配的value,时间复杂度接近O(1);哈希函数哈希函数通过某种方式,把key和数组下标进行转换。在java中,每个对象都有属于自己的hashcode,这个hashcode是区分不同对象的重要标识。无论对象自身的类型是什么,他们的hashcode都是一个整型变量。最简单的转化方式是按照数组长度进行取模运算:index = HashCode(Key)%Arra原创 2020-10-05 23:06:23 · 274 阅读 · 0 评论 -
dp笔记:关于DP算法和滚动数组优化的思考
从网上总结了一些dp的套路以及对滚动数组的一些思考,现记录如下,希望以后回顾此类算法时会有所帮助。DP算法经验1、DP算法核心:1、确定【DP状态】2、确定【DP状态转移方程】其中DP状态又需要考虑到两点:1、最优子结构将原有问题化为一个个子问题,即子结构。对于每一个子问题,其最优值均由【更小规模的子问题的最优值】推导过来2、无后效性我们只关心子问题的最优值,不关心子问题的最优值是怎样的得到的。2、DP算法类别以及例题滚动数组优化与背包问题1、01背包问题一共有N件物品,从第i(i原创 2020-10-01 11:00:04 · 1040 阅读 · 0 评论 -
常用算法总结(穷举法、贪心算法、递归与分治算法、回溯算法、数值概率算法)
目录1、穷举法2、贪心算法3、递归与分治算法4、回溯算法5、数值概率算法1、穷举法基本思想:在可能的解空间中穷举出每一种可能的解,并对每一个可能解进行判断,从中筛选出问题的答案。关键步骤:划定问题的解空间,并在该解空间中一一枚举每一种可能的解。注意点:1、解空间的划定必须保证覆盖问题的全部解:只有问题的解集属于解空间集合才能使用穷举法求解。2、解空间集合以及问题的解集一定是离散的集合。即可列的、有限的例1:寻找给定区间的素数分析:最简便的方法就是穷举法,在1-100中对每个整数进行判断。原创 2020-09-25 23:27:34 · 13206 阅读 · 1 评论 -
【数据结构基础应用】【查找和排序算法】
代码参考《妙趣横生的算法.C语言实现》文章目录前言1、顺序查找2、折半查找3、直接插入排序4、选择排序5、冒泡排序6、希尔排序7、快速排序8、堆排序9、排序算法性能比较10、所有算法的code(C语言)前言本章总结查找和排序算法:顺序查找、折半查找、直接插入排序、冒泡排序、简单选择排序、希尔排序、快速排序、堆排序以及排序算法性能比较。1、顺序查找顺序查找就是在文件的关键字结合key[1,2,…n]中找出与给定的关键字key相等的文件记录。步骤描述:1、从文件的第一个记录开始,将每个记录的原创 2020-09-23 23:56:43 · 2435 阅读 · 0 评论 -
【数据结构基础应用】【顺序表】
代码参考《妙趣横生的算法.C语言实现》、《剑指OFFER 名企面试官精讲典型编程题 第2版》等文章目录前言1、合并两个顺序表前言本章总结在看书过程中的一些关于顺序表的算法题并可能含有一些自己的一些疑问。题目数量不定,随阅历增加而增加;1、合并两个顺序表题目要求:有两个顺序存储的线性表,分别存放了一些整数数据,每个顺序表中存放的数据从小到大排列。写一个程序,将两个表合并,生成一个新的顺序表,里面的顺序仍然按照从小到大排列。例如:list1:1,2,4,8,10list2:3,9,原创 2020-09-21 23:51:52 · 435 阅读 · 0 评论 -
【数据结构基础笔记】【树】
代码参考《妙趣横生的算法.C语言实现》文章目录前言1、树的概念2、二叉树3、二叉树的遍历4、创建二叉树5、实例分析前言本章总结:树的概念、二叉树的创建、遍历1、树的概念树结构是以分支关系定义得一种层次结构。树的定义:树是由n(n>=0)个结点组成的有穷集合。在任意的一棵非空树中:1、有且仅有一个称为根(root)的结点2、当n>1时,其余的结点分为m(m>0)个互不相交的有限集合T1,T2,T3,…Tm.其中每个集合本身又是一棵树,并称为跟的子树(SubTree)原创 2020-09-21 18:45:56 · 898 阅读 · 0 评论 -
【数据结构基础笔记】【队列】
代码参考《妙趣横生的算法.C语言实现》文章目录前言1、队列定义2、创建一个队列3、入队列4、出队列5、销毁一个队列6、循环队列的概念7、循环队列的实现8、实例分析前言本章总结:链队列定义,创建,出队入队操作,销毁操作;循环队列的定义以及循环队列的一些基本操作1、队列定义队列是一种先进先出的线性表(FIFO),它要求所有的数据从队列的一端进入,从队列的另一端离开。在队列中,允许插入数据的一端角队尾,允许数据离开的一端叫做队头。队列是一个线性表,既可以是一个顺序表也可以是一个链表。这里重点原创 2020-09-21 14:19:51 · 916 阅读 · 0 评论 -
【数据结构基础笔记】【栈】
代码参考《妙趣横生的算法.C语言实现》文章目录前言1、栈的定义2、创建一个栈3、入栈和出栈操作4、栈的清空、销毁、计算栈的当前容量5、实例分析前言本章总结:栈的定义、创建栈,销毁栈,入栈出栈操作等操作。1、栈的定义栈是一种重要的线性结构。是链表和顺序表的具体形式。stack是一个后进先出的线性表。栈的操作只能限定在这个顺序表的表尾进行,我们称这个地方为栈顶(top),相应的表头称为栈底(bottom)最开始栈中不含有任何数据,叫做空栈,此时栈顶就是栈底。数据从栈顶进入,栈顶栈底分离,栈原创 2020-09-20 22:02:27 · 1228 阅读 · 0 评论 -
【数据结构基础笔记】【链表】
代码参考《妙趣横生的算法.C语言实现》文章目录前言1、链表基础2、创建一个链表3、插入结点4、删除结点5、销毁链表6、实例分析前言本章总结:链表的定义、创建、销毁,结点的插入与删除1、链表基础链表的物理存储结构是用一组地址任意的存储单元存储数据的。在链表结构中,每个数据元素记录都存放在链表的一个结点node中,而每个结点之间由指针将其连接到一起。每个结点由指针域(存放后继结点的位置)、数据域构成。一个链表通常有一个表头,是一个指针变量,用来存放第一个结点地址。链表的最后一个结点的的指原创 2020-09-19 22:44:36 · 600 阅读 · 0 评论 -
【数据结构基础笔记】【顺序表】
代码参考《妙趣横生的算法.C语言实现》文章目录前言1、创建顺序表2、顺序表插入元素3、顺序表删除元素4、顺序表实例分析1、静态2、动态5、顺序表总结前言本章总结:从静态和动态分别进行顺序表的创建、插入、删除、以及实例分析1、创建顺序表1、静态地生成一张顺序表#define MaxSize=100;ElemType Sqlist[MaxSize];int len;//len表示顺序表的长度2、动态地生成一张顺序表#define MaxSize 10typedef int El原创 2020-09-19 16:41:53 · 953 阅读 · 0 评论 -
【数据结构基础笔记】【图】
代码参考《妙趣横生的算法.C语言实现》文章目录前言1、图的概念2、图的存储形式1、邻接矩阵:2、邻接表3、代码定义邻接表3、图的创建4、深度优先搜索DFS5、广度优先搜索BFS6、实例分析前言本章总结:图的概念、图的存储形式、邻接表定义、图的创建、图的遍历(DFS、BFS)、以及最后给出一个实例分析1、图的概念图是由顶点的非空有限集合V与边的集合E(顶点之间的关系)所构成。图分为有向图和无向图。2、图的存储形式最常见的两种:邻接矩阵、邻接表1、邻接矩阵:利用两个数组来存储一个图。原创 2020-09-14 15:47:09 · 637 阅读 · 1 评论 -
霍夫码编码(一种不等长,非前缀编码方式)
霍夫曼编码是一种不等长非前缀编码方式,于1951年由MIT的霍夫曼提出。用于对一串数字/符号编码获取最短的结果,获取最大的压缩效率。特点:不等长、非前缀等长式编码等长编码,意思是对出现的元素采用相同位数的序号进行标定,如下列所示:(这里我们采用三位)假设有这样一串数据:编码后的数据量:12 x 3bit=36bit.思考:对5个数编码没必要每个数是同样的长度,只要五个字符对应的五...原创 2020-04-30 20:55:48 · 5966 阅读 · 0 评论