数据结构
数据结构
xlshi1996
业精于勤荒于嬉
展开
-
左神算法整理笔记08
左神算法整理笔记08原创 2020-12-05 08:27:44 · 109 阅读 · 0 评论 -
左神算法整理笔记07
左神算法整理笔记07原创 2020-12-05 08:26:41 · 108 阅读 · 0 评论 -
左神算法整理笔记06
左神算法整理笔记06原创 2020-12-05 08:25:54 · 91 阅读 · 0 评论 -
左神算法整理笔记05
左神算法整理笔记05原创 2020-12-05 08:24:49 · 107 阅读 · 0 评论 -
左神算法整理笔记04
左神算法整理笔记04原创 2020-12-05 08:22:24 · 104 阅读 · 0 评论 -
左神算法整理笔记03
一个排序的重要性不仅仅局限于他的功能,思路的重要性重要的排序算法:归并排序、快排、堆排归并排序的思想:分治思想和master时间复杂度公式快排的思路:堆排的思想:原创 2020-11-19 21:51:29 · 172 阅读 · 0 评论 -
左神算法整理笔记02
解析递归行为&&递归的时间复杂度原创 2020-11-17 22:16:34 · 122 阅读 · 0 评论 -
左神算法整理笔记01
1.左神算法基础篇原创 2020-11-17 19:01:07 · 304 阅读 · 0 评论 -
二分查找法的一些细节
二分查找法的一些细节背景:二分查找法适用于有序或者部分有序的查找,但是在实际使用过程中,容易犯错误,要么漏等号,要么少加1.二分查找法模板public int binSerach(int[] nums, int target) { int left = 0; int right = nums.length-1; // 有的是right = nums.length-1 while (left <= right) { // 有的是left < right原创 2020-09-08 14:12:48 · 108 阅读 · 1 评论 -
回溯法
回溯法适合题目回溯法适合由多个步骤组成的问题,每个步骤都有很多选择,例如迷宫找路这种,把迷宫抽象成二维数组,每走一路就有上下左右四种选择,直到到达最终状态解决思路解决回溯问题,实际上就是一个决策树的遍历过程。回溯法解决的问题的所有选项都可以用树状结构进行表示,可以看成穷举法的升级版主要步骤选择列表:二维数组,数组开始位置:终止条件选择路径:用数组存储路径,二维数组改变值标识路径行走策略案例迷宫问题单词搜索** 注:仅用于学习交流**...原创 2020-08-28 19:37:00 · 90 阅读 · 0 评论 -
栈的出栈顺序规律
栈的出栈顺序规律任何出栈的元素后面出栈的元素必须满足一下两点:在原序列中相对位置比它小的,必须是逆序在原序列中相对位置比它大的,顺序没有要求** 注:仅用于学习交流**原创 2020-08-28 19:35:26 · 1270 阅读 · 0 评论 -
搞懂算法-递归
搞懂算法-递归1.什么是递归递归:函数直接或间接调用自己2.什么时候用递归拆解问题可以把规模大的问题变成规模小的同类型问题,然后继续拆解最终可以直接得到解。很多链表和二叉树可以利用递归来解决3.递归的技巧递归主要是三个步骤,每次遇到递归问题就套用这三个步骤去解题第一个步骤:明确函数的功能,先不思考里面的代码怎么写,首先搞清楚这个函数是是干嘛的,实现了什么功能例如://计算n的阶乘int f(int n){ }第二个步骤:寻找递归结束条件,没有结束条件,会陷入死原创 2020-06-16 20:41:52 · 115 阅读 · 0 评论 -
搞懂数据结构-二叉搜索树
搞懂数据结构-二叉搜索树1.背景如果在n个动态的整数中搜索某个整数利用无序动态数组存放整数,搜索的平均复杂度是O(n)利用有序动态数组存放整数,可以使用二分法,最坏时间复杂度是O(logn),但是维护有序数组,添加和删除的时间复杂度是O(n)使用二叉搜索树可以是添加,删除和搜索的最坏时间复杂度优化到O(logn)2.二叉搜索树的性质任意一个节点的值都大于其左子树所有节点的值任意一个节点的值都小于其右子树所有节点的值它的左右子树也是一颗二叉搜索树二叉搜索树存储的元素必须具备可比较原创 2020-06-15 15:26:33 · 161 阅读 · 0 评论 -
搞懂数据结构-二叉树
搞懂数据结构-二叉树使用树形结构可以大大提高效率树形结构是算法面试的重点1.树的基本概念2.二叉树2.1二叉树的特点2.2二叉树的性质2.3 二叉树的分类真二叉树所有的节点的度要么为0,要么为2,没有度为1。满二叉树所有的节点的度要么为0,要么为2;但是所有的叶子节点都在最后一层可以看出满二叉树是真二叉树的特例,所以满二叉树一定是真二叉树,真二叉树不一定是满二叉树完全二叉树对节点从上至下、左至右开始编号,其所有编号都能与相同高度的满二叉树中的编号对应原创 2020-06-15 15:21:53 · 449 阅读 · 1 评论 -
搞懂数据结构-栈和队列(更新版)
搞懂数据结构-栈和队列1.栈注意:这里的栈和内存的栈空间是两个不同的概念栈是一种特殊的线性表,只能在一断进行操作往栈添加元素的操作,叫做push,入栈从栈中移除元素的操作,叫做pop,出栈1.1栈的接口设计int size(); // 元素的数量boolean isEmpty(); // 是否为空void push(E element); // 入栈E pop(); // 出栈E peek(); // 获取栈顶元素,因为只能在栈顶操作,获取其他元素是没有意义的void clear原创 2020-06-14 13:13:25 · 125 阅读 · 0 评论 -
搞懂数据结构-链表(更新版)
搞懂数据结构-链表1.背景动态数组的申请数组大小有个明显的缺点,可能会造成内存空间的大量浪费。那能不能需要用多少就申请多少内存大小呢?链表可以做到这一点。2.单向链表2.1单向链表的设计代码:public class LinkedList<E> { //存储元素的大小 private int size; //指向第一个元素的节点 private Node<E> first; //因为节点类只在本类中使用,所以定义为内部类原创 2020-06-13 21:12:31 · 177 阅读 · 0 评论 -
搞懂数据结构-动态数组
搞懂数据结构-动态数组什么是数组数组是一种顺序存储的线性表,所有元素的存储的内存地址都是连续的。动态数组在很多编程语言中,数组创建后是容量是固定的,但是实际开发中,我们更希望能动态的改变数组的容量;接口设计int size(); // 元素的数量boolean isEmpty(); // 是否为空boolean contains (int element); // 是否包含某个元素void add (int element); // 添加元素到最后面int get (int index)原创 2020-06-11 21:37:39 · 130 阅读 · 0 评论 -
搞懂排序算法-选择排序
搞懂排序算法-选择排序1 选择排序算法思想从序列中找出最大的那个元素,然后与末尾的元素交换位置忽略第一步中找到的最大元素,重复执行步骤1,直到全部元素有序。代码:public static void selectSort(Integer[] array){ for (int end = array.length - 1; end > 0; end--){ //记录最大元素位置 int maxIndex = 0; //找最大元素原创 2020-06-11 20:28:23 · 100 阅读 · 0 评论 -
搞懂排序算法-冒泡排序
搞懂排序算法-冒泡算法1冒泡排序算法思想从头开始比较每一对相邻元素,如果第一个比第二个大,就交换他们的位置,执行完一轮后,最末尾的元素就是最大的元素。这个过程就像一个泡泡慢慢向上冒,因此称为冒泡排序。忽略第一步中找到的最大元素,重复执行步骤1,直到全部元素有序。1.1基础冒泡public static void bubbleSort(int[] array){ //定义冒泡到哪,也就是末尾已经拍好序的不参与比较 for (int end = array.length - 1;原创 2020-06-10 16:36:20 · 108 阅读 · 0 评论 -
搞懂数据结构-树结构
搞懂树结构1.什么是树结构树结构是一种非常重要的非线性结构,反应了数据元素之间的层次关系和分支关系。树的表示方法树型表示法文氏图表示方法凹入图表示法广义表表示法(A(B1(C1,D1,E1),B2(C2),B3)2.树的分类根据树中节点的各子树从左到右是否有次序,能否交换分为有序树无序数3.二叉树二叉树并非是树的特殊情形,它和度数为2的有序树是两种不同的数据结构。3.1二叉树的基本形态空二叉树只有一个根节点根节点只有左子树根节点只有右子树根原创 2020-06-01 07:04:01 · 2210 阅读 · 0 评论 -
搞懂数据结构-栈和队列
搞懂栈和队列1.什么是栈?栈是一种特殊的线性表(被限制的线性表),只允许在表的一端进行删除和插入运算。能够进行运算的一端称为栈顶,另一端称为栈底。每次删除元素称为弹栈pop,每次插入元素称为压栈push。栈按照存储结构又分为顺序栈和链式栈。2.栈的特点运算是按照后进先出的原则进行的。3.栈的基本操作栈是一种特殊的线性表,线性表按照存储结构分为顺序存储和链式存储。同样,栈根据存储结构分为顺序栈和链式栈。3.1顺序栈其中顺序栈是用数组来实现的。将数组下标为0作为栈底,下标为n作为栈顶。顺序原创 2020-05-31 08:08:53 · 207 阅读 · 0 评论 -
搞懂Collection集合-List集合
搞懂Collection集合-List集合学习目标掌握集合提出的背景掌握集合的特点掌握集合的分类掌握集合中的List集合的操作掌握集合的List集合使用场景1.集合提出的背景常用的数据结构有:数组,链表,队列,栈,树和散列表等等。在实际程序上除了内置的数组外,Java把其他的数据结构封装起来做成API,这些API被称为集合类。所以,Java中的容器主要分为数组和集合类。2.集合的特点集合的长度可变,数组的长度固定集合只能存储引用类型(只能存储对象,类似int类型会自动装箱成Int原创 2020-05-28 15:39:43 · 230 阅读 · 0 评论 -
搞懂单链表
线性表的链式存储1.学习目标单链表的定义和基本操作循环链表的定义和基本操作双链表的定义和基本操作链表的经典算法题链表的实际应用场景2.链表的简介线性表根据存储结构可以分为顺序存储和链式存储两大类。顺序存储具有查询快的优点,但是在插入和删除元素功能上,会造成大量元素移动。为了改善这一缺点,引入了链式存储的线性表。本文从单链表,循环链表,双链表递进来讲述链表及其相关操作。2.1单链表上图是链式存储线性表的逻辑结构,分为两部分,其中data是数据域,存放数据元素的值;next是指针域,存原创 2020-05-27 10:24:01 · 255 阅读 · 0 评论