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<T>{

	//数组的默认大小
	private static final int DEFAULT_SIZE = 10;

	//默认用数组存储
	private Object[] values = new Object[DEFAULT_SIZE];

	private int arrayLength = DEFAULT_SIZE;

	//
	private int top = -1;

	private int bottom = -1;

	@Override
	public int size() {
		return (top - bottom) + 1;
	}

	//队列顶端删除元素
	@SuppressWarnings("unchecked")
	@Override
	public T remove() {
		if(isEmpty()){
			throw new NullPointerException();
		}
		T value = (T)values[++top];
		return  value;
	}

	//在对列底添加元素
	@Override
	public void add(T element) {
		if(bottom >= arrayLength-1){
			resize();
		}
		values[++bottom] = element;
	}

	@Override
	public boolean isEmpty() {
		return top > bottom;
	}

	@Override
	public void clear() {
		top = bottom = -1;
	}

	@Override
	public boolean hasElement() {
		return top < bottom;
	}

	public void resize(){
		arrayLength = arrayLength + DEFAULT_SIZE;
		Object[] temp = new Object[arrayLength];
		for(int i=0;i<values.length;i++){
			temp[i] = values[i];
		}
		values = temp;
	}

	public static void main(String args[]){
		ArrayQueue<Integer> arrayQueue = new ArrayQueue<Integer>();
		arrayQueue.add(1);
		arrayQueue.add(2);
		arrayQueue.add(3);
		arrayQueue.add(4);
		arrayQueue.add(5);
		arrayQueue.add(6);
		arrayQueue.add(7);
		arrayQueue.add(8);
		arrayQueue.add(9);
		arrayQueue.add(10);
		arrayQueue.add(11);
		while(arrayQueue.hasElement()){
			System.out.println(arrayQueue.remove());
		}
	}

}
public class LinkedList<T> implements Queue<T> {

	private int size = 0;

	private Item top ;

	private Item bottom;

	private class Item{
		private T data;

		private Item next;

		Item(T data,Item next){
			this.data = data;
			this.next = next;
		}
	}

	@Override
	public int size() {
		return size;
	}

	@Override
	public T remove() {
		if(--size < 0){
			throw new NullPointerException();
		}
		T value = top.data;
		top = top.next;
		return value;
	}

	@Override
	public void add(T element) {
		if(top == null){
			top = new Item(element,null);
		}else if(bottom == null){
			bottom = new Item(element,null);
			top.next = bottom;
		}else{
			Item item = new Item(element,null);
			bottom.next = item;
			bottom = item;
		}
		size ++;
	}

	@Override
	public boolean isEmpty() {
		return size == 0;
	}

	@Override
	public void clear() {
		top = bottom = null;
	}

	@Override
	public boolean hasElement() {
		if(top == null){
			return false;
		}
		return top.data != null;
	}

	public static void main(String args[]){
		LinkedList<Integer> linkedList = new LinkedList<Integer>();
		linkedList.add(1);
		linkedList.add(2);
		linkedList.add(3);
		linkedList.add(4);
		linkedList.add(5);
		linkedList.add(6);
		linkedList.add(7);
		linkedList.add(8);
		linkedList.add(9);
		linkedList.add(10);
		linkedList.add(11);
		while(linkedList.hasElement()){
			System.out.println(linkedList.remove());
		}
	}

}

java数据结构队列

时间: 2024-08-02 06:58:31

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数据结构和算法之栈与队列

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

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

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

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

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

Java数据结构之何为队列

没有java数据结构的基础,如何优化Android应用的性能?在实际生活中,队列有着广泛的应用,例如排队购物,文章打印,都遵循着队列先进先出的原则.队列queue在我们Handel looper thread那章中我们讲解过,今天我们重点解析下Queue的性质. 队列(Queue)也是一种运算受限的线性表.它只允许在表的一端进行插入,而在另一端进行删除.允许删除的一端称为队头(front),允许插入的一端称为队尾(rear). 顺序  queue的相关概念 ?进行插入操作的端称为队尾,进行删除操

Java数据结构与算法之集合

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

Java数据结构和算法之链表

三.链表 链结点 在链表中,每个数据项都被包含在'点"中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中都包含一个对下一个点引用的字段(通常叫做next)但是本身的对象中有一个字段指向对第一个链结点的引用. 单链表 用一组地址任意的存储单元存放线性表中的数据元素. 以元素(数据元素的映象)  + 指针(指示后继元素存储位置)  = 结点(表示数据元素 或 数据元素的映象) 以"结点的序列&q

挨踢部落坐诊第四期:Java消息队列的应用场景和作用

挨踢部落是为核心开发者提供深度技术交流,解决开发需求,资源共享的服务社群.基于此社群,我们邀请了业界技术大咖对开发需求进行一对一突破,解除开发过程中的绊脚石.以最专业.最高效的答复为开发者解决开发难题. 消息队列 话题关键词:消息队列.索引.App.路由.接口 部落阵容:51CTO管理团队: 面向对象:移动开发者.IT运维.数据分析师 参与方式:加入51CTO开发者QQ交流群(群号370892523(已满).请加312724475),有任何技术问题,在群里提问,或发给群主小官. 活动详情: 重庆

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算