Java教程

循环队列java

本文主要是介绍循环队列java,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

循环队列

  1.  首先理解循环队列的概念,循环队列相对于普通的队列他是一个整体元素不往前移,而是在数组中记下队首front是谁,同时队尾tail指向在下一次元素入队时的位置,这样当再有出队时只需要维护一下front的指向即可,不需要移动元素的队列。
  2.  循环队列需要预留一个空间,为了tail能返回到数组的前面位置,所以循环队列里面的元素个数要比我们设定的空间少一个。
  3. (tail + 1) % TOTAL_SPACE == head 判断队满。tail最后指向我们预留的空间。
    在这里插入图片描述4. head == tail 判断队空。初始队列为空在这里插入图片描述

循环队列的代码实现:

package pt;

/**
 * Circle queue.
 * 
 * @author Fan Min minfanphd@163.com.
 * 
 * @learner ChenXun
 */
public class CircleIntQueue {

	/**
	 * The total space. One space can never be used.
	 */
	public static final int TOTAL_SPACE = 10;
	/**
	 * The data.
	 */
	int[] data;
	/**
	 * The index for calculating the head. The actual head is head % TOTAL_SPACE.
	 */
	int head;
	/**
	 * The index for calculating the tail.
	 */
	int tail;

	/**
	 ******************* 
	 * The constructor
	 ******************* 
	 */
	public CircleIntQueue() {
		data = new int[TOTAL_SPACE];
		head = 0;
		tail = 0;
	}// Of the first constructor

	/**
	 *********************
	 * Enqueue.
	 * 
	 * @param paraValue The value of the new node.
	 *********************
	 */
	public void enqueue(int paraValue) {
		if ((tail + 1) % TOTAL_SPACE == head) {
			System.out.println("Queue full.");
			return;
		} // of if

		data[tail % TOTAL_SPACE] = paraValue;
		tail++;
	}// of enqueue

	/**
	 *********************
	 * Dequeue.
	 * 
	 * @return The value at the head.
	 *********************
	 */
	public int dequeue() {
		if (head == tail) {
			System.out.println("No element in the queue");
			return -1;
		} // of if

		int resultValue = data[head % TOTAL_SPACE];
		head++;
		return resultValue;
	}// of dequeue

	/**
	 *********************
	 * Overrides the method claimed in Object, the superclass of any class.
	 *********************
	 */
	public String toString() {
		String resultString = "";

		if (head == tail) {
			return "empty";
		} // of if

		for (int i = head; i < tail; i++) {
			resultString += data[i % TOTAL_SPACE] + ",";
		} // of for i
		return resultString;
	}// of toString

	/**
	 *********************
	 * The entrance of the program.
	 * 
	 * @param args Not used now.
	 *********************
	 */
	public static void main(String args[]) {
		CircleIntQueue tempQueue = new CircleIntQueue();
		System.out.println("Initialized, the list is: " + tempQueue.toString());

		for (int i = 0; i < 5; i++) {
			tempQueue.enqueue(i + 1);
		} // of for i
		System.out.println("Enqueue, the queue is: " + tempQueue.toString());

		int tempValue = tempQueue.dequeue();
		System.out.println("Dequeue " + tempValue + ", the queue is: " + tempQueue.toString());

		for (int i = 0; i < 6; i++) {
			tempQueue.enqueue(i + 10);
			System.out.println("Enqueue, the queue is: " + tempQueue.toString());
		} // Of for i

		for (int i = 0; i < 3; i++) {
			tempValue = tempQueue.dequeue();
			System.out.println("Dequeue " + tempValue + ", the queue is: " + tempQueue.toString());
		} // Of for i

		for (int i = 0; i < 6; i++) {
			tempQueue.enqueue(i + 100);
			System.out.println("Enqueue, the queue is: " + tempQueue.toString());
		} // Of for i
	}// Of main

}// Of CircleIntQueue
这篇关于循环队列java的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!