![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Data Structure
文章平均质量分 71
数据结构
无赖H4
人丑嘴不甜,长得难看又没钱!
展开
-
模拟实现HashMap
模拟实现HashMap模拟实现HashMap注意事项关于Set和Map区别:见链接: Set和Map关于HashTable见链接: 哈希表模拟实现HashMapNode:public class Node { public String key; public Integer value; public Node next; public Node(String key, Integer value) { this.key = key;原创 2021-04-15 21:27:17 · 367 阅读 · 0 评论 -
哈希表
哈希表概念哈希函数设计冲突调节负载因子冲突解决闭散列开散列/哈希桶实现自己的哈希表:概念理想的搜索方法:不经过任何比较,一次直接从表中得到想要的搜索元素。构造某种存储结构,通过某种函数(hashfunc)使元素的存储位置与他的关键key之间建立一一映射的关系,在查找的时候,可以很快找到该元素。哈希方法中使用的转换函数称为哈希(散列)函数,构造出的数据结构称为哈希表(HashTable)(后者称为散列表)哈希函数设计常见的哈希函数:1、直接定制法:Hash(key)= A*key+B优点:简原创 2021-04-15 20:10:50 · 320 阅读 · 1 评论 -
Set和Map
Set和MapSet和MapSetSet中的常用方法:MapMap中的常用方法:Set和MapTreeSet和TreeMap在Java中利用搜索树实现的Map和Set;实际上是用的红黑树,而红黑树是一颗近似平衡的二叉搜索树。关于二叉搜索树 :见下面链接:链接HashSet和HashMap在java中利用哈希表实现;Java中使用哈希桶方式解决冲突的;Java会在冲突链表长度大于一定的阀值后,将链表转变为搜索树(红黑树);Set注意:Set继承自Collection接口类Set中只存储了k原创 2021-04-14 14:12:05 · 741 阅读 · 6 评论 -
二叉搜索树原理及操作
二叉搜索树原理构建二叉搜索树查找插入删除原理二叉搜索树(Binary Search Tree BST)又称为二叉排序树,它是一颗空树或者具有以下性质:它的左子树不为空,则左子树上所有节点的值都小于根节点的值它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也是二叉搜索树简单来说:每个结点, 节点左子树中所有的key值,都小于节点的key值; 节点右子树中所有的key值,都大于节点的key值所以:二叉搜索树的中序遍历,一定有序构建二叉搜索树节点:publi原创 2021-04-09 23:24:58 · 563 阅读 · 6 评论 -
排序算法性能分析和海量数据排序问题
排序算法性能分析时间和空间复杂度快速排序的优化海量数据排序问题:时间和空间复杂度整理:排序稳定性时间复杂度空间度复杂度最好最坏最好/平均/最坏最好/平均/最坏冒泡排序有序逆序稳定O(n) / O(n2) / O(n2)O(1)插入排序有序逆序稳定O(n) / O(n2) / O(n2)O(1)选择排序不稳定O(n2) / O(n2) / O(n2)O(1)希尔排序不稳定O(n * log(n)) / O原创 2021-04-08 20:41:16 · 381 阅读 · 4 评论 -
归并排序(重要)
归并排序原理:分解:合并:非递归:原理:归并排序(mergeSort)是建立在归并操作上的一种有效的排序算法,该算法采用分治法。将以有序的子序列合并,得到一个完全有序的序列,即:先使得每个子序列有序,再使得子序列段间有序。如果将两个有序表合成一个有序表,称为:二路归并。我们采用二路归并如图演示:分解的过程,我们可以借助递归,不停的往下分解,直到只有一个元素分解完成。合并的过程,就是我们合并两个有序的数组,我们主要是比较两个元素,小的先放,然后放较大的元素。分解:public static v原创 2021-04-07 23:07:01 · 2976 阅读 · 6 评论 -
快速排序——一看就会,一写就废
快速排序原理:实现:partitionhoare法:实现:挖坑法:实现:前后遍历:实现:原理:1、从待排序区间中选择一个数,作为基准值(pivot);2、Partition:遍历整个待排序区间,将小于等于基准值放在基准值左边,将大于等于基准值的放在基准值右边;3、采用分治思想,对左右两个区间相同方式处理,直到区间长度为1,代表有序,或者区间长度为0,代表没有数据。实现:当我们看见使用相同的方式处理,应该很快想到需要使用递归,但是使用递归,我们需要划定区间,所以需要quickRange,(至于pa原创 2021-04-07 15:32:48 · 693 阅读 · 13 评论 -
排序算法原理及实现
排序算法原理及实现插入排序原理:实现:希尔排序原理:实现:选择排序原理:实现:冒泡排序原理:实现:排序,使一串记录,基于比较,按照递增或者递减的排列起来。通常意义上的排序,都是原地排序(in place sort)插入排序原理:我们将整个区间看做无序区间和有序区间,每次选择无序区间的第一个元素,然后在有序区间的合适位置插入。实现: public static void insertSort(long[] array) { for (int i = 1; i < a原创 2021-04-06 20:52:43 · 382 阅读 · 8 评论 -
了解优先级队列(堆)
优先级队列(堆)堆堆的定义大小堆堆的创建向下调整建堆优先级队列模拟实现优先级队列TOPK问题堆堆的定义把所有元素按照完全二叉树的顺序存储方式存储。堆,堆在逻辑上是一个完全二叉树,实质上是一个顺序表。将元素放入数组中,可以根据二叉树的性质将其还原:假设数组下标为i,如果i为0,代表根节点其双亲节点为 (i -1 ) / 2大小堆将根节点最大的堆叫大堆,根节点最小的堆叫小堆堆中的某个结点值,总是不大于或者不小于其父节点的值堆总是一颗完全二叉树根据有序数组,我们可以推出它是堆,但是原创 2021-04-01 21:58:32 · 414 阅读 · 2 评论 -
二叉树的层序遍历和杨辉三角
二叉树的层序遍历和杨辉三角二叉树的层序遍历杨辉三角之所以把这两个题放在一起,是因为他们的返回值类型都是==List<List< Integer>>==在链表中放入的元素是链表我们可以一起比较学习。二叉树的层序遍历LeetCode题目:链接:二叉树的层序遍历class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List&l原创 2021-03-31 15:09:16 · 1658 阅读 · 4 评论 -
二叉树的部分练习题目
目录相同的树另一个树的子树二叉树的最大深度平衡二叉树对称二叉树二叉树的最近公共祖先二叉树创建字符串相同的树链接: 相同的树思路:先判断根节点是否相同,如果不同则false,然后在判断左子树和右子树class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; }原创 2021-03-30 13:18:46 · 367 阅读 · 6 评论 -
构建二叉树
通过前序遍历序列和中序遍历序列及后序遍历 构建二叉树原创 2021-03-29 14:14:04 · 4164 阅读 · 9 评论 -
二叉树前中后序遍历的递归和非递归实现
目录二叉树遍历前序遍历递归非递归中序遍历递归非递归后序遍历递归非递归二叉树遍历二叉树的遍历分为深度优先和广度优先深度优先又分为前序遍历、中序遍历和后序遍历详见:初识二叉树我们可以理解为对结点的处理顺序在前、中间还是最后例如:前序遍历二叉树的前序遍历递归 public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<原创 2021-03-28 13:41:00 · 540 阅读 · 2 评论 -
二叉树的层序遍历及判断一个二叉树是否为完全二叉树
二叉树的层序遍历及判断一个二叉树是否为完全二叉树原创 2021-03-27 22:17:18 · 1260 阅读 · 2 评论 -
二叉树的基本操作(附代码)
二叉树 的基本操作二叉树定义结点的定义:构建二叉树前、中、后序遍历遍历求结点的个数汇集思想求结点的个数遍历求叶子结点的个数汇集思想求叶子结点的个数求第k层结点个数求二叉树的高度是否存在结点为e的结点是否存在结点为e的结点,返回其结点位置判断 node 在不在以 root 为根的树中,node 一定不是 null二叉树定义详见我的上一篇博客:初识二叉树结点的定义:结点的定义 有数值域,还有左孩子的引用和右孩子的引用,分别表示以左右孩子为根的左子树和右子树public class TreeNode原创 2021-03-26 19:21:01 · 4462 阅读 · 2 评论 -
初识二叉树
初识二叉树树形结构概念二叉树二叉树的基本形态两种二叉树满二叉树完全二叉树树形结构树是一种非线性的数据结构,它由n(n>=0)个有限结点组成。树形结构像一颗倒挂的树。概念1、结点:树由结点组成,根节点没有前驱结点,除了根节点,其余每个结点有且仅有一个前驱,可以有0个或多个后继。N个结点有n-1条边。2、结点的度:一个节点含有的子树的个数称为结点的度;3、树的度:一棵树中,最大结点的度称为树的度。4、叶子结点:度为0的结点称为叶节点。(没有后继的结点)4、树的深度:树中,结点最大层次;原创 2021-03-26 13:16:27 · 3385 阅读 · 10 评论 -
栈和队列的部分OJ题目
部分栈和队列的OJ题目总结原创 2021-03-24 17:53:02 · 375 阅读 · 0 评论 -
模拟实现栈和队列中的常用方法
模拟实现栈和队列中的常用方法栈概念方法模拟实现栈队列概念方法模拟实现队列栈概念栈:是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行插入和删除的叫做栈顶,另一端叫做栈底。栈遵循先进后出(FILO)、后进先出(LIFO) 原则。方法在Java中,对于栈提供了如下方法:返回值类型方法名作用booleanempty()判断栈是否为空Epeek()查看栈顶元素Epop()出栈,并返回出栈元素Epush(E)入栈模拟实现栈可原创 2021-03-21 16:37:19 · 290 阅读 · 8 评论 -
模拟实现LinkedList
模拟实现LinkedListLinkedList模拟实现MyLinkedListMyListNodeMyIteratorMyLinkedListLinkedListLinkedList是一个Java中定义的链表,它是一个双向链表,因为他的每个结点中,可以指向前驱和后继,还具有头节点和尾结点。如下图:模拟实现MyLinkedListMyListNodepublic class MyListNode { public String val; public MyListNode p原创 2021-03-20 22:23:07 · 218 阅读 · 0 评论 -
链表的部分OJ题目
链表的部分OJ题目移除链表元素反转链表链表的中间结点链表中倒数第K个结点合并两个有序链表链表分割删除链表中重复结点相交链表链表的回文结构移除链表元素LeetCode-203 移除链表元素203. 移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。class Solution { public ListNode removeElements(ListNode head, int v原创 2021-03-16 22:45:01 · 379 阅读 · 0 评论 -
初识链表
链表链表的原理链表实现用引用和对象的知识理解链表具体实现结点的定义链表的创建链表的遍历遍历每个元素和计算链表中元素个数找到最后一个结点找到倒数第二个结点找到第n个结点找到链表中是否包含某个元素链表的插入和删除给定前驱结点后的插入给定前驱结点后的删除头插头删尾插尾删总结:链表的原理链表链表——属于线性表,元素与元素之间有相对的顺序,有头部\尾部,还有当前结点cur,前驱结点prev,后继结点next。每个结点是为了组织链表而引入的一个结构,出来保存的元素外,还会保存指向下一个结点的引用。head是一原创 2021-03-09 19:28:44 · 545 阅读 · 6 评论 -
顺序表和模拟实现ArrayList的常用方法
模拟实现ArrayList的常用方法ArrayListArrayList:顺序表顺序表和数组的区别:顺序表中的注意点:ArrayList的常用方法模拟实现ArrayList的常用方法ArrayListArrayList:顺序表我们可以将顺序表的底层理解成为一个数组(可以扩容的数组),但是相比于数组多出一个记录有效数据的计数器size,如:顺序表和数组的区别:上面说,顺序表的底层可以理解为一个数组,但是相比于数组,更加的高级。顺序表可以自己扩容;顺序表严格区分数组容量和元素的个数。所以数组其原创 2021-03-07 14:09:21 · 2729 阅读 · 13 评论 -
求解时间复杂度和空间复杂度
时间复杂度 算法效率时间复杂度评估算法运行时间大O渐进表示法最好/最坏/平均时间复杂度实例:计算耗时算法效率算法效率分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,空间效率被称为空间复杂度时间复杂度:主要衡量一个算法的运行速度。空间复杂度:主要衡量一个算法所需要的额外空间时间复杂度时间复杂度:主要衡量一个算法的运行速度。我们不会直接使用算法的运行时间去衡量,因为无法选定一个不变的客观运行环境,例如:在不同的机器上运行相同的算法,时间可能也会不相同。我们发现一个算法所原创 2021-03-03 14:54:39 · 498 阅读 · 3 评论