队列及其注意事项

队列

队列注意事项

在C++语言中,使用优先队列,直接构建一个lambda表达式,使用一个匿名函数指针。java比较函数的返回值不是bool型,只能是整型。

循环队列的注意事项

队空时,头尾指针应该相等
队满时,头指针应该正好在尾指针后1位
入队时,尾指针加1
出队时,头指针加1
对Maxsize取模是因为是循环队列,并防止溢出

队列的实现方法

(1)通过数组实现一个队列;

(2)通过集合实现一个对列;

(3)通过两个堆栈实现一个队列。

队列实现代码

package cn.goktech.queue;

/**
 * 队列
 * 1.boolean add(T t) 	入队
 * 2.T t offer() 		出队
 * 3.boolean peek() 	检视队首元素
 * @author Administrator
 *
 */
/**
 * @author Administrator
 *
 * @param 
 */
/**
 * @author Administrator
 *
 * @param 
 */
public class MyQueue<T> {
	private int size;
	private int rear;//队首
	private int front;//队尾
	private Object[] data;
	private int length;
	
	/**
	 * 无参构造
	 */
	public MyQueue() {
		this.size=0;
		this.rear=-1;//队尾为-1
		this.front=0;//队首为0
		data=new Object[10];
		this.length=10;
	}
	
	/**
	 * 入队
	 * @return boolean
	 */
	public boolean add(T t) {
		if (size==length) {
			return false;
		}else {
			data[++rear]=t;
			size++;
			return true;
		}
	}
	
	/**
	 * 出队
	 * @return t 队首元素
	 */
	public T offer() {
		if (size==0) {
			return null;
		}else {
			T t=(T)data[front++];
			if (front==rear) {
				front=0;
				rear=-1;
			}
			return t;
		}
	}
	
	/**
	 * 检视队首元素
	 * @return boolean
	 */
	public boolean peek() {
		if (size==0) {
			return false;
		}else {
			T t=(T)data[front];
			System.out.println(t);
			return true;
		}
	}
	
	/**
	 * 返回队列的大小
	 * @return
	 */
	public int size() {
		return this.size;
	}
	
	public static void main(String[] args) {
		MyQueue<String> sQueue=new MyQueue<>();
		sQueue.add("1");
		sQueue.add("2");
		sQueue.peek();
	}
}

你可能感兴趣的:(java,队列,循环队列)