数据结构
你好y
这个作者很懒,什么都没留下…
展开
-
堆
堆就是一个完全二叉树( 1、不能无左孩子,而有右孩子2、只要出现只有一个孩子的节点,后序结点一定是叶子节点(无左右孩子))while包含两种停止条件:1、你已经不比父节点大了2、当前index来到了数组0位置在已经是大根堆的数组中用变量记录下第一个元素就是堆中最大的元素,再将有效区最后一个元素赋值给数组第一个元素,将有效区减减,再heapify调正堆(用父节点和最大的孩子比较,直到走到堆的低,超出数组的长度)堆排序系统中默认的堆定义比较器实现大根堆...原创 2021-10-07 11:21:37 · 79 阅读 · 0 评论 -
二叉树非递归的前、中、后序遍历以及宽度优先遍历思想
先序、中序、后序都是对中间来说的。先序:中左右中序:左中右后序:左右中第一次遍历到自己就打印是先序遍历。第二次遍历到自己才打印,说明左子树遍历完了,中序打印第三次遍历到自己才打印,。。。后序利用栈实现非递归的前序排序弹出头节点就打印,在判断它有没有左右结点,有的话,先将右节点压栈,再将左结点压栈。重复操作,直到栈没有东西可弹为空利用栈后序遍历将s1压栈方式改为中左右(出栈顺序为中右左,头压进去就出来,所以中间的出栈在前),在上面该打印的时候不打印,收集起来(s2的入栈方式为中右左,出栈原创 2021-09-28 16:29:39 · 110 阅读 · 0 评论 -
hash表解决有环单链表判相交
问题:思路:有环单链表判断是否相交时,只需要求出各个链表的相交结点,在判断该相交节点是否是同一个,是,则说明相交。不是时,需要分为两种个情况。当入环节点是同一个:当入环节点不是同一个时,两种情况:核心代码:import java.util.*;/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/原创 2021-09-28 11:00:06 · 83 阅读 · 0 评论 -
一题三解(有无环、无环相交界点、有环相交节点)
结构上有没有一样的内存地址怎么判断有环无环?有环返回第一个入环节点,无环返回nullhash表:无环:遍历节点,先看有没有set集合中,没有加入set集合。遍历到null,则是无环。有环:遍历节点,先看有没有set集合中,没有加入set集合。如果集合中发现已经有了该节点,那他就是入环的第一个节点不用hash表,用快慢指针,一开始都从头部出发,快指针一次走两步,慢指针一次走一次。如果快指针走到头,那说明无环。有环时,s和f会在换上相遇,f回到头节点重新开始一次走一步,s在相遇的位置,一次走一步。再次相原创 2021-09-28 10:29:20 · 95 阅读 · 0 评论 -
复杂链表的复制
思路:利用map集合,k存放老链表,v存放新链表。即通过老链表可以get到对应的新链表的节点。再复制老链表之间节点的关系(next,random)代码:import java.util.*;/*public class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; RandomListNode(int label) { .原创 2021-09-27 20:55:04 · 59 阅读 · 0 评论 -
哈希表和有序表的用法
1、哈希表的key增删改查时间复杂度都是O(1).2、Integer、Double、String、Float等包装类在hash中是按照值传递(而不是地址传递),即之关心值有没有3、自己定义的类(Student),按照引用地址传递,即只关心该对象有没有在里面4、hash表里面放的包装类型,因为是按照值传递,所以值有多大,该hash集合就有多大。但是如果里面放的是引用类型(自己定义的类),因为是按照引用传递,所以里面放的只有8字节,只记录内存地址。增删改查时间复杂度都是O(log N)...原创 2021-09-27 11:03:36 · 123 阅读 · 0 评论 -
堆排序
知识回顾堆是一棵顺序存储的完全二叉树。其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆。其中每个结点的关键字都不小于其孩子结点的关键字,这样的堆称为大根堆。举例来说,对于n个元素的序列{R0, R1, … , Rn}当且仅当满足下列关系之一时,称之为堆:(1) Ri <= R2i+1 且 Ri <= R2i+2 (小根堆)(2) Ri >= R2i+1 且 Ri >= R2i+2 (大根堆)其中i=1,2,…,n/2向下取整;代码:imp.原创 2021-09-22 11:00:51 · 56 阅读 · 0 评论 -
索引的数据结构
索引的数据结构二叉树:当索引为单调递增时,二叉树就变成了链表,查找效率较低红黑树:当数量很大的时候,树的高度会很高,如果数据在叶子节点,红黑树的性能就不高了。存储横向的元素越多,树的高度就降低了—> B-Tree把所有的索引全都放在叶子节点,提取第一个节点形成冗余索引,这个树从左到右是排好序的当B+树高度为3,可以存放的数据达到2千多万(1170* 1170 *16)每页可以存储16KB,大概可以存放1170个节点和下个磁盘的存放位置。被查找的数据会被加载到内存,如果长时间的查找,可能原创 2021-08-30 15:51:13 · 228 阅读 · 0 评论 -
java---二叉树的插入,查找(最大和最小以及特定数值)、中序遍历
代码:package Tree;public class BSTree { public Node root; //记录根节点 public Node current; //构建树节点 class Node{ public Node left; public Node right; public int data; public Node(int data){ this.lef原创 2021-08-30 11:10:59 · 271 阅读 · 0 评论 -
二叉树的基本性质
原创 2021-08-29 09:58:01 · 57 阅读 · 0 评论