Java數據結構與算法——day02

隊列

  1. 使用場景:銀行叫號排隊系統
  2. 定義:有序列表,可用數組或鏈表實現
  3. 特點:先入先出,先存入隊列的數據先取出,後存入的後取出,排隊
  4. 數組模擬隊列:
    在這裏插入圖片描述
    maxSize:隊列最大容量
    front:隊列頭指針
    rear:隊列尾指針
    int【】:數組
package com.atguigu.queue;

import java.util.Scanner;

import javax.management.RuntimeErrorException;

public class ArrayQueue {

	public static void main(String[] args) {
		ArrayQueue queue = new ArrayQueue(4);
		char key = ' ';
		Scanner scanner = new Scanner(System.in);
		boolean loop = true;
		while(loop){
			System.out.println("---------------------------------------------------");
			System.out.println("a-->入隊");
			System.out.println("g-->出隊");
			System.out.println("s-->查看數組狀態");
			System.out.println("q-->查看隊列狀態");
			System.out.println("h-->查看隊列頭部數據");
			System.out.println("e-->退出程序");
			System.out.println("---------------------------------------------------");
			key = scanner.next().charAt(0);
			switch (key) {
			case 'a':
				System.out.println("請輸入一個數字:");
				int value = scanner.nextInt();
				queue.addValue(value);
				break;
			case 'g':
				try {
					int res = queue.getValue();
					System.out.printf("出隊的數據爲%d\n", res);
				} catch (Exception e) {
					System.out.printf(e.getMessage());
				}
				break;
			case 's':
				queue.showArray();
				break;
			case 'q':
				queue.showQueue();
				break;
			case 'h':
				queue.headValue();
				break;
			case 'e':
				scanner.close();
				loop = false;
				break;
			default:
				break;
			}
		}	
		System.out.println("程序已退出~~~");
	}
	
	public int max_size;//隊列最大容量
	public int front;//隊列頭位置:初始化後,指向隊列第一個元素之前的位置
	public int rear;//隊列尾位置:初始化後,指向隊列最後一個元素的位置
	public int[] arr;//存放隊列的數組
	
//	初始化隊列
	public ArrayQueue(int maxSize){
		max_size = maxSize;
		front = -1;
		rear = -1;
		arr = new int[max_size];
	}
	
//	判斷隊滿
	public boolean isFull(){
		if(front == max_size-1){
			return true;
		}
		return false;
	}
	
//	判斷隊空
	public boolean isEmpty(){
		if(rear == front){
			return true;
		}
		return false;
	}
	
//	入隊
	public void addValue(int value){
//		判斷隊滿:若滿,則不可添加
		if(isFull()){
			System.out.println("隊列已滿,不可添加數據!");
			return;
		}
		front++;
		arr[front] = value;
	}
	
//	出隊
	public int getValue(){
//		判斷隊空:若空,則不可出隊
		if(isEmpty()){
			throw new RuntimeException("隊列爲空,不可出隊");
		}
		rear++;
		return arr[rear];
	}
	
//	顯示數組
	public void showArray(){
		System.out.println("當前數組狀態如下:");
		for(int i = 0;i<arr.length;i++){
			System.out.printf("arr[%d]-->%d\n", i, arr[i]);
		}
	}
	
//	查看隊列頭元素值
	public void showQueue(){
		System.out.println("當前隊列狀態如下:");
		for(int i = rear+1;i<front+1;i++){
			System.out.printf("queue[%d]-->%d\n", i, arr[i]);
		}
	}
	
	public void headValue(){
		System.out.printf("頭部數據爲:%d", arr[rear+1]);
	}
	
	

}

存在問題:
數組只能使用一次,用過的位置不可複用。

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