`

Java数组队列ArrayQueue

阅读更多

  队列是一种“FIFO”先进先出的数据结构.可以想象每年在火车站中买票的人群所组成的"队列"。

  |队员1 队员2 队员3 队员3 队员4 队员5 队员6 队员7 队员8|

     ^                                                                     ^

    想象两个指针 一个指向队头 一个指向队尾,加人到队列中是从队尾入的,出队是从队头出队的。 

队列接口:

 

    

/**
 * 队列FIFO的接口
 * 
 * @author 鼎鼎
 * 
 * @param <E>
 */
public interface Queue<E> {

	/**
	 * 入队: 从队尾加入一元素
	 * 
	 * @param target
	 */
	public void add(E target);

	/**
	 * 出队: 移走队头元素
	 * 
	 * @param target
	 * @return 当前队头元素
	 */
	public E remove();

	/**
	 * 当前队列中的元素个数
	 */
	public int size();

	/**
	 * 判断当前队列是否为空
	 * 
	 * @return
	 */

	public boolean isEmpty();
	/**
	 * 只是返回队头元素
	 * @return
	 */
	public E front();

}

 数组队列的代码实现:

 

     

public class ArrayQueue<E> implements Queue<E> {

	private E[] data;

	// 当前队列中元素的大小
	private int size;

	private int front;

	private int rear;

	public ArrayQueue() {
		data = (E[]) new Object[20];
		size = 0;
		front = 0;
		rear = 0;
	}

	public void add(E target) {
		if (isFull()) {
			
			enlarge();
	     //数组队列满后,需要扩充,记住扩充后要将front的值归0
			front=0;
		}
	
		rear = (front + size) % data.length;
		
		data[rear] = target;

		size++;
	}

	public boolean isEmpty() {

		return size == 0;
	}

	/**
	 * 判断当前队列是否已满
	 * 
	 * @return
	 */
	public boolean isFull() {

		return size == data.length;

	}

	/**
	 * 将数组容量扩大两倍
	 * 
	 */
	public void enlarge() {
		E[] newData = (E[]) new Object[data.length * 2];
		for (int i = 0; i < data.length; i++) {
			newData[i] = data[i];

		}
		data = newData;
		newData = null;
	
	
		
	}

	public E remove() {
		if (isEmpty()) {
	   
			throw new RuntimeException("队列为空!");
		}
	
		E tempData = data[front];
	
		
		data[front] = null;
		front = (front + 1) % (data.length);
	
		size--;

		return tempData;
	}

	public int size() {

		return size;
	}

	public E front() {
		if (isEmpty()) {

			throw new RuntimeException("队列为空!");
		}
		return data[front];
	}

}

 

分享到:
评论

相关推荐

    Java数组队列概念与用法实例分析

    Java数组队列是一种基于数组实现的线性数据结构,它遵循先进先出(FIFO,First In First Out)的原则。在Java中,数组队列通常用于处理数据的顺序处理,例如任务调度、消息传递等场景。以下是关于Java数组队列的一些...

    java-Using-Array-for-Queue.zip_java队列实现

    在Java编程中,队列是一种线性数据结构,它遵循先进先出...在实际项目中,应根据需求选择合适的数据结构,例如,如果性能是关键,那么自定义的数组队列可能更有优势;如果需要线程安全,`Vector`则是一个不错的选择。

    java队列实现方法(顺序队列,链式队列,循环队列)

    Java 中可以使用 ArrayQueue 类来实现顺序队列。 ArrayQueue 类提供了多种构造方法,可以根据需要选择合适的构造方法来创建顺序队列。 ArrayQueue 类的方法包括: * size():获取队列的大小 * offer():添加元素...

    基于java数据结构实验 队列实验报告.pdf

    `ArrayQueue` 类展示了如何创建一个基于数组的顺序队列。该类包含以下几个核心成员: 1. `maxSize`:存储队列的最大容量。 2. `front` 和 `rear`:分别记录队首和队尾的索引位置,初始化时设为 -1。 3. `arr`:用于...

    ArrayQueue.java

    java使用数组模拟普通队列

    布线问题-队列式分支限界

    在这个例子中,我们使用 Java 语言实现了队列式分支限界法来解决布线问题。首先,我们定义了一个 Position 类,用于表示网格中的一个节点。然后,我们定义了一个队列 que,用于存储当前活动节点的周围节点。 在 ...

    基于java数据结构实验 队列实验报告.docx

    在提供的代码示例中,`ArrayQueue`类被创建来实现一个简单的顺序队列。这个类包含了一个泛型数组`arr`,用于存储队列中的元素,以及两个整型变量`front`和`rear`,分别表示队头和队尾的位置。`Sequeue`类作为顺序...

    09丨队列:队列在线程池等有限资源池中的应用.pdf

    在 Java 语言中,可以使用数组来实现队列,例如: ```java public class ArrayQueue { private String[] items; private int n = 0; private int head = 0; private int tail = 0; public ArrayQueue(int ...

    队列:队列在线程池等有限资源池中的应用.pdf

    - **解释**:这段代码定义了一个基于数组的队列类`ArrayQueue`。`enqueue`方法用于将元素加入队列尾部,`dequeue`方法用于从队列头部移除元素。当`tail`等于数组大小`n`时,队列已满,无法再加入新元素;当`head`...

    手撕代码1

    "数组实现栈和队列" 在计算机科学中,栈和队列是两种基本的数据结构,它们广泛应用于各种编程语言和算法中。数组是一种基本的数据结构,可以用来实现栈和队列。本文将详细介绍如何使用数组实现栈和队列。 数组实现...

    几个常用的数据结构

    Vector在Java等编程语言中是一种动态数组,它提供了线程安全的增删改查操作。由于它是数组的扩展,因此可以随机访问任何位置的元素,但插入和删除元素时可能需要移动大量元素,效率相对较低。 2. **List**: List...

    数据结构中栈和队的源代码

    "ArrayQueue.java"可能是基于数组的普通队列实现。"Queue.java"可能是一个抽象类或者接口,定义了队列的基本操作。"Main.java"是主程序,用于测试和展示这些数据结构的功能。"QueueDoc.java"可能是队列类的文档注释...

    Java数据结构与算法02——队列

    本篇文章将深入探讨队列这一基本的数据结构,并通过Java实现一个简单的数组模拟队列,以帮助读者理解其工作原理。 队列是线性数据结构的一种特殊形式,它遵循“先进先出”(First In First Out,简称FIFO)的原则。...

    Java数据结构和算法中文第二版_Java数据结构_

    3. **栈和队列**:栈是一种后进先出(LIFO)的数据结构,而队列则是先进先出(FIFO)的。它们在很多算法中都有应用,如递归、回溯和缓存管理。书中会讲解ArrayStack和LinkedListStack的实现,以及ArrayQueue和...

    2017数据结构java源码.rar

    Java的LinkedList类也可用于实现队列,或者使用Queue接口的实现类,如ArrayQueue。源码可能包含了入队、出队的操作。 5. **树**:树是一种非线性数据结构,包括二叉树、平衡树(如AVL树、红黑树)等。二叉树常用于...

    java数据结构与算法

    2. 栈和队列的Java实现,可能包括ArrayStack、LinkedListStack、ArrayQueue、LinkedListQueue等。 3. 二叉树的构造与遍历,如前序、中序、后序遍历,以及平衡树的调整。 4. 图的表示方法(邻接矩阵、邻接表)及图的...

    Java数据结构与算法中的源代码和applet

    队列可能是ArrayQueue或LinkedQueue;哈希表通常用HashMap或HashSet来表示。此外,还会涉及到排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序以及堆排序等。 算法是解决问题的步骤和策略。在Java中...

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

    书中会介绍ArrayStack和ArrayQueue的实现。 4. **集合框架**:Java集合框架是Java库的核心部分,包括List、Set、Map接口及其实现类。ArrayList、LinkedList、HashSet、HashMap等的内部工作原理和使用场景是重点。 ...

    用Java实现的数据结构暨算法,同时对其进行了测试.zip

    对于队列,可能有`ArrayQueue`和`LinkedListQueue`的实现。此外,可能会有关于树(如二叉搜索树、AVL树、红黑树)和图(邻接矩阵、邻接表)的实现。 在学习过程中,测试是必不可少的。这个资源可能包含了针对每种...

Global site tag (gtag.js) - Google Analytics