队列的实现

入队,出队,判空

Posted by Ruizhi Ma on May 11, 2019

队列底层实现

package demo2;

public class MyQueue {
	//初始化一个数组
	int[] elements;
	public MyQueue(){
		elements = new int[0];
	}
	
	//入队
	public void add(int element){
		//创建一个新的数组
		int[] newArr = new int[elements.length + 1];
		
		//将原数组元素复制进新数组
		for(int i = 0;i < elements.length;i++){
			newArr[i] = elements[i];
		}
		
		//在新数组末尾添加新元素
		newArr[elements.length] = element;
		
		//将新数组赋值给原数组
		elements = newArr; 
	}
	
	//出队
	public int poll(){
		//每次取出数组的第一个元素
		int element = elements[0];
		
		//创建一个新数组用于保存剩下的队列元素
		//原数组首个元素已经被取出,所以新数组长度应该是原数组length - 1
		int[] newArr = new int[elements.length - 1];
		for(int i = 0; i < newArr.length; i++){
			//elements存入行数组的元素下标相差1
			newArr[i] = elements[i + 1];
		}
		
		//数组替换
		elements = newArr;
		
		return element; 
	}
	
	//判断队列是否为空
	public boolean isEmpty(){
		return elements.length == 0;
	}
}


队列的测试类

package demo2.test;

import demo2.MyQueue;

public class TestMyQueue {

	public static void main(String[] args) {
		MyQueue ms = new MyQueue();
		
		//进队
		ms.add(99);
		ms.add(98);
		ms.add(97);
		ms.add(96);
		
		
		//出队
		System.out.println(ms.poll()); 
		System.out.println(ms.poll()); 
		System.out.println(ms.poll()); 
	}

}

运行结果:
99 98 *97 *