最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)隊(duì)列queue數(shù)據(jù)結(jié)構(gòu)詳解

 更新時(shí)間:2022年02月03日 10:41:00   作者:CamphorBloom  
大家好,本篇文章主要講的是java實(shí)現(xiàn)隊(duì)列queue數(shù)據(jù)結(jié)構(gòu)詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下

概念

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

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

工作方式類似于商場(chǎng)排隊(duì)結(jié)賬情形:

數(shù)組模擬隊(duì)列圖示:

隊(duì)列中兩個(gè)主要操作

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

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

隊(duì)列遵循以下條件:

如果 FRONT = 0,那么隊(duì)列就是空的。

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

如果 FRONT = REAR,那么隊(duì)列中至少有一個(gè)元素。

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

隊(duì)列的數(shù)組實(shí)現(xiàn)

我們可以通過數(shù)組、堆棧和鏈表來實(shí)現(xiàn)隊(duì)列。其中數(shù)組是實(shí)現(xiàn)隊(duì)列的最簡單方法。

創(chuàng)建一個(gè)大小為 n 的數(shù)組。將 FRONT 和 REAR 的值初始化為 -1,該值表示該數(shù)組當(dāng)前為空。

編寫一個(gè)ArrayQueue類如下:

class ArrayQueue {
	private int maxSize; // 數(shù)組的最大容量
	private int front; // 隊(duì)列頭
	private int rear; // 隊(duì)列尾
	private int[] arr; // 存放數(shù)據(jù), 模擬隊(duì)列
 
	// 創(chuàng)建構(gòu)造器,初始化
	public ArrayQueue(int arrMaxSize) {
		maxSize = arrMaxSize;
		arr = new int[maxSize];
		front = -1; // front 是指向隊(duì)列頭的前一個(gè)位置
		rear = -1;  // rear  是指向隊(duì)列尾的數(shù)據(jù)(最后一個(gè)數(shù)據(jù))
	}
 
	// 判斷隊(duì)列是否已滿
	public boolean isFull() {
		return rear == maxSize - 1;
	}
 
	// 判斷隊(duì)列是否為空
	public boolean isEmpty() {
		return rear == front;
	}
 
	// 添加數(shù)據(jù)
	public void addQueue(int n) {
		if (isFull()) {
			System.out.println("隊(duì)列已滿,不能再添加數(shù)據(jù)了!");
			return;
		}
		rear++; // 讓rear 后移
		arr[rear] = n;
	}
 
	// 獲取數(shù)據(jù)
	public int getQueue() {
		if (isEmpty()) {
			// 通過拋出異常
			throw new RuntimeException("隊(duì)列為空,無數(shù)據(jù)可取!");
		}
		front++; // front后移
		return arr[front];
 
	}
 
	// 顯示隊(duì)列的所有數(shù)據(jù)
	public void showQueue() {
        if (isEmpty()) {
			System.out.println("隊(duì)列空的,沒有數(shù)據(jù)~~");
			return;
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.printf("arr[%d]=%d\n", i, arr[i]);
		}
	}
 
	// 顯示隊(duì)列的頭部指向的下一個(gè)
	public int headQueue() {
		if (isEmpty()) {
			throw new RuntimeException("隊(duì)列為空,沒有數(shù)據(jù)~~");
		}
		return arr[front + 1];
	}
}

編寫測(cè)試方法:

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

總結(jié)

到此這篇關(guān)于java實(shí)現(xiàn)隊(duì)列queue數(shù)據(jù)結(jié)構(gòu)詳解的文章就介紹到這了,更多相關(guān)java實(shí)現(xiàn)隊(duì)列queue內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot使用工具類實(shí)現(xiàn)獲取容器中的Bean

    SpringBoot使用工具類實(shí)現(xiàn)獲取容器中的Bean

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何使用工具類實(shí)現(xiàn)獲取容器中的Bean,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Java 并行數(shù)據(jù)處理和性能分析

    Java 并行數(shù)據(jù)處理和性能分析

    這篇文章主要介紹了Java 并行數(shù)據(jù)處理和性能分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Spring boot怎么整合Mybatis

    Spring boot怎么整合Mybatis

    spring boot的簡配置方便的開發(fā),下面通過本文給大家分享Spring boot整合Mybatis的方法,需要的朋友參考下
    2017-07-07
  • Java Web開發(fā)之基于Session的購物商店實(shí)現(xiàn)方法

    Java Web開發(fā)之基于Session的購物商店實(shí)現(xiàn)方法

    這篇文章主要介紹了Java Web開發(fā)之基于Session的購物商店實(shí)現(xiàn)方法,涉及Java針對(duì)session的操作及數(shù)據(jù)庫操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • ShardingSphere結(jié)合MySQL實(shí)現(xiàn)分庫分表的項(xiàng)目實(shí)踐

    ShardingSphere結(jié)合MySQL實(shí)現(xiàn)分庫分表的項(xiàng)目實(shí)踐

    在實(shí)際開發(fā)中,如果表的數(shù)據(jù)過大我們需要把一張表拆分成多張表,本文主要介紹了使用ShardingSphere實(shí)現(xiàn)MySQL分庫分表,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Java阻塞隊(duì)列BlockingQueue詳解

    Java阻塞隊(duì)列BlockingQueue詳解

    這篇文章主要介紹了Java阻塞隊(duì)列BlockingQueue,文章通過隊(duì)列的類型展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • Java靜態(tài)代碼塊加載驅(qū)動(dòng)代碼實(shí)例

    Java靜態(tài)代碼塊加載驅(qū)動(dòng)代碼實(shí)例

    這篇文章主要介紹了Java靜態(tài)代碼塊加載驅(qū)動(dòng)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 基于spring中的aop簡單實(shí)例講解

    基于spring中的aop簡單實(shí)例講解

    下面小編就為大家?guī)硪黄趕pring中的aop簡單實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • java的串口通信問題

    java的串口通信問題

    這篇文章主要介紹了java的串口通信問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • JAVA 使用正則提取A標(biāo)簽以及href鏈接

    JAVA 使用正則提取A標(biāo)簽以及href鏈接

    這篇文章主要介紹了JAVA 使用正則提取A標(biāo)簽以及href鏈接的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

防城港市| 遂宁市| 旺苍县| 炎陵县| 兴城市| 汶川县| 张掖市| 搜索| 梁山县| 黑山县| 黄梅县| 曲水县| 木兰县| 舟山市| 郓城县| 崇礼县| 北宁市| 锡林郭勒盟| 阳城县| 霞浦县| 根河市| 尚义县| 广灵县| 漾濞| 留坝县| 都江堰市| 玉林市| 岳阳县| 闸北区| 河北省| 道孚县| 上高县| 哈巴河县| 朝阳市| 龙陵县| 香格里拉县| 都昌县| 邢台县| 来宾市| 鄂托克旗| 五华县|