欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):順序隊(duì)列和循環(huán)隊(duì)列

 更新時(shí)間:2021年08月01日 10:34:16   作者:去吧貓頭夜鷹  
下面小編就為大家分享一篇java隊(duì)列實(shí)現(xiàn)方法(順序隊(duì)列,循環(huán)隊(duì)列),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

隊(duì)列:

隊(duì)列是一種受限制的線性表

只允許在表的一端進(jìn)行插入,另一端進(jìn)行刪除

插入的一端稱作隊(duì)尾,刪除的一端稱作隊(duì)頭

具有先進(jìn)先出的特性

順序隊(duì)列:

隊(duì)列底層數(shù)據(jù)采用數(shù)組存儲(chǔ)

設(shè)置隊(duì)頭指針front指向隊(duì)頭元素前一個(gè)位置,初始值為-1

設(shè)置隊(duì)尾指針rear指向隊(duì)尾元素,初始值為-1

判滿:rear == maxSize - 1

判空:rear == front

代碼實(shí)現(xiàn):

//順序隊(duì)列
public class ArrayQueue {
	private int maxSize;    //數(shù)組的最大容量
	private int front;        //隊(duì)頭指針
	private int rear;        //隊(duì)尾指針
	private int[] array;    //存放數(shù)據(jù)
	public ArrayQueue(int arrMaxSize) {
		maxSize = arrMaxSize;
		array = new int[maxSize];
		front = -1;        //指向隊(duì)頭的前一個(gè)位置
		rear = -1;        //指向隊(duì)尾
	}
	//判斷隊(duì)列是否滿
	public boolean isFull() {
		return rear == maxSize - 1;
	}
	//判斷隊(duì)列是否空
	public boolean isEmpty() {
		return rear == front;
	}
	//入隊(duì)
	public void addQueue(int n) {
		//判斷隊(duì)列是否滿
		if (isFull()) {
			System.out.println("隊(duì)列滿");
			return;
		}
		rear++;    //rear后移
		array[rear] = n;
	}
	//出隊(duì)
	public int getQueue() {
		//判斷隊(duì)列是否空
		if (isEmpty()) {
			throw new RuntimeException("隊(duì)列為空");
		}
		front++;    //front后移
		return array[front];
	}
	//取隊(duì)頭數(shù)據(jù)
	public int headQueue() {
		if (isEmpty()) {
			throw new RuntimeException("隊(duì)列為空");
		}
		return array[front + 1];
	}
	//輸出隊(duì)列所有數(shù)據(jù)
	public void showQueue() {
		//遍歷輸出
		if (isEmpty()) {
			System.out.println("隊(duì)列為空");
            return;
		}
		for (int i = 0; i < array.length; i++) {
			System.out.printf("array[%d] = %d\n", i, array[i]);
		}
	}
}

順序隊(duì)列存在假溢出現(xiàn)象,故使用循環(huán)隊(duì)列替代順序隊(duì)列

循環(huán)隊(duì)列:

隊(duì)列底層數(shù)據(jù)仍然采用數(shù)組存儲(chǔ)

為了便于判空和判滿,在數(shù)組中預(yù)留一個(gè)空間,認(rèn)為只留下一個(gè)空間的時(shí)候隊(duì)列為滿

設(shè)置隊(duì)頭指針front指向隊(duì)頭元素,初始值為0

設(shè)置隊(duì)尾指針rear指向隊(duì)尾元素的后一個(gè)位置,初始值為0

判滿:(rear + 1) % maxSize == front

判空:rear == front

取得當(dāng)前隊(duì)列有效數(shù)據(jù)個(gè)數(shù):(rear + maxSize - front) % maxSize

代碼實(shí)現(xiàn):

