Java数据结构之何为队列

没有java数据结构的基础,如何优化Android应用的性能?在实际生活中,队列有着广泛的应用,例如排队购物,文章打印,都遵循着队列先进先出的原则。队列queue在我们Handel looper thread那章中我们讲解过,今天我们重点解析下Queue的性质。

队列(Queue)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。

顺序  queue的相关概念

?进行插入操作的端称为队尾,进行删除操作的端称为队头。

?队列中没有元素时,称为空队列。

?队列空的条件:  front = rear

?队列满的条件:  rear = MAXSIZE

从上述相关概念中,顺序队列有一个很大的问题,容易出现假溢,如下图所示。

因此,我们设计了循环队列,将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。注意循环队列 的队列满的条件为(rear+1)%MaxSize=front,为了避免与队空条件冲突,预留了一个空间。

下面我们来看一下如何实现上述的循环队列。

package c;

public class SeqQueue<T> implements QQueue<T> {
	private Object[] element;
	private int front, rear;

	public SeqQueue(int size) {
		// TODO Auto-generated constructor stub
		this.element = new Object[Math.abs(size)];
		this.front = this.rear = 0;
	}
     //构造一个空的方法,默认大小为64
	public SeqQueue() {
		// TODO Auto-generated constructor stub
		this(64);
	}
    //判断队列是否为空
	@Override
	public boolean isEmpty() {
		// TODO Auto-generated method stub
		return this.front == this.rear;
	}
     //入队操作
	@Override
	public void enqueue(T x) {
		// TODO Auto-generated method stub
		if (x == null)
			return;
		//如何队列已满,重新申请一个两倍的空间
		if (this.front == (this.rear + 1) % element.length) {
			Object[] temp = this.element;
			this.element = new Object[temp.length * 2];
			int i = this.front;
			int j = 0;
			while (i != this.rear) {
				this.element[i] = temp[i];
				i = (i + 1) % temp.length;
				j++;
			}
			this.front = 0;
			this.rear = j;
		}
		this.element[this.rear] = x;
		this.rear = (this.rear + 1) % element.length;
	}
     //出队操作
	@Override
	public T dequeue() {
		// TODO Auto-generated method stub
		if (isEmpty())
			return null;
		@SuppressWarnings("unchecked")
		T temp = (T) this.element[this.front];
		this.front = (this.front + 1) % this.element.length;
		return temp;

	}
    //打印队列
	public String toString() {
		String s = "(";
		if (!isEmpty()) {
			s = s + this.element[this.front].toString();
			int i = (this.front + 1) % this.element.length;
			while (i != this.rear) {
				s = s + this.element[i].toString();
				i = (i + 1) % this.element.length;
			}
		}
		return s + ")";
	}
   //测试上述方法
	public static void main(String args[]) {
		SeqQueue<String> queue = new SeqQueue<String>(64);
		for (int i = 0; i < 10; i++) {
			queue.enqueue("a" + i);
		}
		System.out.print(queue.toString());
	}

}

Java数据结构之何为队列

时间: 2024-10-13 13:17:06

Java数据结构之何为队列的相关文章

Java数据结构系列之——队列(1):队列的顺序存储结构及其实现

package queue.sequencequeue; /** * 队列的定义:队列是只允许在一端进行插入操作,而在另外一端进行删除操作的线性表 * 队列是一种先进先出(First In First Out)的线性表,简称FIFO,允许插 * 入的一端称为队尾,允许删除的一端称为队头 * @author wl * */ public class SequenceQueue { private Object[] elementData;//用数组来保存队列的元素 private int fron

Java数据结构系列之——队列(2):循环队列的顺序存储结构及其实现

package queue.circleSequenceQueue; /** * 这里我们规定队列满时数组中还有一个空闲空间,不允许将数组中的空间全部存满 * 循环队列满的条件是:(rear+1)%QueueSize==front * 长度计算公式为:(rear-front+QueueSize)%QueueSize * @author wl */ public class CircleSequenceQueue { Object[] elementData;//数组用于存放队列元素 int fr

Java数据结构系列之——队列(3):队列的链式存储结构及其实现

package queue.linkQueue; public class Node { // 数据域 Object element; // 指针域 Node next; // 头结点初始化 public Node(Node next) { this.next = next; } // 非头结点初始化 public Node(Object element, Node next) { this.element = element; this.next = next; } } ***********

Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用

Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列.最简单的例子就是我们平时的排队,先进先出. 顺序队列的存储结构 下图是一个有6个存储空间的顺序队列的动态示意图,图中front

Java数据结构和算法之栈与队列

二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为空栈. (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表. 栈的修改是按后进先出的原则进行. 每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除. 图1 [示例]元素是以a1,a2,-,a

java数据结构队列

队列类似于现实生活中的排队.队列是先进先出的原则,只允许在队列头部去除元素,队列尾部添加元素. 下面是分别用数组和链表为存储结构实现的队列 public interface Queue<T> { int size(); T remove(); void add(T element); boolean isEmpty(); void clear(); boolean hasElement(); } public class ArrayQueue<T> implements Queue

java数据结构与算法之(Queue)队列设计与实现

[版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53375004 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈设计与实现 java数据结构

java 数据结构 队列的实现

java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java.util.*; public class Queue{ Node tail = new Node(); Node nowNode = new Node(); //永远指向队首 int size; Queue(){}; Queue(String date){ this.tail.date = dat

Java数据结构与算法之集合

线性表.链表.哈希表是常用的数据结构,在进行Java开发时,SDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中. 一.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object.一些Collection允许相同元素而另一些不行.一些能排序而另一些不行.Java  SDK不提供直接继承自Collection的类,Java  SDK提供的类都是继承自Collection的"子接口"如List和Set