數據結構-線性結構-隊列

>數組隊列

public class ArrayQueueDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayQueue arr = new ArrayQueue(3);
		arr.add(2);
		arr.add(4);
		
		System.out.println(arr.isFull());
		System.out.println(arr.headQueue());
		arr.showQueue();
		System.out.println(arr.getQueue());

	}
	

}

class ArrayQueue{
	private int maxSize; //表示數組的最大容量
	private int front;//隊列頭
	private int rear;//隊列尾
	private int[] arr;//該數據用於存放數據,模擬隊列
	
	public ArrayQueue(int arrMaxSize){
		maxSize = arrMaxSize;
		arr = new int[maxSize];
		front = -1; //指向隊列頭部,分析出front是指向隊列頭的前一個位置
		rear = -1; //指向隊列尾部,指向隊列尾的數據(即隊列的最後一個數據)
	}
	
	//判斷隊列是否已滿
	public boolean isFull(){
		return maxSize-1 == rear ;
	}
	
	//判斷隊列是否爲空
	public boolean isEmpty(){
		return front == rear;
	}
	
	//添加數據隊列
	public void add(int n){
		if(isFull()){
			System.out.println("隊列已滿");
			return;
		}
		
		rear++;
		arr[rear] = n;
	
	}
	
	//獲取隊列數據
	public int getQueue(){
		if(isEmpty()){
			throw new RuntimeException("隊列爲空,不能取數據");
		}
		
		front++;
		return arr[front];
	}
	//顯示隊列所有數據
	public void showQueue(){
		//遍歷
		if(isEmpty()){
			System.out.println("隊列爲空");
			return;
		}
		
		for(int i=0;i<arr.length;i++){
			System.out.printf("arr[%d]=%d\n", i,arr[i]);
		}
	}
	
	//顯示隊列的頭數據
	public int headQueue(){
		if(isEmpty()){
			throw new RuntimeException("頭數據爲空");
		}
		return arr[front+1];
	}
	
}

但是會導致隊列前的空間發生浪費,數組使用一次就不能複用,因此需要環形隊列。

class CircleArray{
	private int maxSize; //表示數組的最大容量
	private int front;//隊列頭
	private int rear;//隊列尾
	private int[] arr;//該數據用於存放數據,模擬隊列
	
	public CircleArray(int arrMaxSize){
		maxSize = arrMaxSize;
		arr = new int[maxSize];
		front = 0; //front指的是隊列的第一個元素,也就是arr[fornt]
		rear = 0; //指向隊列最後一個元素的後一個位置
	}
	
	//判斷隊列是否已滿
	public boolean isFull(){
		return (rear+1) % maxSize == front ;
	}
	
	//判斷隊列是否爲空
	public boolean isEmpty(){
		return front == rear;
	}
	
	//添加數據隊列
	public void add(int n){
		if(isFull()){
			System.out.println("隊列已滿");
			return;
		}
		
		arr[rear] = n;
		rear = (rear+1) % maxSize;
	
	}
	
	//獲取隊列數據
	public int getQueue(){
		if(isEmpty()){
			throw new RuntimeException("隊列爲空,不能取數據");
		}
		

		int value = arr[front];
		front = (front+1) % maxSize;
		return value;
	}
	
	//求出隊列當前有效數據個數
	public int size(){
		return (rear-front+maxSize) % maxSize;
	}
	//顯示隊列所有數據
	public void showQueue(){
		//遍歷
		if(isEmpty()){
			System.out.println("隊列爲空");
			return;
		}
		
		for(int i=front;i<size();i++){
			System.out.printf("arr[%d]=%d\n", i % maxSize,arr[i % maxSize]);
		}
	}
	
	//顯示隊列的頭數據
	public int headQueue(){
		if(isEmpty()){
			throw new RuntimeException("頭數據爲空");
		}
		return arr[front];
	}
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章