java使用数组实现顺序队列

CLAY&Loser CLAY&Loser     2022-12-13     444

关键词:

package com.Alg;

import java.io.Serializable;
import java.util.Arrays;

/**
 * @ClassName SequentialQueue
 * @author sunyu
 * @Description 顺序队列
 * @param <T>
 */
public class SequentialQueue<T> implements Serializable 
	private static final long serialVersionUID = 1L;
	private int DEFAULT_SIZE = 10;
	private int capacity; // 保存数组的长度
	private Object[] elementData;// 定义一个数组用于保存顺序队列的元素
	private int fornt = 0;// 队列头
	private int rear = 0;// 队列尾

	// 无参数构造,以默认参数创建空顺序队列
	public SequentialQueue() 
		capacity = DEFAULT_SIZE;
		elementData = new Object[capacity];
	

	// 有参构造,以一个初始化元素来创建顺序队列
	public SequentialQueue(T element) 
		this();// 调用午餐构造器
		elementData[0] = element;
		rear++;
	

	// 有参构造,指定队列大小构造空顺序队列
	public SequentialQueue(int initSize) 
		elementData = new Object[initSize];
	

	/**
	 * 以指定长度的数组来创建顺序队列
	 * 
	 * @param element
	 *            指定顺序队列中第一个元素
	 * @param initSize
	 *            指定顺序队列底层数组的长度
	 */
	public SequentialQueue(T element, int initSize) 
		this.capacity = initSize;
		elementData = new Object[capacity];
		elementData[0] = element;
		rear++;
	

	/**
	 * @Title: size
	 * @Description: 获取顺序队列大小
	 * @return
	 */
	public int size() 
		return rear - fornt;
	

	public void offer(T element) 
		ensureCapacity(rear + 1);
		elementData[rear++] = element;
	

	/**
	 * @Description: 确认数组的长度是否满足新元素的添加,不满足时扩充数组
	 * @param minCapacity
	 */
	public void ensureCapacity(int minCapacity) 
		int oldCapacity = elementData.length;
		if (minCapacity > oldCapacity) 
			int newCapacity = (oldCapacity * 3) / 2 + 1;
			if (newCapacity < minCapacity) 
				newCapacity = minCapacity;
				// 复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度。
				elementData = Arrays.copyOf(elementData, newCapacity);
			
		
	

	/**
	 * @Description: 出队
	 * @return
	 */

	public T poll() 
		if (isempty()) 
			throw new IndexOutOfBoundsException("空队列异常");
		
		// 保留队列的fornt端的元素值
		T oldvalue = (T) elementData[fornt];
		// 释放队列的fornt端的元素
		elementData[fornt++] = null;
		return oldvalue;
	

	/**
	 * @Description: 判断队列是否为空
	 * @return
	 */
	private boolean isempty() 
		return fornt == rear;
	

	/**
	 * @Description: 返回队列顶元素,但不删除队列顶元素
	 * @return
	 */
	public T peek() 
		if (isempty()) 
			throw new IndexOutOfBoundsException("空队列异常");
		
		return (T) elementData[fornt];
	

	/**
	 * @Title: clear
	 * @Description: 清空顺序队列
	 * @return
	 */
	public void clear() 
		// 将指定的null值分配给指定数组指定范围中的每个元素
		Arrays.fill(elementData, null);
		fornt = 0;
		rear = 0;
	

	public String toString() 
		if (isempty()) 
			return "[]";
		 else 
			StringBuilder sb = new StringBuilder("[");
			for (int i = fornt; i < rear; i++) 
				sb.append(elementData[i].toString() + ", ");
			
			int len = sb.length();
			return sb.delete(len - 2, len).append("]").toString();
		
	

	public static void main(String[] args) 
		SequentialQueue<String> sq = new SequentialQueue<String>();
		sq.offer("1");
		sq.offer("2");
		sq.offer("3");
		System.out.println(sq.toString());
	



c语言用数组(顺序表)实现大小固定的队列的方法(代码片段)

...和出队遵循"先进先出"的原则;因此,只要使用顺序表按以上两个要求操作数据,即可实现顺序队列。首先来学习一种最简单的实现方法。顺序队列简单实现由于顺序队 查看详情

java数据结构及算法实战系列012:java队列06——数组实现的优先级阻塞队列priorityblockingqueue

...自然顺序排序,或由队列构造时提供的比较器根据所使用的构造函数排序。优先级队列不允许空元素,依赖自然顺序的优先级队列也不允许插入不可比较的对象。相比于PriorityQueue而言࿰ 查看详情

java数据结构及算法实战系列012:java队列06——数组实现的优先级阻塞队列priorityblockingqueue

...自然顺序排序,或由队列构造时提供的比较器根据所使用的构造函数排序。优先级队列不允许空元素,依赖自然顺序的优先级队列也不允许插入不可比较的对象。相比于PriorityQueue而言࿰ 查看详情

