数据结构与算法
aaon22357
这个作者很懒,什么都没留下…
展开
-
【Python实现】链表
文章目录判断单链表是否有环创建链表,并实现链表插入操作(不常用,可跳过)python创建有向单链表,并实现基本功能判断单链表是否有环class Node(): def __init__(self,item=None): self.item = item self.next = Nonedef find(head): low,fast = he...原创 2019-05-23 21:55:19 · 140 阅读 · 0 评论 -
【玩转数据结构Part0】总结
讲解十二个数据结构数组栈队列链表二分搜索树堆线段树Trie并查集AVL红黑树哈希表本课程不包含图结构,因为图论领域以算法为主。面试常考的:前六个数据结构(要做到白板编程的水平)面向竞赛:7,8,9最后三个:面试常考,但由于底层复杂,所以不会要求实现,但是必须把原理搞清。文章目录数组Array动态数组栈——先进后出数组Array定义:数组data,数组中元素的个...原创 2019-07-07 19:51:55 · 212 阅读 · 0 评论 -
【玩转数据结构Part1】数组/栈/队列/链表
来自于慕课网上的教学课程《玩转数据结构》笔记 https://coding.imooc.com/class/71.html,该视频一共讲解了十二个数据结构。包括:数组栈队列链表二分搜索树堆线段树Trie并查集AVL红黑树哈希表本课程不包含图结构,因为图论领域以算法为主。面试常考的:前六个数据结构(要做到白板编程的水平)面向竞赛:7,8,9最后三个:面试常考,但由...原创 2019-07-07 19:52:23 · 387 阅读 · 0 评论 -
【玩转数据结构Part2】二分搜索树
文章目录二分搜索树添加元素查询元素遍历前序遍历(也叫深度优先遍历)中序遍历后序遍历层序遍历(广度优先遍历)删除节点删除BST的最小值和最大值删除BST的任意节点二分搜索树定义树的节点类:class TreeNode: def __init__(self,item): self.val = item self.left = None se...原创 2019-07-07 23:43:37 · 167 阅读 · 0 评论 -
【玩转数据结构Part3】集合和映射
集合和映射是一种高级的数据结构,它的底层是由BST实现的。栈和队列的底层,既可以是动态数组,也可以是链表,是BST文章目录集合set(支持增删查)添加元素add查找元素contains删除元素remove总结& 分析映射map(也称字典,支持增删改查)添加元素add查找元素contains删除元素remove修改元素总结& 分析集合和映射的关系集合set(支持增删查)去重操...原创 2019-07-08 15:00:36 · 277 阅读 · 0 评论 -
【玩转数据结构Part4】优先队列和堆
占位~https://blog.csdn.net/aaon22357/article/details/90644168原创 2019-07-08 21:23:37 · 147 阅读 · 0 评论 -
【玩转数据结构Part5】线段树/Trie(字典树)
文章目录线段树Trie(字典树 / 前缀树)添加字符串查询字符串查询前缀总结Trie的局限性线段树线段树不是完全二叉树,线段树是平衡二叉树Trie(字典树 / 前缀树)https://blog.csdn.net/johnny901114/article/details/80711441Trie是多叉树。Trie和字典的区别:如果有n个条目,使用字典查询(底层是二叉树),查询的时间复杂...原创 2019-07-08 21:24:45 · 290 阅读 · 0 评论 -
【玩转数据结构Part6】AVL/红黑树
文章目录AVL(平衡二叉树)插入节点删除节点左旋和右旋(重要)基于AVL的集合和映射红黑树AVL(平衡二叉树)AVL是一种特殊的二叉搜索树。它的特性是:对于任何一个节点,其左右子树的高度差最多等于1。平衡因子:左子树的高度 - 右子树的高度插入节点AVL的插入和删除原理和BST是一样的,不过因为要维护平衡因子,因此在插入和删除之后,需要通过左旋(或右旋)来保证左右子树高度差不超过1.关...原创 2019-07-08 23:34:02 · 231 阅读 · 0 评论 -
【玩转数据结构Part7】哈希表
文章目录哈希表哈希函数的设计哈希冲突的处理链地址法Seperate Chainin开放地址法哈希表哈希表的经典思想就是:时间换空间。哈希表是时间和空间的平衡。使用哈希表需要考虑的两个关键问题是:哈希函数的设计解决哈希冲突优点: 均摊复杂度为O(1),缺点:失去了顺序性(AVL,红黑树可以保证数据有序) 哈希函数的设计哈希函数就是将我们关心的那个key通过哈希函数转换...原创 2019-07-09 23:33:15 · 239 阅读 · 0 评论 -
【算法与数据结构】之图论
文章目录图的深度优先遍历图的广度优先遍历寻路算法图的表示方法:邻接矩阵:适合表示稠密图邻接表:适合表示稀疏图 图的深度优先遍历本博客均以下图为例,给定无向图,和其邻接表adj = {0:[1,2,5,6],1:[0],2:[0],3:[4,5],4:[3,5,6],5:[0,3,4],6:[0,4]},据此写出遍历算法。图的深度优先遍历复杂度:稀疏图(邻接表):O(V+...原创 2019-06-24 12:13:03 · 241 阅读 · 0 评论 -
【Python实现】栈和队列
文章目录栈顺序存储结构(用列表实现栈)链式存储结构(用链表实现)队列链式存储结构(用链表实现)栈有顺序存储和链式存储两种,顺序存储使用列表即可实现,链式存储可以借助链表来实现。栈顺序存储结构(用列表实现栈)顺序存储实现起来简单,占用的空间内存少,但是移动起来时间复杂度高,所以一般用链式存储比较多。https://blog.csdn.net/qq_15256443/article/deta...原创 2019-05-23 21:55:51 · 279 阅读 · 0 评论 -
快速排序
快速排序函数伪代码:partition(A,p,q) //意思是对数组A的[p,q]段元素进行快速排序 x ← A[p] //设置A[p]为主元 i ← p //设置i指针,指向主元元素 for j ← p+1 to q //j指针从主元元素的后一个位置开始,一直移到最后 do if A[j] <= x then i ←...原创 2019-03-25 21:04:11 · 115 阅读 · 0 评论 -
【Python实现】Dijkstra算法
参考 《大话数据结构》第七章 图算法思想说明:迪杰特斯拉算法一般用来求最短路径问题,给定一个初始化矩阵equations[n][n],矩阵中的每个元素equations[i][j]表示顶点i到顶点j的最短距离,我们应该很容易想到这个矩阵的对角元素是0,表示自己到自己的路径是0。先来看代码:# graph是表示各顶点距离的矩阵,v0是起始点,P[v]的值为前驱点坐标,D[v]表示v0到v的最...原创 2019-04-16 18:14:36 · 6487 阅读 · 1 评论 -
【算法导论】网易公开课笔记
目前看到比较全的一个笔记链接https://blog.csdn.net/rye_whiskey/article/details/82216352原创 2019-05-17 10:13:34 · 402 阅读 · 0 评论 -
【算法与数据结构】之排序算法
文章目录总结O(n^2)复杂度1. 选择排序O(n^2)2. 冒泡排序O(n^2)3. 插入排序(最差情况O(n^2))(重要)4. 希尔排序O(n^3/2)O(nlogn)复杂度1. 归并排序O(nlogn)2. 快速排序O(nlogn)3. 快速排序的两个改进(随机快排,Partition2)4. 三路快速排序5. 归并排序和快速排序的衍生问题求逆序对的个数取数组中第n大的元素总结插入排序...原创 2019-05-28 14:04:55 · 241 阅读 · 0 评论 -
【算法与数据结构】之堆排序
文章目录优先队列二叉堆二叉堆中插入元素(ShiftUp)二叉堆中弹出元素(ShiftDown)堆排序Heapify原地堆排优先队列优先队列的主要操作:入队出队(取出优先级最高的元素)例子:在N个元素中选出前M个元素?排序,NlogN优先队列,MlogM总共N个请求,使用普通数组或者顺序数组,最差情况O(n^2)使用堆,O(nlogn)二叉堆最大堆两个特点:二叉树上任何...原创 2019-06-03 22:39:48 · 214 阅读 · 0 评论 -
【算法与数据结构】之并查集
文章目录并查集 Union Find优化方法1:QuickUnion优化方法2:路径压缩并查集 Union Find并查集是一种很不一样的树形结构。常用来解决 连接问题。并查集主要支持两个操作:union(p,q):将p和q合并在一起find(p):查找p在哪个组中常规思路,union操作的复杂度是O(n),find操作的复杂度是O(1)优化方法1:QuickUnion对Quick...原创 2019-06-05 19:02:16 · 259 阅读 · 0 评论 -
【数据结构与算法】C++ STL库介绍
文章目录STL库中的容器介绍序列式容器关联式容器容器配接器各种容器的异同点比较Vector与数组的异同点C++ vector和list的区别STL库中的容器介绍(链接写的非常好) https://www.cnblogs.com/linuxAndMcu/p/10254542.htmlSTL提供了七种容器类型:向量(vector)、双端队列(deque)、列表(list)、集合(set)、多重...原创 2019-07-22 08:53:03 · 1810 阅读 · 0 评论