`
marcoSpring
  • 浏览: 32764 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 队列

阅读更多
package test; 
/** 
 * @author 作者 Marcospring: 
 * @version 创建时间:2012-7-24 上午10:18:46 
 * 队列 
 */
public class Queue {
	private int Q[];
	private int front;
	private int rear;
	//初始化队列
	public Queue(int size){
		Q = new int[size];
		front = -1;
		rear = -1;
	}
	//队列是否为空
	public boolean QueueEmpty(){
		return front == rear;
	}
	//队列是否满了
	public boolean QueueFull(){
		return rear == Q.length-1;
	}
	//入队
	public void EnQueue(int el){
		if(QueueFull()){
			System.out.print("队列满了!");
		}else{
			rear++;
			Q[rear] = el;
		}
	}
	//出队
	public int DeQueue(){
		if(QueueEmpty()){
			System.out.print("队列为空!");
			return 0;
		}else{
			front++;
			int temp = Q[front];
			//第一个元素出队后将后面的元素跟上。
			for(int i=front;i<rear;i++){
				Q[i]=Q[i+1];
			}
			//队尾用0补齐
			Q[rear] = 0;
			front = -1;
			rear--;
			return temp;
		}
	}
	//获得队列头的元素,不改变队列状态
	public int QueueFront(){
		if(QueueEmpty()){
			System.out.print("队列为空!");
			return 0;
		}else{
			return Q[front+1];
		}
	}
	//展示队列
	public void DisplayQueue(){
		if(QueueEmpty()){
			System.out.println("队列为空!");
		}else{
			for(int i = front+1;i<=rear;i++){
				System.out.print(Q[i]+",");
			}
		}
	}

}

     我觉得队列的难点在于front和rear的判断上,以及会出现一个假溢出的现象。
     首先说front 和 rear 的定义,我的定义是front 一直指向队列的-1位置,也就是没有进入队列的起始位置。只有出队和取队列头一个元素的时候才向后移动;rear一直指向最后一个元素,当最后一个元素出队列的时候指向-1。
     其次要说说假溢出现象,假如队列的大小是5,里面放的元素分别为A,B,C,D,E,现在front指向A,rear指向E。现在开始出队列,front会依次指向A,B,C,D,E,当指向E的时候,front=rear,也就是队列为空,但是这时候你再往队列里放元素的话就会出现数组越界的情况,但是这个队列明明是空的,怎么就越界了呢。这就是我认为的假溢出现象。
     最后如何解决这个问题,我在出队列的方法是这样写的:
public int DeQueue(){
		if(QueueEmpty()){
			System.out.print("队列为空!");
			return 0;
		}else{
			front++;
			int temp = Q[front];
			//第一个元素出队后将后面的元素跟上。
			for(int i=front;i<rear;i++){
				Q[i]=Q[i+1];
			}
			//队尾用0补齐
			Q[rear] = 0;
			front = -1;
			rear--;
			return temp;
		}
	}

先判断一下队列是否为空,如果不为空的情况下,front向后移动一次,取出第一个元素,然后后面的元素依次跟上,最后一位用0补齐,然后将front指向-1,rear跟进一位,指向最后一个元素。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics