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

Java自定義實(shí)現(xiàn)鏈隊(duì)列詳解

 更新時(shí)間:2017年12月06日 08:41:50   作者:HcJsJqJSSM  
這篇文章主要為大家詳細(xì)介紹了Java自定義實(shí)現(xiàn)鏈隊(duì)列的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、寫在前面

        數(shù)據(jù)結(jié)構(gòu)中的隊(duì)列應(yīng)該是比較熟悉的了,就是先進(jìn)先出,因?yàn)橛行蚬实妹?duì)列,就如同排隊(duì)嘛,在對(duì)尾插入新的節(jié)點(diǎn),在對(duì)首刪除節(jié)點(diǎn).jdk集合框架也是提供也一個(gè)Queue的接口.這個(gè)接口代表一個(gè)隊(duì)列.順序隊(duì)列:ArrayBlockingQueue,LinkedBlockingQueue.(上面兩種是足色隊(duì)列)還有一種是ConcurentLinkedQueue。
底層的實(shí)現(xiàn)由數(shù)組合鏈表兩種的,數(shù)組的實(shí)現(xiàn)會(huì)有個(gè)弊端的,會(huì)造成假滿的現(xiàn)象,開(kāi)始的時(shí)候,隊(duì)列為空的時(shí)候,對(duì)首引用變量個(gè)對(duì)尾的引用變量都為null,隨著刪除隊(duì)列的元素,就會(huì)發(fā)生front+1,rear等于底層數(shù)組的容量了.在順序的存儲(chǔ)結(jié)構(gòu)中,front總是保存這著隊(duì)列中即將出隊(duì)列的元素的索引,rear總是保存著即將進(jìn)入隊(duì)列的元素的索引.隊(duì)列中的元素的個(gè)數(shù)就是rear-front的.在順序的隊(duì)列中,底層是數(shù)組,所以保存 的數(shù)據(jù)元素是不會(huì)改變的,改變的只有rear和front這兩個(gè)引用變量.
        這里采用鏈?zhǔn)酱鎯?chǔ)可以有效的利用空間的,就是引用變量要占用額外的空間的.

隊(duì)列的常用的操作:

             1:初始化
             2:返回隊(duì)列的長(zhǎng)度
             3:添加元素
             4:刪除元素
             5:訪問(wèn)對(duì)首的元素
             6:訪問(wèn)隊(duì)列的對(duì)尾的元素
             7:判斷隊(duì)列是否為空
             8:清空隊(duì)列

二、自定義的實(shí)現(xiàn)

源碼展示的比較清楚,就不用再多做介紹

public class LinkedQueue<T>{
//自定義鏈隊(duì)列--采用非靜態(tài)內(nèi)部類來(lái)表示鏈隊(duì)列的數(shù)據(jù)節(jié)點(diǎn)
private class Node{
//表示鏈隊(duì)列的數(shù)據(jù)節(jié)點(diǎn) 
private T data;
//指向下一個(gè)節(jié)點(diǎn)的引用
private Node next;
 @SuppressWarnings("unused")
 public Node(){
 
}
public Node(T data,Node next){
 this.data=data;
 this.next=next;
 }
}
//定義鏈隊(duì)列的對(duì)首和對(duì)尾的引用
 private Node front;
 private Node rear;
 //定義鏈棧的大小
private int size;
 //創(chuàng)建一個(gè)空的鏈對(duì)列
public LinkedQueue(){
 front=null;
 rear=null;
}
//以確定的元素來(lái)創(chuàng)建一個(gè)鏈對(duì)列,只有一個(gè)節(jié)點(diǎn)的
public LinkedQueue(T element){
front=new Node(element,null);
//指向同一個(gè)元素
rear=front;
size++;
}
//返回鏈隊(duì)列的大小
public int length(){
return size;
}
//返回鏈隊(duì)列得對(duì)首的元素,不刪除對(duì)首的元素
public T elementFront(){
if(!empty()){
 return front.data;
}else{
 return null; 
 
}
}
//訪問(wèn)隊(duì)列的最后一個(gè)元素
public T elementRear(){
if(!empty()){
 return rear.data;
 
}else{
 return null; 
} 
}
//返回當(dāng)前的鏈對(duì)隊(duì)列是否為空
public boolean empty(){
 return size==0;
 }
//清空一個(gè)鏈隊(duì)列
public void clear(){
 front=null;
 rear=null;
 size=0;
}
//插入鏈隊(duì)列一個(gè)節(jié)點(diǎn)--對(duì)尾
public void add(T element){
 //如果鏈對(duì)列為空,就新建一個(gè)節(jié)點(diǎn)
 if(front==null){
 rear=new Node(element,null);
 front=rear;
 }else{
 //動(dòng)態(tài)創(chuàng)建新節(jié)點(diǎn)
 Node newRear=new Node(element,null);
 rear.next=newRear;
 rear=newRear; 
}
size++;
}
//刪除鏈隊(duì)列一個(gè)節(jié)點(diǎn),返回刪除后的節(jié)點(diǎn)
public T remove(){
   Node oldFront=front;
   front=front.next;
   oldFront.next=null;
   size--;
   return oldFront.data;
}
//返回隊(duì)列
public String toString(){
 //如果鏈隊(duì)列為空鏈隊(duì)列是
 if(empty()){
 return "[]";
 }else{
 StringBuilder sBuilder=new StringBuilder("[");
 for(Node current=front;current!=null;current=current.next){
 sBuilder.append(current.data.toString()+",");
}
 int len=sBuilder.length();
return sBuilder.delete(len-1, len).append("]").toString();
}
}
public static void main(String[] args) {
 LinkedQueue<String> lQueue=new LinkedQueue<String>();
 lQueue.add("aaa");
 lQueue.add("bbb");
 lQueue.add("ccc");
 lQueue.add("ddd");
System.out.println("返回隊(duì)列的頭結(jié)點(diǎn)的數(shù)值:"+lQueue.elementFront());
System.out.println("返回隊(duì)列的尾節(jié)點(diǎn)的數(shù)值:"+lQueue.elementRear());
System.out.println(lQueue.length());
System.out.println(lQueue);
}
}  

