Skip to content

Latest commit

 

History

History
116 lines (104 loc) · 1.99 KB

File metadata and controls

116 lines (104 loc) · 1.99 KB
package com.test.xiaolu;

import java.util.concurrent.ForkJoinPool.ManagedBlocker;

/**
 * 公众号:「一个不甘平凡的码农」
 * 时间:2019/3/2
 * 功能:队列
 * 1)入队
 * 2)出队
 * @author 小鹿
 *
 */

public class Queue {
	
	//声明一个 int 队列
	private int[] items;
	private int n;
	
	//声明头、尾指针
	private int head = 0;
	private int tail = 0;
	
	//初始化变量
	public Queue(int capacity) {
		items = new int[capacity];
		n = capacity;
	}
	
	public static void main(String[] args) {
		Queue queue = new Queue(5);
		//入队
		queue.enqueue2(1);
		queue.enqueue2(2);
		queue.enqueue2(3);
		queue.enqueue2(4);
		queue.enqueue2(5);
		//出队
		queue.dequeue();
		queue.dequeue();
		//搬移数据入队
		queue.enqueue2(6);
		queue.enqueue2(7);
		queue.print();
	}
	
	/**
	 * 时间:2019/3/2
	 * 功能:入队
	 * 存在的不足:浪费内存空间
	 * @param data 元素
	 */
	public Boolean enqueue(int data) {
		//队满
		if(tail == n) return false;
		//入队
		items[tail] = data;
		//指针向后移动
		tail++;
		return true;
	}
	
	/**
	 * 功能:优化后入队
	 * 边界分析:
	 * 1)判断队满
	 * 2)判断数据是否可向前移动
	 * @param data 元素
	 */
	public Boolean enqueue2(int data) {
		//队满
		if(tail == n) {
			if(head == 0) {
				return false;
			}else {
				//数据搬移(技巧)
				for (int i = head; i < tail; i++) {
					items[i - head] = items[i];
				}
				tail = tail - head;
				head = 0;
			}
		}
		//插入数据
		items[tail] = data;
		tail++;
		return true;
	}
	
	/**
	 * 时间:2019/3/2
	 * 功能:出队
	 * 存在的不足:浪费内存空间
	 */
	public int dequeue() {
		//队空
		if(head == tail) return -1;
		//出队
		int temp = items[head];
		head++;
		return temp;
	}
	
	/**
	 * 功能:打印队列
	 */
	public void print() {
		for (int i = head; i < tail; i++) {
			System.out.print(items[i]+" ");
		}
	}
}