`
Brucegaochina
  • 浏览: 40525 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

模拟一个队列(java)

阅读更多
简介
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。   
队列空的条件: front=rear   
队列满的条件: rear = MAXSIZE

/**
 * simulate queue struct by java
 * 
 * @author Bruce
 * @date Sep 8, 2011
 * @version 1.0
 */

public class Queue {
	private int maxSize;
	private long[] queueArray;
	private int front;// the head of queue
	private int rear;// the end of queue
	private int nItems;

	/**
	 * Constructor a queue,the size is s;now the queue is null, and the front is
	 * zero and the rear is negative one
	 * 
	 * @param s
	 */
	public Queue(int s) {
		maxSize = s;
		queueArray = new long[maxSize];
		front = 0;
		rear = 0;
		nItems = 0;
	}

	public void insert(long j) {
		// if the the inserted items great the size of queue,
		// the rear return the initial value and the next item will
		// override the corresponding value
		if (rear == maxSize)
			rear = 0;
		queueArray[rear++] = j;
		nItems++;// the count of the items
	}

	/**
	 * remove the item from the 'front' position,every time the front will be
	 * added one
	 */
	public long remove() {
		long temp = queueArray[front++];
		// if the front equals the size of queue,the front will return the
		// initial value
		if (front == maxSize)
			front = 0;
		nItems--;
		if (nItems < 0)
			nItems = 0;
		return temp;
	}

	public long peekFront() {
		return queueArray[front];
	}

	public boolean isEmpty() {
		return (nItems == 0);
	}

	public boolean isFull() {
		return (nItems == maxSize);
	}

	public int size() {
		return nItems;
	}

	public static void main(String[] args) {
		Queue queue = new Queue(3);
		queue.insert(3);
		queue.insert(6);
		queue.insert(8);
		// queue.insert(4);

		System.out.println("size:" + queue.size());

		System.out.println(queue.peekFront());
		queue.remove();
		System.out.println(queue.peekFront());
		queue.remove();
		System.out.println(queue.peekFront());
		queue.remove();
		// System.out.println(queue.peekFront());
		// queue.remove();

		System.out.println("size:" + queue.size());

	}

}



分享到:
评论

相关推荐

    java队列模拟实现

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

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

    总之,`PriorityQ.java`文件可能是一个简单的数组实现优先队列的示例,通过分析这个文件,我们可以学习到如何利用数组数据结构实现优先队列,以及理解其核心的插入、删除和查找操作。同时,这也能帮助我们更好地掌握...

    JAVA 模拟队列的实现

    为了使模拟队列更具实际应用价值,通常会设计一个用户界面,让用户可以直观地看到队列的状态并执行操作。在Java中,可以使用Swing或JavaFX库创建图形用户界面(GUI)。界面应包括按钮来执行enqueue、dequeue、peek等...

    基于java的模拟队列实现

    这是模拟队列的实现,没有源码,源码在另外一个上传的文件中,基本实现了队列的各种操作。

    java模拟阻塞队列

    例如,一个简单的模拟阻塞队列的代码实现可能如下: ```java import java.util.concurrent.*; public class BlockingQueueExample { public static void main(String[] args) { // 创建一个固定大小的阻塞队列 ...

    通过2个栈 模拟队列。

    为了实现这一转换,我们需要在某些时刻将一个栈中的元素全部弹出并压入另一个栈中,以确保出队操作能正确地从队列的前端(即栈底)取出元素。 下面是如何使用两个栈来模拟队列的详细步骤: 1. **初始化**:创建两...

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

    这个系统可以通过创建多个线程来代表等待服务的客户,一个线程代表叫号服务,通过队列数据结构来有序地管理这些线程。下面我们将详细探讨如何使用Java实现这样的系统。 首先,我们需要理解队列数据结构。队列是一种...

    JAVA 队列 实现卡车运输过程模拟

    在这个特定的场景中,“JAVA 队列 实现卡车运输过程模拟”旨在利用Java的队列数据结构来模拟一个煤矿的物流过程,其中六辆自卸卡车负责将煤炭从矿口运输到铁路。这个系统包含两个关键设备:装煤设备(Loaders)和...

    JAVA-计算机操作系统 多级反馈队列调度算法

    新进程被放入最高优先级的队列,如果在规定的时间片内未完成,将会被降级到下一个队列。低优先级队列的进程通常会得到更长的时间片,以确保I/O密集型进程有机会执行。这种设计兼顾了交互性和系统效率,避免了单一...

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

    链式队列是由一系列节点构成的,每个节点包含数据和指向下一个节点的引用。在Java中,LinkedList类可以方便地用于实现链式队列。链式队列的优势在于其动态性,添加和删除元素时无需移动其他元素,只需改变节点间的...

    顾客队列模拟系统(Java实现)

    【标题】"顾客队列模拟系统(Java实现)"是一个基于Java编程语言设计的应用程序,旨在模拟现实生活中顾客在银行、医院或超市等场所的排队情况。这个系统能够动态地处理柜台数量和顾客等待人数的变化,帮助理解并优化...

    优先队列算法实现(Java)

    本实现是用Java编程语言完成的,Java提供了一个内置的PriorityQueue类,但这里可能是自定义实现,以便更好地理解其工作原理和优化。 1. **优先队列的基本概念** - 优先队列是一个队列,但它不同于普通的FIFO(先进...

    java银行业务队列简单模拟.zip

    银行业务队列简单模拟 java银行业务队列简单模拟.zipjava银行业务队列简单模拟.zipjava银行业务队列简单模拟.zipjava银行业务队列简单模拟.zipjava银行业务队列简单模拟.zip

    java银行业务队列简单模拟源码.zip

    银行业务队列简单模拟 java银行业务队列简单模拟源码.zipjava银行业务队列简单模拟源码.zipjava银行业务队列简单模拟源码.zipjava银行业务队列简单模拟源码.zip

    Java模拟栈和队列数据结构的基本示例讲解共4页.pdf

    在Java中,可以使用ArrayList或LinkedList来模拟队列,主要的操作有入队(enqueue)和出队(dequeue)。 下面,我们将分别探讨如何在Java中模拟这两个数据结构: **模拟栈:** ```java public class Stack { ...

    模拟操作系统对进程的调度 JAVA

    综上所述,JAVA模拟操作系统对进程的调度是一个涵盖进程管理、线程同步、调度算法等多个核心概念的实践项目。通过编写和调试这样的代码,开发者能更深刻地理解操作系统的内部运作,并提升并发编程能力。

    华科java实验-用泛型栈实现泛型队列

    试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...

    银行业务队列简单模拟java源码.zip

    在本项目中,“银行业务队列简单模拟java源码.zip”是一个包含Java代码的压缩包,主要用于模拟银行的业务处理过程。这个模拟主要是通过队列数据结构来实现的,以便理解银行服务窗口如何处理客户的请求,如存款、取款...

    约瑟夫生死游戏队列实现

    在实际编程实现时,可以使用C++的标准库容器如`std::deque`来模拟队列,因为`std::deque`支持快速的随机访问和删除,效率较高。同时,也可以使用链表结构自定义队列实现,这样有利于理解队列的工作原理。 总结来说...

    使用LinkedList模拟堆栈

    以下是使用LinkedList模拟队列的实现: 1. 创建LinkedList实例。 ```java LinkedList&lt;Object&gt; queue = new LinkedList(); ``` 2. 实现入队操作。LinkedList的addLast()方法将元素添加到列表的末尾。 ```java ...

Global site tag (gtag.js) - Google Analytics