運(yùn)行結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA如何解決代碼沒(méi)有提示問(wèn)題

    IDEA如何解決代碼沒(méi)有提示問(wèn)題

    文章介紹了如何解決IDEA中代碼提示功能缺失的問(wèn)題,首先,需要調(diào)整快捷鍵設(shè)置,將CyclicExpandWord鍵映射為Ctrl+/,其次,確保輸入框中設(shè)置為Basic,然后添加鍵盤快捷鍵Alt+/,如果問(wèn)題依然存在,可能是由于電腦省電模式導(dǎo)致的,需要取消相關(guān)設(shè)置
    2024-11-11
  • 詳解如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API

    詳解如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API

    作為后端程序員,我們的日常工作就是調(diào)用一些第三方服務(wù),將數(shù)據(jù)存入數(shù)據(jù)庫(kù),返回信息給前端。本文為大家介紹了如何在SpringBoot中優(yōu)雅地重試調(diào)用第三方API,需要的可以參考一下
    2022-12-12
  • Java正則替換手機(jī)號(hào)代碼實(shí)例

    Java正則替換手機(jī)號(hào)代碼實(shí)例

    本文的主要內(nèi)容是Java語(yǔ)言中正則表達(dá)式替換手機(jī)號(hào)的第4到第7位,實(shí)現(xiàn)方法十分簡(jiǎn)單,同時(shí)涉及了一些正則表達(dá)式的相關(guān)用法,需要的朋友可以參考下。
    2017-09-09
  • java中優(yōu)化大量if...else...方法總結(jié)

    java中優(yōu)化大量if...else...方法總結(jié)

    在我們平時(shí)的開(kāi)發(fā)過(guò)程中,經(jīng)??赡軙?huì)出現(xiàn)大量If else的場(chǎng)景,代碼顯的很臃腫,非常不優(yōu)雅,下面這篇文章主要給大家介紹了關(guān)于java中優(yōu)化大量if...else...方法的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Java?深入探究講解簡(jiǎn)單工廠模式

    Java?深入探究講解簡(jiǎn)單工廠模式

    簡(jiǎn)單工廠模式是屬于創(chuàng)建型模式,又叫做靜態(tài)工廠方法(Static Factory Method)模式,但不屬于23種GOF設(shè)計(jì)模式之一。簡(jiǎn)單工廠模式是由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。簡(jiǎn)單工廠模式是工廠模式家族中最簡(jiǎn)單實(shí)用的模式,可以理解為是不同工廠模式的一個(gè)特殊實(shí)現(xiàn)
    2022-04-04
  • Java利用EasyExcel實(shí)現(xiàn)導(dǎo)出導(dǎo)入功能的示例代碼

    Java利用EasyExcel實(shí)現(xiàn)導(dǎo)出導(dǎo)入功能的示例代碼

    EasyExcel是一個(gè)基于Java的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的Excel處理工具。本文廢話不多說(shuō),直接上手試試,用代碼試試EasyExcel是否真的那么好用
    2022-11-11
  • mybatis之批量添加問(wèn)題

    mybatis之批量添加問(wèn)題

    這篇文章主要介紹了mybatis之批量添加問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • idea中service或者mapper引入報(bào)紅的問(wèn)題及解決

    idea中service或者mapper引入報(bào)紅的問(wèn)題及解決

    在使用IntelliJ IDEA開(kāi)發(fā)SpringBoot項(xiàng)目時(shí),有時(shí)會(huì)遇到Service或Mapper接口引入時(shí)報(bào)紅但不影響項(xiàng)目運(yùn)行的情況,這主要是因?yàn)镮DEA的檢查級(jí)別設(shè)置問(wèn)題,解決方法是將有問(wèn)題的Error級(jí)別改為編譯通過(guò)的安全級(jí)別,即可消除報(bào)紅
    2024-09-09
  • Spring Boot文件上傳最新解決方案

    Spring Boot文件上傳最新解決方案

    本文給大家分享Spring Boot文件上傳功能的示例代碼,包括單文件上傳示例和多文件上傳,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • Map按單個(gè)或多個(gè)Value排序當(dāng)Value相同時(shí)按Key排序

    Map按單個(gè)或多個(gè)Value排序當(dāng)Value相同時(shí)按Key排序

    Map可以先按照value進(jìn)行排序,然后按照key進(jìn)行排序。 或者先按照key進(jìn)行排序,然后按照value進(jìn)行排序,這樣操作都行,這篇文章主要介紹了Map按單個(gè)或多個(gè)Value排序,當(dāng)Value相同時(shí)按Key排序,需要的朋友可以參考下
    2023-02-02

最新評(píng)論

五大连池市| 天峨县| 新民市| 永和县| 四平市| 三台县| 孝昌县| 任丘市| 申扎县| 明水县| 宝兴县| 阿图什市| 巴南区| 利津县| 长武县| 大连市| 南陵县| 晋江市| 新田县| 托里县| 黑山县| 阿鲁科尔沁旗| 天等县| 广州市| 宁波市| 大田县| 中超| 陵川县| 托克逊县| 临夏县| 涞水县| 米易县| 西贡区| 日喀则市| 苍山县| 忻城县| 花莲县| 开阳县| 泽州县| 乾安县| 江口县|