![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
喵Ja
通往财富自由ing
--一位爱猫的程序猿
展开
-
数据结构与算法-AVL树
AVL树AVL树的特点继承关系添加导致的失衡LL - 右旋转(单旋)RR - 左旋转(单旋)LR - RR左旋转,LL右旋转(双旋)RL - LL右旋转,RR左旋转(双旋)代码实现AVLTree补充说明总结AVL树是最早发明的自平衡二叉搜索树之一AVL树的特点平衡因子(Balance Factor):某节点的左右子树的高度差每个节点的平衡因子只有可能是 1,0,-1(绝对值 小于 1 ,称为 “失衡”)每个节点的左右子树高度差不超过 1搜索,添加,删除的时间复杂度是 O(logn)继承关原创 2020-11-16 23:49:45 · 279 阅读 · 2 评论 -
数据结构与算法-二叉树
二叉树树的基本概念有序树,无序树,森林二叉树二叉树的性质真二叉树(Proper Binnary Tree)满二叉树(Full Binary Tree)完全二叉树(Complete Binary Tree)完全二叉树的性质二叉树的遍历练习利用前序遍历树状打印二叉树翻转二叉树计算二叉树的高度判断一棵树是否为完全二叉树前驱节点(predecessor)后继节点(successor)树的基本概念二叉树是树形结构多叉树生活中使用树形结构可以大大提高效率节点根节点(最上面的一个节点,上图的 :1原创 2020-11-10 00:09:02 · 886 阅读 · 1 评论 -
数据结构与算法-二叉搜索树
思考设想在 n 个动态的整数中搜索某个整数?假设使用动态数组存放元素,从第 0 个位置开始遍历搜索,平均时间复杂度:O(n)而维护一个有序的动态数组,使用二分搜索,最坏时间复杂度:O(logn),但是添加,和删除的平均时间复杂度是 O(n)所以针对这个需求,我们可以使用二叉搜索树,添加,删除,搜索的最坏时间复杂度均可优化至:O(logn)二叉搜索树(Binary Search Tree)二叉搜索树是二叉树的一种,是应用非常广泛的一种二叉树,英文简称 BST又被称为:二叉查找树,二叉排序原创 2020-11-10 00:02:02 · 263 阅读 · 0 评论 -
数据结构与算法-队列
目录队列(Queue)队列的接口设计练习:用栈实现队列双端队列(Deque)接口设计循环队列(Circle Queue)循环双端队列%运算符优化队列(Queue)队列是一种特殊的线性表,只能在头尾两端进行操作队尾(rear):只能从队尾添加元素,一般叫做offer,入队对头(front):只能从队头移除元素,一般叫做poll,出队先进先出的原则,First In First Out , FIFO队列的接口设计int size(); //元素的数量boolean isEmpty();原创 2020-11-04 22:59:05 · 227 阅读 · 0 评论 -
数据结构与算法-栈
目录栈(Stack)栈的接口设计栈(Stack)栈是一种特殊的线性表,只能在一端进行操作往栈中添加元素的操作,一般叫做push,入栈从栈中移除元素的操作,一般叫做pop,出栈(只能移除栈顶元素,也叫做:弹出栈顶元素)后进先出的原则,Last In First Out , LIFO注意这里的"栈"与内存中的"栈空间"是两个不同的概念栈的接口设计int size(); //元素的数量...原创 2020-11-03 22:48:24 · 108 阅读 · 0 评论 -
数据结构与算法-链表
目录链表链表的设计接口设计清空元素添加元素node方法用于获取index位置的节点删除元素 - remove(int index)SingleLinkedList代码推荐一个神奇的网站双向链表双向链表 VS 动态数组单向循环链表双向循环链表链表动态数组有个明显的缺点:可能会造成内存空间的大量浪费。能否用多少就申请多少内存,链表就可以办到这一点链表是一种链式存储的线性表,所有元素的内存地址不一定是连续的链表的设计接口设计链表的大部分接口和动态数组是一致的。把不需要修改的方法写一个父类用来原创 2020-11-01 21:55:37 · 260 阅读 · 3 评论 -
数据结构与算法—复杂度
目录什么是算法斐波那契(fibonacci number)如何判断一个算法的好坏大O表示法(Big O)对数阶的细节常见的复杂度斐波那契函数的时间复杂度分析斐波那契的线性代数解法-特征方程F算法的优化方向多个数据规模的情况什么是算法算法是用于解决特定问题的一系列的执行步骤//计算a跟b的和public static int plus(int a,int b){ return a+b;}//计算1+2+3+...+n的和public static int sum(int n){ int原创 2020-10-27 00:12:46 · 191 阅读 · 2 评论 -
数据结构与算法-动态数组
目录什么是数据结构线性表数组动态数组接口设计基本功能代码及实现泛型对象数组内存管理细节null的处理什么是数据结构数据结构是计算机存储,组织数据的方式线性结构:线性表(数组,链表,栈,列队,哈希表(数组))树形结构:二叉树(AVL树,红黑树,B树,堆,Trie,哈夫曼树,并查集)图形结构:邻接矩阵,邻接表线性表线性表是具有n个相同类型元素的有限序列(n>=0)a1 是首节点(首元素),an是尾节点(尾元素)a1是a2的前驱,a2是a1的后继数组数组是一种顺序存储的线性表,所有原创 2020-10-28 01:19:13 · 126 阅读 · 0 评论