`
韩悠悠
  • 浏览: 841894 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

队列的java实现

 
阅读更多

        普通队列

        队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。

 

package com.algorithm;

/**
 * 普通队列
 * @author lenovo
 *队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,
 *和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
 *在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,
 *因此队列又称为“先进先出”(FIFO—first in first out)的线性表。
 */
public class MyQueue {

	/**
	 * 底层使用数据
	 */
	private long[] attr;
	/**
	 * 有效数据的大小
	 */
	private int elements;
	
	/**
	 * 队头
	 */
	private int front;
	
	/**
	 * 队尾
	 */
	private int end;
	
	/**
	 * 默认构造方法
	 */
	public MyQueue(){
		attr =new long[10];
		elements =0;
		front =0;
		end =-1;
	}
	
	/**
	 * 带参数构造方法,初始化队列大小 
	 */
	public MyQueue(int maxsize){
		attr =new long[maxsize];
		elements =0;
		front =0;
		end =-1;
	}
	
	/**
	 * 添加数据,插入到队尾
	 * @param value
	 */
	public void intsert(long value){
		attr[++end]=value;
		elements++;
	}
	
	/**
	 * 删除数据,从对头开始
	 */
	public long remove(){
		elements--;
		return attr[front++];
	}
	
	/**
	 * 查看数据
	 */
	public long peek(){
		return attr[front];
	}
	
	/**
	 * 判断是否为空
	 * @return
	 */
	public boolean isEmpety(){
		return elements==0;
	}
	
	/**
	 * 判断是否满了
	 * @return
	 */
	public boolean isFull(){
		return elements==attr.length;
	}
	
	public static void main(String[] args) {
		MyQueue mq = new MyQueue(4);
		mq.intsert(23);
		mq.intsert(45);
		mq.intsert(13);
		mq.intsert(1);
		
		System.out.println(mq.isFull());
		System.out.println(mq.isEmpety());
		
		System.out.println(mq.peek());
		System.out.println(mq.peek());
		
		while (!mq.isEmpety()) {
			System.out.print(mq.remove()+"  ");
		}
		
		mq.intsert(23);
	}
}

 

 

      循环队列

为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。

package com.algorithm;

/**
 * 循环队列
 * @author lenovo
 *为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,
 *并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。
 */
public class MyCycleQueue {

	/**
	 * 底层使用数据
	 */
	private long[] attr;
	/**
	 * 有效数据的大小
	 */
	private int elements;
	
	/**
	 * 队头
	 */
	private int front;
	
	/**
	 * 队尾
	 */
	private int end;
	
	/**
	 * 默认构造方法
	 */
	public MyCycleQueue(){
		attr =new long[10];
		elements =0;
		front =0;
		end =-1;
	}
	
	/**
	 * 带参数构造方法,初始化队列大小 
	 */
	public MyCycleQueue(int maxsize){
		attr =new long[maxsize];
		elements =0;
		front =0;
		end =-1;
	}
	
	/**
	 * 添加数据,插入到队尾
	 * @param value
	 */
	public void intsert(long value){
		if (end==attr.length-1) {
			end=-1;
		}
		attr[++end]=value;
		elements++;
	}
	
	/**
	 * 删除数据,从对头开始
	 */
	public long remove(){
		long value = attr[front++];
		if(front==attr.length){
			front=0;
		}
		elements--;
		return value;
	}
	
	/**
	 * 查看数据
	 */
	public long peek(){
		return attr[front];
	}
	
	/**
	 * 判断是否为空
	 * @return
	 */
	public boolean isEmpety(){
		return elements==0;
	}
	
	/**
	 * 判断是否满了
	 * @return
	 */
	public boolean isFull(){
		return elements==attr.length;
	}
	
	public static void main(String[] args) {
		MyCycleQueue mq = new MyCycleQueue(4);
		mq.intsert(23);
		mq.intsert(45);
		mq.intsert(13);
		mq.intsert(1);
		
		System.out.println(mq.isFull());
		System.out.println(mq.isEmpety());
		
		System.out.println(mq.peek());
		System.out.println(mq.peek());
		
		while (!mq.isEmpety()) {
			System.out.print(mq.remove()+"  ");
		}
		System.out.println();
		
		mq.intsert(23);
		mq.intsert(13);
		mq.intsert(122);
		System.out.println(mq.peek());
		while (!mq.isEmpety()) {
			System.out.print(mq.remove()+"  ");
		}
	}
}

 

 

分享到:
评论

相关推荐

    用数组实现的优先队列(JAVA)

    在Java中,我们可以使用数组来实现优先队列。这篇文章将探讨如何利用数组实现优先队列,并通过提供的`PriorityQ.java`文件来深入理解其实现原理。 1. **优先队列基本概念** 优先队列是一种数据结构,它维护了一个...

    rabbitmq 工作队列 java 实现

    总结来说,通过Java实现RabbitMQ的工作队列,我们可以利用消息队列的优势来处理耗时任务,提高系统性能。同时,结合消息确认、消息持久化和公平调度等特性,可以确保消息的可靠传递和有效处理。在实际应用中,还需要...

    java队列模拟实现

    Java队列模拟实现是一个典型的计算机科学中的数据结构应用,它主要涉及了Java编程语言和队列数据结构。在这个工程中,开发者已经创建了一个基于图形用户界面(GUI)的应用程序,用于演示和操作队列的各种功能。以下...

    java队列实现(顺序队列、链式队列、循环队列)

    在Java中,队列的实现主要有三种:顺序队列、链式队列和循环队列。下面我们将详细探讨这三种队列的实现方式。 1. **顺序队列**: 顺序队列通常是基于数组实现的。在Java中,我们可以使用ArrayList或LinkedList来...

    优先队列算法实现(Java)

    - Java的`java.util.PriorityQueue`是优先队列的实现,它基于二叉堆(通常是最小堆),满足堆的性质:父节点的优先级总是不小于子节点。 - PriorityQueue支持`add()`、`offer()`、`peek()`、`poll()`等方法,分别...

    用Java实现一个队列

    用Java实现一个队列

    JAVA 实现延迟队列的方法

    JAVA 实现延迟队列的方法 JAVA 实现延迟队列的方法是指在 JAVA 中实现延迟队列的方法,即在特定的延迟时间后触发某个事件,这种机制广泛应用于日常开发的场景中,例如用户登录之后5分钟给用户做分类推送、用户多少...

    java多线程模拟队列实现排队叫号

    下面我们将详细探讨如何使用Java实现这样的系统。 首先,我们需要理解队列数据结构。队列是一种先进先出(FIFO,First In First Out)的数据结构,类似于现实生活中的排队。在Java中,我们可以使用`java.util.Queue...

    JAVA 模拟队列的实现

    2 队列的Java实现 在Java中,队列的实现通常涉及以下核心操作: - 插入元素(enqueue):在队列的尾部添加新元素。 - 删除元素(dequeue):移除队列头部的第一个元素。 - 查看队首元素(peek):查看但不移除队列...

    Java队列实现,数据结构

    在这个Java队列实现的数据结构作业练习中,我们将会探讨如何使用Java来创建一个简单的队列,并分析`Queue.java`和`Node.java`这两个文件可能包含的内容。 首先,`Queue.java`很可能是实现队列接口或类的文件。在...

    java利用delayedQueue实现本地的延迟队列

    Java 利用 DelayedQueue 实现本地的延迟队列 DelayedQueue 是 Java 中的一种特殊的阻塞队列,它用于存放实现了 Delayed 接口的对象。这种队列是有序的,即队头对象的延迟到期时间最长。 DelayedQueue 能够满足我们...

    Java消息队列的简单实现代码

    Java消息队列的简单实现代码 Java 消息队列是一种异步处理机制,主要目的是减少请求响应时间和解耦。消息队列的应用场景非常广泛,例如在用户注册时,服务端收到用户的注册请求后,可以将其他操作放入消息队列中,...

    Java实现的线程池、消息队列功能

    这篇博客"Java实现的线程池、消息队列功能"似乎提供了关于如何在Java中实现这两种功能的源码示例。尽管描述部分为空,但从提供的文件名我们可以推测,`CodeReader.java`和`SourcePathManager.java`可能包含了读取和...

    用java实现的队列类

    java2里面没有提供标准类对队列的支持,我就编写了一个用java实现的队列类。可以供参考。

    用数组实现的循环队列(java)

    本篇文章将探讨如何在Java中使用数组实现一个循环队列,通过阅读《用数组实现的循环队列(java)》这篇博文,我们可以深入理解循环队列的工作原理以及其在实际编程中的应用。 循环队列是队列的一种变体,它巧妙地...

    利用Vector类(继承)编写一个先进先出的队列类Queue java实现

    ### 使用Vector类(继承)实现先进先出队列类Queue的Java实现 #### 概述 本篇文章将详细介绍如何利用Java中的`Vector`类来实现一个具有先进先出特性的队列类`Queue`。队列是一种特殊的线性表,只允许在一端进行插入...

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

    - **Queue接口**: Java的`Queue`接口定义了队列的基本操作,可以通过实现这个接口来创建自定义的队列实现。 3. **ArrayDeque示例** ```java import java.util.ArrayDeque; public class QueueExample { ...

    2022年用Java实现HTTP文件队列下载Java教程.docx

    【Java实现HTTP文件队列下载】教程 在2022年的互联网环境下,高效地下载大量分散的HTTP文件成为了一项必要的技能。本教程将详细讲解如何使用Java语言实现HTTP文件队列下载,以解决手动下载数百乃至数千个文件的难题...

    队列的链式实现(java)

    在计算机科学中,队列是一种线性数据结构,遵循“先进先出”(FIFO)的原则,即最早插入的元素最先被删除。...通过这个简单的Java实现,你可以更好地了解链式数据结构的工作原理,并将其应用于其他编程语言和场景。

Global site tag (gtag.js) - Google Analytics