欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构之循环队列

程序员文章站 2022-06-06 20:52:28
...
package MyQueue;
/**
 * 
 * @author zz384dian
 * @time 2018-2-22
 * @content 循环队列实现
 */
public class MyQueue<E>{
	private Object objs[];
	private int front;
	private int back;
	private int size;
	
	public MyQueue(){
		size = 0;
		objs = new Object[10];
		front = 0;
		back = 0;
	}
	
	public E add(Object o){
		//扩容
		if(size == objs.length){
			Object temp[] = objs;
			objs = new Object[10+temp.length];
			int index = 0;
			for(int i=front;i<temp.length;i++)
				objs[index++] = temp[i];//从对头到数组的最大容量遍历存入新数组
			for(int i=0;i<back;i++)
				objs[index++] = temp[i];//再从位置0到队尾遍历存入新数组
			back = size;
			front = 0;
		}
		objs[size++] = o;
		if(back == objs.length){
			back = 0;//队尾循环到头需重新循环
		}else{
			back++;//否则加一
		}
		
		return (E)o;
	}
	
	public E peek(){
		if(empty()){
			return null;
		}else{
			return (E)objs[front];
		}
	}
	
	public E poll(){
		E e;
		if(empty()){
			return null;
		}else{
			e = (E)objs[front];
			front++;//头出来后,向前移位
			if(front == objs.length){
				front = 0;//移位后如果正好等于队列大小,就置0,重新循环
			}
		}
		size--;
		return e;
	}
	
	public int size(){
		return size;
	}
	
	public boolean empty(){
		return size == 0?true:false;
	}
}

p.s.关于add方法中扩容的图解

数据结构之循环队列