//循環(huán)隊(duì)列
public class CircleQueue {
	private int maxSize;    //數(shù)組的最大容量
	private int front;        //隊(duì)頭指針
	private int rear;        //隊(duì)尾指針
	private int[] array;    //存放數(shù)據(jù)
	public CircleQueue(int arrMaxSize) {
		maxSize = arrMaxSize;
		array = new int[maxSize];
		front = 0;        //指向隊(duì)頭的前一個(gè)位置
		rear = 0;        //指向隊(duì)尾
	}
	//判斷隊(duì)列是否滿
	public boolean isFull() {
		return (rear + 1) % maxSize == front;
	}
	//判斷隊(duì)列是否空
	public boolean isEmpty() {
		return rear == front;
	}
	//入隊(duì)
	public void addQueue(int n) {
		//判斷隊(duì)列是否滿
		if (isFull()) {
			System.out.println("隊(duì)列滿");
			return;
		}
		array[rear] = n;
		rear = (rear + 1) % maxSize;
	}
	//出隊(duì)
	public int getQueue() {
		//判斷隊(duì)列是否空
		if (isEmpty()) {
			throw new RuntimeException("隊(duì)列為空");
		}
		//保存front對(duì)應(yīng)的值
		int value = array[front];
		front = (front + 1) % maxSize;
		return value;
	}
	//取隊(duì)頭數(shù)據(jù)
	public int headQueue() {
		if (isEmpty()) {
			throw new RuntimeException("隊(duì)列為空");
		}
		return array[front];
	}
	//獲取當(dāng)前隊(duì)列有效數(shù)據(jù)個(gè)數(shù)
	public int size() {
		return (rear + maxSize - front) % maxSize;
	}
	//輸出隊(duì)列所有數(shù)據(jù)
	public void showQueue() {
		//遍歷輸出
		if (isEmpty()) {
			System.out.println("隊(duì)列為空");
            return;
		}
		//從front開始遍歷
		for (int i = front; i < front + size(); i++) {
			System.out.printf("array[%d] = %d\n", i % maxSize, array[i % maxSize]);
		}
	}
}

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • JAVA 枚舉相關(guān)知識(shí)匯總

    JAVA 枚舉相關(guān)知識(shí)匯總

    這篇文章主要介紹了JAVA 枚舉相關(guān)知識(shí),文中講解的非常詳細(xì),代碼幫助大家更好的參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Struts中action線程安全問(wèn)題解析

    Struts中action線程安全問(wèn)題解析

    這篇文章主要介紹了Struts中action線程安全問(wèn)題解析,涉及實(shí)例代碼,還是挺不錯(cuò)的,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • 【MyBatis源碼全面解析】MyBatis一二級(jí)緩存介紹

    【MyBatis源碼全面解析】MyBatis一二級(jí)緩存介紹

    下面小編就為大家?guī)?lái)一篇【MyBatis源碼全面解析】MyBatis一二級(jí)緩存介紹。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 詳解SpringBoot健康檢查的實(shí)現(xiàn)原理

    詳解SpringBoot健康檢查的實(shí)現(xiàn)原理

    這篇文章主要介紹了詳解SpringBoot健康檢查的實(shí)現(xiàn)原理,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下
    2021-03-03
  • Java獲取漢字對(duì)應(yīng)的拼音(全拼或首字母)

    Java獲取漢字對(duì)應(yīng)的拼音(全拼或首字母)

    這篇文章主要介紹了Java如何獲取漢字對(duì)應(yīng)的拼音(全拼或首字母),文中實(shí)現(xiàn)的方法是引用了pinyin4j-2.5.0.jar,然后給出了完整的示例代碼,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • 總結(jié)java多線程之互斥與同步解決方案

    總結(jié)java多線程之互斥與同步解決方案

    文中總結(jié)了線程互斥與同步,synchronized使用細(xì)節(jié)及原理,Reentrylock使用細(xì)節(jié)等知識(shí),對(duì)解決Java多線程互斥與同步等問(wèn)題很有效,,需要的朋友可以參考下
    2021-05-05
  • Spring Boot利用Thymeleaf發(fā)送Email的方法教程

    Spring Boot利用Thymeleaf發(fā)送Email的方法教程

    spring Boot默認(rèn)就是使用thymeleaf模板引擎的,下面這篇文章主要給大家介紹了關(guān)于在Spring Boot中利用Thymeleaf發(fā)送Email的方法教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-08-08
  • Java實(shí)戰(zhàn)之客戶信息管理系統(tǒng)

    Java實(shí)戰(zhàn)之客戶信息管理系統(tǒng)

    這篇文章主要介紹了Java實(shí)戰(zhàn)之客戶信息管理系統(tǒng),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • IDEA?Eval?Reset?使用方法匯總

    IDEA?Eval?Reset?使用方法匯總

    本文給大家介紹了IDEA?Eval?Reset?使用方法,安裝插件包括離線安裝方式和在線安裝方式,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Java 中利用泛型和反射機(jī)制抽象DAO的實(shí)例

    Java 中利用泛型和反射機(jī)制抽象DAO的實(shí)例

    這篇文章主要介紹了Java 中利用泛型和反射機(jī)制抽象DAO的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評(píng)論