`
y806839048
  • 浏览: 1106914 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

java数据结构----队列,优先级队列

阅读更多

 

队列和栈就是封装了对数组的操作

 用了两个坐标实现(插入后,删除后)来实现先入先出,一个坐标的话指只能先入后出

1.队列:和栈中的情况不同,队列中的数据项不总是从数组下标0开始,移除一个数据项后,队头指针会指向下标较高的数据项,其特点:先入先出

2.图解

 

 3.队列的实现代码:

  3.1.Queue.java

复制代码
 1 package com.cn.queue;
 2 /**
 3  * 数据结构之队列实现
 4  * @author Administrator
 5  *
 6  */
 7 public class Queue {
 8 private int maxsize;
 9 private long[] queuearray;
10 private int front;
11 private int rear;
12 private int nItems;
13 public Queue(int s){
14     maxsize = s;
15     queuearray = new long[maxsize];
16     front = 0;  ---删除后记录当前的坐标
17     rear = -1;  ---插入后记录当前的坐标
18     nItems = 0; ---当前队列中有的元素计数
19 }
20 public void insert(long j){
21     if (rear == maxsize - 1)  ---满了之后又循环赋值
22         rear = -1;
23     queuearray[++ rear] = j;
24     nItems ++;
25 }
26 public long remove(){
27     long temp = queuearray[front ++];
28     if (front == maxsize)  ---空了之后又循环赋值
29         front = 0;
30     nItems --;
31     return temp;
32 }
33 public long peekFront(){
34     return queuearray[front];
35 }
36 public boolean isEmpty(){
37     return (nItems == 0);
38 }
39 public boolean isFull(){
40     return (nItems == maxsize);
41 }
42 public int size(){
43     return nItems;
44 }
45 
46 }
复制代码

  3.2.QueueTest.java

复制代码
 1 package com.cn.queue;
 2 
 3 public class QueueTest {
 4 public static void main(String[] args) {
 5     Queue q = new Queue(100);
 6     q.insert(100);
 7     q.insert(200);
 8     q.insert(300);
 9     while (q.size()!=0){
10         System.out.print(q.remove()+"   ");
11     }
12     System.out.println("");
13     System.out.println(q.isEmpty());
14 }
15 }
复制代码

4.队列插入和删除的时间复杂度和栈的一样,都是O(1)

5.优先级队列:优先级队列是比栈和队列更加专用的数据结构,他有一个队头和队尾,并且也是从队头移除数据项,不过在优先级队列中,数据项按关键字的值有序,这样关键字最小的数据项总是在队头,而最大的就在队尾。做插入操作时会按照顺序插入到合适的位置以确保队列的顺序。除了可以快速访问最小关键值的数据项,优先队列还必须实现非常快的插入数据项,由此,优先级队列通常使用一种称为堆得数据结构实现。本程序暂时使用数组实现,该实现的插入比较慢,适用于数据量小,并且对速度要求并不高场景。

6.优先级队列的实现:

  6.1.PriorityQ.java

复制代码
 1 package com.cn.queue;
 2 /**
 3  * 优先级队列的实现代码
 4  * @author Administrator
 5  *
 6  */
 7 public class PriorityQ {
 8 private int maxsize;
 9 private long[] queuearray;
10 private int nItems;
11 public PriorityQ(int s){
12     maxsize = s;
13     queuearray = new long[maxsize];
14     nItems = 0;
15 }
16 public void insert(long item){
17     int k;
18     if (nItems == 0)
19         queuearray[nItems ++] = item;
20     else{
21         for(k = nItems - 1;k >= 0;k --){
22             if (item > queuearray[k])
23                 queuearray[k + 1] = queuearray[k];
24             else
25                 break;
26         }
27         queuearray[k + 1] = item;
28         nItems ++;
29     }
30 }
31 public long remove(){
32     return queuearray[-- nItems];
33 }
34 public long peekmin(){
35     return queuearray[nItems - 1];
36 }
37 public boolean isEmpty(){
38     return (nItems == 0);
39 }
40 public boolean isFull(){
41     return (nItems == maxsize);
42 }
43 }
复制代码

  6.2图解

7.优先级队列的效率:插入操作时间复杂度位O(N),删除操作时间复杂度为O(1),后续堆数据结构将改进他。

 

参考:

https://www.cnblogs.com/g177w/p/8444750.html

分享到:
评论

相关推荐

    Java基础复习笔记06数据结构-队列

    ### Java基础复习笔记06数据结构-队列 在计算机科学中,数据结构是存储、组织数据的一种方式,使得我们能够高效地访问和修改数据。队列(Queue)是一种线性数据结构,遵循先进先出(FIFO, First In First Out)原则...

    数据结构--表、栈、队列(java)

    本章节介绍了表、栈和队列三种重要的数据结构及其在Java中的实现方式。表作为一种灵活的线性数据结构,既可以基于数组也可以基于链表实现;栈和队列则是具有特定操作规则的特殊表。这些数据结构在算法设计和软件开发...

    rabbitmq-java-client-bin-3.3.4.zip

    3. **交换机(Exchange)**:交换机是RabbitMQ内部的结构,它根据路由键和预定义的路由策略将消息分发到相应的队列。常见的交换机类型有Direct、Fanout、Topic和Header等。 4. **队列(Queue)**:队列是存储消息的实际...

    数据结构(java描述)

    Java是一种广泛使用的面向对象的编程语言,具有丰富的库支持,使得在Java中实现数据结构变得既方便又强大。在清华大学出版社出版的朱站立编著的《数据结构》一书中,作者深入浅出地讲解了数据结构的基本概念、设计与...

    优先级队列(堆实现)

    在Java中,优先级队列是通过`java.util.PriorityQueue`类来实现的,它基于一个二叉堆(Binary Heap)的数据结构。本文将深入探讨优先级队列的概念、实现方式以及如何在实际编程中使用。 首先,理解二叉堆是理解...

    java-data-struct.rar_数据结构 java_数据结构源码

    9. **堆(Heap)**:Java.util.PriorityQueue类实现了一个最小堆,可以用于优先级队列的操作。 10. **散列表(Hashing)**:散列函数用于将数据映射到固定大小的桶中,Java中的HashMap和HashSet都利用了散列技术来...

    Java数组模拟优先级队列数据结构的实例

    在Java中,实现优先级队列通常会利用内置的数据结构如`TreeSet`或`TreeMap`,因为它们提供了自动排序的功能,可以根据元素的优先级进行调整。 在上述的Java代码示例中,作者通过数组来模拟优先级队列的实现。这个...

    Java队列源码-priority-queue:Java中优先级队列实现的源代码

    Java中的优先级队列(PriorityQueue)是一种特殊的队列,它按照元素的优先级进行排序。在Java集合框架中,PriorityQueue是位于java.util包下的一个类,它实现了Queue接口,但并不保证按照先进先出(FIFO)的顺序进行...

    优先队列-java可以选择属性和升序降序

    优先队列在Java编程中是一种特殊的数据结构,它遵循特定的出队顺序,通常是最小元素(最小优先队列)或最大元素(最大优先队列)先出队。这种数据结构在解决各种问题时非常有用,例如任务调度、事件驱动编程、搜索...

    Java数据结构和算法-第二版-高清扫描版-带目录书签

    《Java数据结构和算法》第二版是一本深入探讨Java编程中数据结构与算法的权威书籍。这本书涵盖了在软件开发中至关重要的基础知识,旨在帮助程序员提升解决问题的能力和代码效率。高清扫描版提供了清晰的文本和图表,...

    用Java实现数据结构中的队列

    7. **优先级队列** 对于需要根据优先级处理元素的情况,可以使用`PriorityQueue`。它是一个基于最小堆的数据结构,支持高效地获取优先级最高的元素。 通过理解这些基本概念和代码示例,你可以轻松地在Java项目中...

    Java-C-JS数据结构与算法合集

    《Java-C-JS数据结构与算法合集》是针对编程领域的三大主流语言——Java、C和JavaScript,深入探讨数据结构与算法的宝贵资源。数据结构是计算机存储、组织数据的方式,而算法是解决问题的精确步骤,它们是软件开发的...

    数据结构试验2-栈和队列实验报告含源码

    在某些特定情况下,还有优先级队列,其中元素按照优先级排序。 实验报告通常包括以下部分: 1. 实验目的:明确学习栈和队列的目的,比如理解其工作原理,掌握如何实现和应用这些数据结构。 2. 知识回顾:解释栈和...

    Java队列源码-simulation-queue-priory-pso:文章“队列优先级优化算法:用于集成过程的新颖任务调度”的源代码(Ja

    优先级队列在Java中通过`java.util.PriorityQueue`类实现,这个类是一个无界并发容器,它不保证队列的元素顺序,而是基于最小堆的数据结构来维护元素的顺序,使得每次删除元素时都是当前队列中优先级最高的元素。...

    java-data-structures-algorithms:Java 数据结构算法

    Java 数据结构算法 使用 Java 的数据结构算法 先决条件 git 2.6+ Maven 3+ Java 8+ 排序 、 、 、 、 、 、 搜索 二进制, 顺序 数据结构 堆 堆栈数组, 堆栈链接 队列 数组或链接 最小/ 最大优先级队列 ...

    Java数据结构与算法(第二版)

    ### Java数据结构与算法(第二版) #### 数据结构概述 数据结构是计算机科学的一个核心概念,它主要关注如何在计算机程序中组织、管理和存储数据,以便可以高效地访问和修改这些数据。良好的数据结构选择能够极大...

    java实现数据结构

    下面将详细介绍Java中实现链表、栈、队列、优先级队列以及哈希表这些基本数据结构的方法。 首先,我们来看链表。链表是一种线性数据结构,其中的元素不连续存储,而是通过指针连接。Java中的`LinkedList`类实现了`...

    java数据结构与算法分析

    ### Java数据结构与算法分析知识点概述 #### 一、引言 《Java数据结构与算法分析》这本书由Robert Lafore撰写,是一部深受好评的数据结构教材。本书不仅适合初学者了解和掌握基本的数据结构和算法概念,而且对于...

    Java数据结构和算法(第二版)+随书源代码+applet小程序

    《Java数据结构和算法(第二版)》是一本专为希望深入理解Java编程中的数据结构与算法的读者设计的书籍。这本书的特点是从基础知识逐步引导读者进入复杂领域,通过结合实际的Applet小程序,使得理论知识变得生动直观。...

Global site tag (gtag.js) - Google Analytics