亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java如何實現隊列queue數據結構

發布時間:2022-02-08 09:33:46 來源:億速云 閱讀:124 作者:小新 欄目:開發技術

這篇文章主要介紹java如何實現隊列queue數據結構,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

    概念

    隊列是一種非原始(特殊)的線性表,是一種先進先出(FIFO)的數據結構。它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作。

    FIFO:first input first output,即先添加的元素,先移除,最后添加的元素,最后移除。

    工作方式類似于商場排隊結賬情形:

    java如何實現隊列queue數據結構

    數組模擬隊列圖示:

    java如何實現隊列queue數據結構

    隊列中兩個主要操作

    插入值操作:insert ——》 enqueue(入隊) ——》參數是要插入的數據data

    刪除值操作:remove ——》 dequeue (出隊)——》 無參

    隊列遵循以下條件:

    如果 FRONT = 0,那么隊列就是空的。

    如果 REAR = size of the queue,那么隊列就是滿了。

    如果 FRONT = REAR,那么隊列中至少有一個元素。

    如果你想知道隊列中元素的總數,那么使用這個公式計算(REAR - FRONT)+1。

    隊列的數組實現

    我們可以通過數組、堆棧和鏈表來實現隊列。其中數組是實現隊列的最簡單方法。

    創建一個大小為 n 的數組。將 FRONT 和 REAR 的值初始化為 -1,該值表示該數組當前為空。

    編寫一個ArrayQueue類如下:

    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;  // rear  是指向隊列尾的數據(最后一個數據)
    	}
     
    	// 判斷隊列是否已滿
    	public boolean isFull() {
    		return rear == maxSize - 1;
    	}
     
    	// 判斷隊列是否為空
    	public boolean isEmpty() {
    		return rear == front;
    	}
     
    	// 添加數據
    	public void addQueue(int n) {
    		if (isFull()) {
    			System.out.println("隊列已滿,不能再添加數據了!");
    			return;
    		}
    		rear++; // 讓rear 后移
    		arr[rear] = n;
    	}
     
    	// 獲取數據
    	public int getQueue() {
    		if (isEmpty()) {
    			// 通過拋出異常
    			throw new RuntimeException("隊列為空,無數據可取!");
    		}
    		front++; // 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];
    	}
    }

    編寫測試方法:

    		//創建一個隊列
    		ArrayQueue queue = new ArrayQueue(3);
    		char key = ' '; 
    		Scanner scanner = new Scanner(System.in);//
    		boolean loop = true;
    		//輸出一個菜單選項
    		while(loop) {
    			System.out.println("s(show): 顯示隊列");
    			System.out.println("e(exit): 退出程序");
    			System.out.println("a(add): 添加數據到隊列");
    			System.out.println("g(get): 從隊列取出數據");
    			System.out.println("h(head): 查看隊列頭的數據");
    			key = scanner.next().charAt(0);//接收一個字符
    			switch (key) {
    			case 's': //顯示隊列所有數據
    				queue.showQueue();
    				break;
    			case 'a': //添加數據
    				System.out.println("輸出一個數");
    				int value = scanner.nextInt();
    				queue.addQueue(value);
    				break;
    			case 'g': //依次取出數據
    				try {
    					int res = queue.getQueue();
    					System.out.printf("取出的數據是%d\n", res);
    				} catch (Exception e) {
    					// TODO: handle exception
    					System.out.println(e.getMessage());
    				}
    				break;
    			case 'h': //查看隊列頭指向
    				try {
    					int res = queue.headQueue();
    					System.out.printf("隊列頭的數據是%d\n", res);
    				} catch (Exception e) {
    					// TODO: handle exception
    					System.out.println(e.getMessage());
    				}
    				break;
    			case 'e': //退出程序
    				scanner.close();
    				loop = false;
    				break;
    			default:
    				break;
    			}
    		}
    		
    		System.out.println("程序退出~~");
    	}

    以上是“java如何實現隊列queue數據結構”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    张家界市| 宜兰市| 博湖县| 呼和浩特市| 甘洛县| 宁远县| 南和县| 四平市| 抚远县| 永安市| 广汉市| 吉隆县| 贞丰县| 兴仁县| 乾安县| 巴彦淖尔市| 商城县| 金寨县| 绥芬河市| 綦江县| 山丹县| 无锡市| 亚东县| 峨眉山市| 梓潼县| 东城区| 邢台县| 大英县| 庄河市| 靖安县| 沙湾县| 广德县| 海安县| 揭西县| 姚安县| 故城县| 含山县| 英吉沙县| 喀喇沁旗| 龙泉市| 建阳市|