`
小篮子java的家
  • 浏览: 32609 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

优先队列、treeset内部结构大比拼

阅读更多

 

首先要了解队列的存储结构里是数组,而treeset的存储结构是链表
队列中逻辑结构是二叉堆(小顶堆),treeset中逻辑结构是排序二叉树

先解释一下什么是二叉堆和排序二叉树首先从树说起

 


它的每一个结点都可以有不止一个直接后继,除根结点外的所有结点都有且只有一个直接前驱。

 

 

 

二叉树
在树的基础上,所有结点的子结点个数小于或等于二

 

 

 


完全二叉树
首先在二叉树的基础上,除了最后一个节点所有节点都有左右两个子节点的二叉树

 

二叉堆(小顶堆)
* 是一个完全二叉树
* 最小的元素在顶端  
* 每个元素都比它的父节点大,或者和父节点相等。

 

 

 


排序二叉树
 (1) 是一个二叉树
(2)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(3)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(4)左、右子树也分别为二叉排序树

 

 

 

 


优先队列的和treeset的内部结构展示

 

 

 

 

优先队列和treeset的思路实现

   优先队列
 * 添加元素  首先把要添加的元素加到数组的末尾,然后和它的父节点比较,如果新元素比父节点元素小则交换这两个元素,然后再和新位置的父节点比较,直到它的父节点不
再比它大,结束。  

 

 

 

 

 

 

 * 删除元素  删除元素的过程和添加类似,只不过添加元素是“向上比较”,而删除元素是先“向下比较”:找到要删除元素的下标位置,把最后一个元素移到该位置,然后和它的两个子节点比较
1如果较小的子节点比它小就将它们交换,直到两个子节点都比它大。
2如果移到该位置时,它已经比子节点小则像添加元素那样“向上比较”,直到父结点比它大为止。

 

 

 

 

 

  treeset
 

 

*添加元素  从根节点往下比较,小于往左走,大于往右走,依次循环。直到和其比较的结点为空。空结点的父结点,即为要加入元素的父节点。实例化成结点对象,再比较大小后,将结点挂在其父节点下。

<图略>
 
 *删除元素  找到元素所在的节点位置

1--当结点node有左右子女时,往下所搜与node中的元素最为接近的元素的结点,找到后将该结点的元素值赋给node,让node指向该结点, 接下来删除这个结点。 注意:最后要去掉的节点的子女个数都是小于2的。

2---当结点node只有一个子女时,然后直接将子女链在其父结点后。

3----当结点node无子女时,使其为null,即删除

 

分享到:
评论

相关推荐

    TreeSet 红黑树结构算法

    TreeSet 红黑树结构算法 TreeSet 红黑树结构算法是 Java 中的一种数据结构,它是基于红黑树数据结构的实现。红黑树是一种自平衡的排序二叉树,它可以保证快速检索指定节点。TreeSet 和 TreeMap 之间存在着紧密的...

    Java数据结构--13.Java8数据结构TreeSet.pdf

    《Java8数据结构——TreeSet详解》 在Java集合框架中,TreeSet是一个重要的数据结构,它是Set接口的实现类之一,与HashSet和LinkedHashSet不同,TreeSet具有排序功能,这是因为其不仅继承自AbstractSet,还实现了...

    HashSet和TreeSet_围墙之外

    TreeSet的插入、删除和查找操作的时间复杂度为O(logn),因为内部采用红黑树结构,保证了操作的高效性。与HashSet不同,TreeSet的元素遍历顺序是确定的。 关于iis 6.0,它是Internet Information Services(互联网...

    java 集合框架(TreeSet练习)

    在Java集合框架中,`TreeSet`是一个有序、不可重复的集合,它基于红黑树(Red-Black Tree)数据结构实现。`TreeSet`在许多场景下比其他集合如`ArrayList`或`HashSet`更有优势,因为它的元素总是按特定顺序排列,并且...

    (TreeSet) s.subSet(608, true, 611, true)

    9. **实际应用**:TreeSet常用于需要排序且对性能有较高要求的场景,例如数据库索引、优先队列等。 以上就是关于标题和描述中涉及的Java TreeSet的`subSet()`方法的知识点,以及与之相关的TreeSet特性和使用注意...

    TreeSet集合用法

    介绍TreeSet集合用法,向TreeSet集合中添加类的对象,此类需实现Comparable接口,有实例,供需要的朋友下载学习。

    javaTreeSet实现图书管理系统

    在Java编程语言中,`TreeSet` 是一种集合框架下的数据结构,它实现了SortedSet接口,提供了有序且无重复元素的存储。在这个“javaTreeSet实现图书管理系统”中,我们可以利用`TreeSet`的特性来构建高效且功能完备的...

    java泛型 用了treeset

    使用TreeSet和Comparator,编写TreeSetTest2类,要求对TreeSet中的元素1-元素10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列。 如果需要的话可以下载,有写成文章的。有写了一点中文...

    用java的TreeSet写的一个求并集算法

    `TreeSet`是基于红黑树(Red-Black Tree)的数据结构实现的,它提供了高效的插入、删除和查找操作,同时保持集合中的元素有序。红黑树是一种自平衡二叉查找树,其特点是在任何时刻,任何一个节点的两个子树的高度...

    学生成绩排序(TreeSet方式实现)

    `TreeSet`内部基于红黑树(Red-Black Tree)数据结构,这是一种自平衡的二叉查找树,能够保证插入、删除和查找操作的时间复杂度为O(log n)。由于红黑树的特性,`TreeSet`可以保证元素的有序性,而这个顺序通常是由...

    treemap treeset hashset hashmap 简要介绍

    在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。这些集合类各自有着独特的特性和应用场景,下面将对它们进行详细介绍。...

    treeset 和 hashlist 实现的扑克牌游戏

    本话题将重点关注`TreeSet`和`ArrayList`(而非`hashlist`,可能是`ArrayList`的误写)这两种数据结构在实现扑克牌游戏中的应用。我们将深入探讨它们各自的特点以及在特定场景下的选择。 首先,让我们了解`...

    排序之HashSet和TreeSet的区别

    `TreeSet`则基于`TreeMap`,内部使用红黑树数据结构。它维护了元素的排序,可以按照自然顺序或者自定义比较器的顺序进行排序。自然顺序是指元素本身的`Comparable`接口实现,如果元素类型不实现`Comparable`,则需要...

    数据结构(java版) 刘小晶

    堆(如优先队列)是一种可以快速找到最大或最小元素的数据结构,常见的是最大堆和最小堆。排序算法如冒泡排序、插入排序、选择排序、快速排序、归并排序以及堆排序等,也是数据结构的重要组成部分,它们决定了如何...

    java集合-TreeSet的使用

    TreeSet 是 Java 中的一个集合类,它实现了 SortedSet 接口,并且使用红黑树作为底层数据结构。TreeSet 具有以下主要特点: 排序性:TreeSet 中的元素是有序的,默认按照元素的自然顺序进行排序。或者,可以在创建 ...

    C#的6种常用集合类大比拼

    3. **Queue**:队列是一种先进先出(FIFO)的数据结构,通常用于模拟等待队列。Enqueue方法用于在队尾添加元素,Dequeue方法取出队首元素。 4. **HashSet**:HashSet类提供了一个无序且不允许重复元素的集合。它...

    Java 数据结构 练习来自国外教育平台lynda

    在Java中,可以使用自定义类实现,或者利用TreeSet/TreeMap的内部结构。二叉树常用于搜索、排序和构建平衡树等。 10. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。这些排序算法的理解...

    数据结构(java版)

    8. **堆**:堆是一种特殊的树形数据结构,通常用于实现优先队列。Java的PriorityQueue和Heap类提供了堆的实现。 9. **图**:图由节点和边构成,用于表示对象之间的复杂关系。Java不提供内置的图数据结构,但可以...

    数据结构动画演示.rar

    堆是一种特殊的树形结构,满足最大堆或最小堆性质,常用于优先队列;AVL树是一种自平衡二叉搜索树,保证任何节点的两个子树高度差不超过1;红黑树也是自平衡的,其插入和删除操作比AVL树更高效,广泛应用于Java的`...

    数据结构与算法.pdf

    本文将深入探讨Java中常见的数据结构,包括链表、树、图、数组和队列,以及相关的搜索和查找算法。 1. 链表:链表是一种动态数据结构,每个元素称为节点,包含数据和指向下一个节点的引用。在Java中,可以使用`...

Global site tag (gtag.js) - Google Analytics