java队列

队列是一种特殊的 线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
在队列这种 数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的 线性表
对于顺序队列:
队列空的条件:front=rear
队列满的条件: rear - front = MAXSIZE
对于 循环队列
队列空的条件:front = rear
队列满的条件:front = ( rear+ 1) % MAXSIZE
/**
 * @Project: struts2
 * @Title: Queue.java
 * @Package com.yza.struct
 * @author yongzhian
 * @date 2014-10-8 下午3:51:44
 * @Copyright: 2014 www.yineng.com.cn Inc. All rights reserved.
 * @version V1.0
 */
package com.yza.struct;

/**
 * @ClassName Queue
 * @Description 队列
 * @author yongzhian
 * @Date 2014-10-8
 */
public class Queue {
	public int maxSize; // 最大长度
	public long[] queArray;
	public int front;// 头
	public int rear;// 尾
	public int nItems;// 队列中的实际长度

	public Queue(int s) // constructor构造器
	{
		maxSize = s;
		queArray = new long[maxSize];
		front = 0;
		rear = -1;
		nItems = 0;
	}

	// put item at rear of queue 从尾部插入数据
	public void insert(long j) {
		if (rear == maxSize - 1) {// deal with wraparound 处理边界值
			rear = -1;// 已经溢出会把第一个值覆盖
		}
		queArray[++rear] = j; // increment rear and insert
		nItems++; // one more item
	}

	public long remove() // take item from front of queue 从开始删除
	{
		 
		long temp = queArray[front++]; // get value and incr front
		queArray[(front-1)] = 0; 
		if (front == maxSize) { // deal with wraparound
			front = 0;
		}// 处理边界值 如果已经达到最大值则还原到第一个 
		nItems--; // one less item 项目数量减一个
		return temp;
	}

	public long peekFront() // peek at front of queue 取得队列中第一个元素
	{
		return queArray[front];
	}

	public boolean isEmpty() // true if queue is empty
	{
		return (nItems == 0);
	}

	public boolean isFull() // true if queue is full
	{
		return (nItems == maxSize);
	}

	@Override
	public String toString() {
		String str = "";
		for (int s = 0; s < maxSize; s++) {
			str += queArray[s] + "  ";
		}
		// TODO Auto-generated method stub
		return str + "  " + this.nItems;
	}

	public static void main(String[] args) {
		Queue q = new Queue(3);
		System.out.println(" 初始化 :" + q);
		q.insert(2);
		System.out.println(" 添加数据 :" + q);
		q.insert(3);
		q.insert(4);
		System.out.println(" 添加数据 :" + q);

		q.remove();q.remove();
		System.out.println(" 删除后 :" + q);
	}

}
打印输出:
 初始化 :0  0  0    0
 添加数据 :2  0  0    1
 添加数据 :2  3  4    3
 删除后 :0  0  4    1
Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除
Java队列是一种线性数据结构,特点是先进先出(FIFO)。元素的添加(入队)操作在队进行,元素的移除(出队)操作在队头进行,队列接口继承自Collection接口,并提供了丰富的方法来操作队列中的元素[^1]。 ### 特性 - **顺序**:遵循FIFO(先进先出)原则,先进入队列元素先出队。与之对比,栈遵循LIFO(后进先出)原则[^1][^3]。 - **插入删除端**:插入操作在队进行,删除操作在队头进行。而栈的插入删除操作都在栈顶进行[^3]。 - **阻塞特性**:阻塞队列是 `java.util.concurrent` 包下的,当队列满时,插入操作会阻塞;当队列空时,移除操作会阻塞,使用时需要导包,如 `import java.util.concurrent.ArrayBlockingQueue;` 等[^4]。 ### 使用方法 #### 基本队列操作 ```java import java.util.LinkedList; import java.util.Queue; public class QueueExample { public static void main(String[] args) { Queue<String> queue = new LinkedList<>(); // 入队操作 queue.add("element1"); queue.offer("element2"); // 出队操作 String firstElement = queue.poll(); String secondElement = queue.remove(); // 查看队头元素 String peekElement = queue.peek(); String element = queue.element(); } } ``` #### 双端队列操作 ```java import java.util.Deque; import java.util.ArrayDeque; public class DequeExample { public static void main(String[] args) { Deque<String> deque = new ArrayDeque<>(); // 队头插入 deque.addFirst("front"); // 队插入 deque.addLast("end"); // 队头移除 String frontElement = deque.removeFirst(); // 队移除 String endElement = deque.removeLast(); } } ``` #### 阻塞队列操作 ```java import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class BlockingQueueExample { public static void main(String[] args) throws InterruptedException { BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(10); // 入队操作队列满时会阻塞 blockingQueue.put("element"); // 出队操作队列空时会阻塞 String element = blockingQueue.take(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值