数据结构之动态顺序队列(c实现)

...种类型:  ①顺序队列,采用顺序存储,当长度确定时使用。顺序队列又有两种情况:一、使用数组存储队列的称为静态顺序队列。二、使用动态分配的指针的称为动态顺序队列。    ②链式队列,采用链式存储... 查看详情

n日一篇——java实现队列(代码片段)

...序队列//带头结点的队列//这里用头结点来避免逻辑循环数组中队满和队空问题publicclassSQueuewithHeadimplementsSequentialQueue privatestaticfinalintDEFAULTSIZE=4; privateintfront;//队首 privateintrear;//队尾 privateintsize;//队列容量 privateObjectlistArray[];//... 查看详情

java数据结构及算法实战系列011:数组实现的优先级队列priorityqueue

...自然顺序排序,或由队列构造时提供的比较器根据所使用的构造函数排序。优先级队列不允许空元素,依赖自然顺序的优先级队列也不允许插入不可比较的对象。PriorityQueue本质上就是一个最小堆存储结构数组,通过... 查看详情

java数据结构及算法实战系列011:数组实现的优先级队列priorityqueue

...自然顺序排序,或由队列构造时提供的比较器根据所使用的构造函数排序。优先级队列不允许空元素,依赖自然顺序的优先级队列也不允许插入不可比较的对象。PriorityQueue本质上就是一个最小堆存储结构数组,通过... 查看详情

数据结构:c_队列的顺序表示和实现

...C_队列的链式表示和描述    对于队列最好的方法是使用链表实现,因为对于数组来说,队列可能会出现下面这种情况:        如图所示,不可以继续添加元素,否则会造成数组越界而遭致程序出错。然而此时又... 查看详情

java使用数组实现链式队列

packagecom.Alg;importjava.io.Serializable;/***@ClassName:LinkQueue*@Description:链式队列*@date2014年1月21日下午3:24:38*@param<T>*/publicclassLinkedQueue<T>implementsSerializable /** 查看详情

java使用数组实现循环队列

packagecom.Alg;importjava.io.Serializable;importjava.util.Arrays;/***@ClassName:LoopQueue*@Description:循环队列*@date2014年1月20日下午3:47:14*/publicclassRound_RobinQueue<T>implementsSerializ 查看详情

教你如何使用java手写一个基于数组实现的队列

一、概述  队列,又称为伫列(queue),是先进先出(FIFO,First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。队列的操作方... 查看详情

java数据结构,一个案例带你用数组模拟队列,环形队列!(代码片段)

目录队列使用数组模拟队列使用数组模拟环形队列队列队列是一个有序列表,可以用数组(顺序存储)或是链表(链式存储)来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出。使用数... 查看详情

[数据结构]队列之顺序队列的类模板实现

...队列具有FIFO的性质队列的存储表示也有两种方式:基于数组的,基于列表的。基于数组的叫做顺序队列。基于列表的叫做链式队列。一下是基于动态数组的顺序队列的模板类的实现。顺序队列的抽象基类例如以下所看到的:仅... 查看详情

java数据结构及算法实战系列011:数组实现的优先级队列priorityqueue

...自然顺序排序,或由队列构造时提供的比较器根据所使用的构造函数排序。优先级队列不允许空元素,依赖自然顺序的优先级队列也不允许插入不可比较的对象。PriorityQueue本质上就是一个最小堆存储结构数组,通过... 查看详情

n日一篇——java实现队列(代码片段)

 目录一、顺序队列1.1用接口实现顺序队列的抽象数据类型1.2创建带头结点的顺序队列1.3测试顺序队列二、链式队列2.1用接口实现链式队列抽象数据类型2.2创建链式队列的结点类型2.3 创建不带头结点的链式队列2.4 测试链式队列... 查看详情

n日一篇——java实现队列(代码片段)

 目录一、顺序队列1.1用接口实现顺序队列的抽象数据类型1.2创建带头结点的顺序队列1.3测试顺序队列二、链式队列2.1用接口实现链式队列抽象数据类型2.2创建链式队列的结点类型2.3 创建不带头结点的链式队列2.4 测试链式队列... 查看详情

数据结构与算法—队列queue(代码片段)

...;循环阻塞队列(生产者-消费者)并发队列线程池使用队列队列的实现队列        先进先出          入队enqueue()        出队deququq()使用场景:在循环队列、阻塞队列、并发队列,在底层系统、框架... 查看详情

go语言循环队列的实现

参考技术A队列的概念在顺序队列中,而使用循环队列的目的主要是规避假溢出造成的空间浪费,在使用循环队列处理假溢出时,主要有三种解决方案本文提供后两种解决方案。顺序队和循环队列是一种特殊的线性表,与顺序栈... 查看详情