java使用数组实现队列

1.1.  队列的数据结构

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

1.2.  Java实现


QueueTest

package ch04;

public class QueueTest {

    public static void main(String[] args) {
       ArrayQueue queue = new ArrayQueue(10);

       System.out.println(queue.isEmpty());

       for (int i = 0; i < 10; i++) {
           queue.insert(i);
       }
       System.out.println(queue.isFull());

       while (!queue.isEmpty()) {
           System.out.println(queue.remove());
       }
    }

}

class ArrayQueue {
    private int[] arrInt;// 内置数组
    private int front;// 头指针
    private int rear;// 尾指针

    public ArrayQueue(int size) {
       this.arrInt = new int[size];
       front = 0;
       rear = -1;
    }

    /**
     * 判断队列是否为空
     *
     * @return
     */
    public boolean isEmpty() {
       return front == arrInt.length;
    }

    /**
     * 判断队列是否已满
     *
     * @return
     */
    public boolean isFull() {
       return arrInt.length - 1 == rear;
    }

    /**
     * 向队列的队尾插入一个元素
     */
    public void insert(int item) {
       if (isFull()) {
           throw new RuntimeException("队列已满");
       }
       arrInt[++rear] = item;
    }

    /**
     * 获得对头元素
     *
     * @return
     */
    public int peekFront() {
       return arrInt[front];
    }

    /**
     * 获得队尾元素
     *
     * @return
     */
    public int peekRear() {
       return arrInt[rear];
    }

    /**
     * 从队列的对头移除一个元素
     *
     * @return
     */
    public int remove() {
       if (isEmpty()) {
           throw new RuntimeException("队列为空");
       }
       return arrInt[front++];
    }
}

运行结果如下:

false

true

0

1

2

3

4

5

6

7

8

9

时间: 2025-01-02 09:27:45

java使用数组实现队列的相关文章

Java用数组实现循环队列

复习了下数据结构,用Java的数组实现一下循环队列. 队列的类 1 //循环队列 2 class CirQueue{ 3 private int QueueSize; 4 private int front; 5 private int rear; 6 private int[] queueList ; 7 8 public CirQueue(int QueueSize){ 9 this.QueueSize = QueueSize; 10 queueList = new int[QueueSiz

java 数据结构 用数组实现队列

代码内容 1 package com.structure; 2 3 import java.util.Scanner; 4 5 /** 6 * @auther::9527 7 * @Description: 数组模拟队列 8 * @program: jstl2 9 * @create: 2019-10-05 08:58 10 */ 11 public class ArrayQueueDemo { 12 public static void main(String[] args) { 13 Sca

深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue

关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入理解Java并发之synchronized实现原理 Java并发编程-无锁CAS与Unsafe类及其并发包Atomic 深入理解Java内存模型(JMM)及volatile关键字 剖析基于并发AQS的重入锁(ReetrantLock)及其Condition实现原理 剖析基于并发AQS的共

Java中的阻塞队列

1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用.阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程.阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素. 阻塞队列提供了四种处理方法: 方法\处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put

闭关修炼中 *** Java常用算法之 -- 队列结构

什么是队列结构: 队列结构和栈结构很相类似. 和栈结构一样是一种具有特殊的运算规则,从数据的逻辑结构看,队列结构其实 是一种线性结构. 从存储结构来进一步划分,也分为两类: 顺序队列结构:即使用一组地址连续的内存单元依次保存队列中的数据. 在 程序中,可以定义一个指定大小的结构数组作为队列. 链式队列结构:即用链表形式保存队列中各元素的值. 典型的队列结构: 在队列结构中允许对两端进行操作,但两端的操作不同.一端只能删除--队头,一 端只能插入--队尾. 队列的运算规则: 是按照先进后出(Fir

聊聊并发(七)——Java中的阻塞队列

1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用.阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程.阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素. 阻塞队列提供了四种处理方法: 方法\处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put

【数据结构初学】(java实现篇)&mdash;&mdash;队列(转)

原文地址:http://www.cnblogs.com/skywang12345/p/3603935.html 原文地址:http://www.cnblogs.com/skywang12345/p/3603935.html 原文地址:http://www.cnblogs.com/skywang12345/p/3603935.html (自己是个javav初学者 借助一下大牛的文章 记录下每天的学习情况!大家多去这个大牛博客里面看看,里面很多干货 绝对福利!) JDK包Queue中的也提供了"队列

技术文章-数组与队列

在Java编程中,常常会遇到需要存储和处理大量同类信息的时候,这时候就要运用数组或者队列的数据存储结构来方便操作. 1.数组 定义:数组是属于数据结构中一种线性的数据结构,因为其对象在内存中的存储方式是一个连续的存储空间. 数组在使用时的书写格式:(以一维数组为) 定义和实例化对象同步进行: 已知存储数据的类型和长度时:数据类型 [] 数组名 = new 数据类型[长度]; 已经知道具体的每一项数据时:数据类型 [] 数组名 = {数据,...}; 已经知道具体的每一项数据同时规定数据类型时:数

聊聊并发(七)Java中的阻塞队列

什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用.阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程.阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素. 阻塞队列提供了四种处理方法: 抛出异常:是指当阻塞队列满时候,再往队列里插入元素,会抛出IllegalStateException("Queue