`
韩悠悠
  • 浏览: 839802 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

队列的java实现

 
阅读更多

        普通队列

        队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。

 

package com.algorithm;

/**
 * 普通队列
 * @author lenovo
 *队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,
 *和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
 *在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,
 *因此队列又称为“先进先出”(FIFO—first in first out)的线性表。
 */
public class MyQueue {

	/**
	 * 底层使用数据
	 */
	private long[] attr;
	/**
	 * 有效数据的大小
	 */
	private int elements;
	
	/**
	 * 队头
	 */
	private int front;
	
	/**
	 * 队尾
	 */
	private int end;
	
	/**
	 * 默认构造方法
	 */
	public MyQueue(){
		attr =new long[10];
		elements =0;
		front =0;
		end =-1;
	}
	
	/**
	 * 带参数构造方法,初始化队列大小 
	 */
	public MyQueue(int maxsize){
		attr =new long[maxsize];
		elements =0;
		front =0;
		end =-1;
	}
	
	/**
	 * 添加数据,插入到队尾
	 * @param value
	 */
	public void intsert(long value){
		attr[++end]=value;
		elements++;
	}
	
	/**
	 * 删除数据,从对头开始
	 */
	public long remove(){
		elements--;
		return attr[front++];
	}
	
	/**
	 * 查看数据
	 */
	public long peek(){
		return attr[front];
	}
	
	/**
	 * 判断是否为空
	 * @return
	 */
	public boolean isEmpety(){
		return elements==0;
	}
	
	/**
	 * 判断是否满了
	 * @return
	 */
	public boolean isFull(){
		return elements==attr.length;
	}
	
	public static void main(String[] args) {
		MyQueue mq = new MyQueue(4);
		mq.intsert(23);
		mq.intsert(45);
		mq.intsert(13);
		mq.intsert(1);
		
		System.out.println(mq.isFull());
		System.out.println(mq.isEmpety());
		
		System.out.println(mq.peek());
		System.out.println(mq.peek());
		
		while (!mq.isEmpety()) {
			System.out.print(mq.remove()+"  ");
		}
		
		mq.intsert(23);
	}
}

 

 

      循环队列

为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。

package com.algorithm;

/**
 * 循环队列
 * @author lenovo
 *为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,
 *并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。
 */
public class MyCycleQueue {

	/**
	 * 底层使用数据
	 */
	private long[] attr;
	/**
	 * 有效数据的大小
	 */
	private int elements;
	
	/**
	 * 队头
	 */
	private int front;
	
	/**
	 * 队尾
	 */
	private int end;
	
	/**
	 * 默认构造方法
	 */
	public MyCycleQueue(){
		attr =new long[10];
		elements =0;
		front =0;
		end =-1;
	}
	
	/**
	 * 带参数构造方法,初始化队列大小 
	 */
	public MyCycleQueue(int maxsize){
		attr =new long[maxsize];
		elements =0;
		front =0;
		end =-1;
	}
	
	/**
	 * 添加数据,插入到队尾
	 * @param value
	 */
	public void intsert(long value){
		if (end==attr.length-1) {
			end=-1;
		}
		attr[++end]=value;
		elements++;
	}
	
	/**
	 * 删除数据,从对头开始
	 */
	public long remove(){
		long value = attr[front++];
		if(front==attr.length){
			front=0;
		}
		elements--;
		return value;
	}
	
	/**
	 * 查看数据
	 */
	public long peek(){
		return attr[front];
	}
	
	/**
	 * 判断是否为空
	 * @return
	 */
	public boolean isEmpety(){
		return elements==0;
	}
	
	/**
	 * 判断是否满了
	 * @return
	 */
	public boolean isFull(){
		return elements==attr.length;
	}
	
	public static void main(String[] args) {
		MyCycleQueue mq = new MyCycleQueue(4);
		mq.intsert(23);
		mq.intsert(45);
		mq.intsert(13);
		mq.intsert(1);
		
		System.out.println(mq.isFull());
		System.out.println(mq.isEmpety());
		
		System.out.println(mq.peek());
		System.out.println(mq.peek());
		
		while (!mq.isEmpety()) {
			System.out.print(mq.remove()+"  ");
		}
		System.out.println();
		
		mq.intsert(23);
		mq.intsert(13);
		mq.intsert(122);
		System.out.println(mq.peek());
		while (!mq.isEmpety()) {
			System.out.print(mq.remove()+"  ");
		}
	}
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics