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

Java數(shù)組模擬優(yōu)先級(jí)隊(duì)列數(shù)據(jù)結(jié)構(gòu)的實(shí)例

 更新時(shí)間:2016年04月21日 08:55:15   作者:匆忙擁擠repeat  
這篇文章主要介紹了Java數(shù)組模擬優(yōu)先級(jí)隊(duì)列數(shù)據(jù)結(jié)構(gòu)的實(shí)例,優(yōu)先級(jí)隊(duì)列中的元素會(huì)被設(shè)置優(yōu)先權(quán),本文的例子借助了Java中的TreeSet和TreeMap,需要的朋友可以參考下

優(yōu)先級(jí)隊(duì)列
如果我們給每個(gè)元素都分配一個(gè)數(shù)字來(lái)標(biāo)記其優(yōu)先級(jí),不妨設(shè)較小的數(shù)字具有較高的優(yōu)先級(jí),這樣我們就可以在一個(gè)集合中訪問(wèn)優(yōu)先級(jí)最高的元素并對(duì)其進(jìn)行查找和刪除操作了。這樣,我們就引入了優(yōu)先級(jí)隊(duì)列 這種數(shù)據(jù)結(jié)構(gòu)。 優(yōu)先級(jí)隊(duì)列(priority queue) 是0個(gè)或多個(gè)元素的集合,每個(gè)元素都有一個(gè)優(yōu)先權(quán),對(duì)優(yōu)先級(jí)隊(duì)列執(zhí)行的操作有(1)查找(2)插入一個(gè)新元素 (3)刪除 一般情況下,查找操作用來(lái)搜索優(yōu)先權(quán)最大的元素,刪除操作用來(lái)刪除該元素 。對(duì)于優(yōu)先權(quán)相同的元素,可按先進(jìn)先出次序處理或按任意優(yōu)先權(quán)進(jìn)行。

Java數(shù)組模擬隊(duì)列
隊(duì)列是一種特殊的線性表,它只允許在表的前端進(jìn)行刪除操作,而在表的后端進(jìn)行插入操作。進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。這也就是我們平常經(jīng)常用說(shuō)到的先進(jìn)先出原則(FIFO)。Java 中的 List 就可以作為隊(duì)列來(lái)使用,在隊(duì)列尾部添加元素則使用 list.add 方法,從隊(duì)列頭部刪除元素則使用 list.remove 方法。

Java數(shù)組模擬優(yōu)先級(jí)隊(duì)列結(jié)構(gòu)實(shí)例:

package datastruct; 
 
import java.util.Arrays; 
import java.util.Comparator; 
 
/** 
 * 用數(shù)組模擬 優(yōu)先級(jí)隊(duì)列 優(yōu)先級(jí)高的排前、先出 線性表結(jié)構(gòu) 
 * 類似使用了比較器的 TreeSet、TreeMap 
 */ 
public class SimulatePriorityQueue { 
   
  public static void main(String[] args) { 
    SimulatePriorityQueue queue = new SimulatePriorityQueue(4); 
//   SimulateQueue queue = new SimulateQueue(); 
//   System.out.println("取出元素:" + queue.remove()); 
    queue.insert(1); 
    queue.insert(3); 
    queue.insert(2); 
    queue.insert(5); 
    queue.insert(4); 
    System.out.println("size:" + queue.size()); 
    System.out.println("peek:" + queue.peek()); 
    System.out.println("取出元素:" + queue.remove()); 
    System.out.println("取出元素:" + queue.remove()); 
    System.out.println("取出元素:" + queue.remove()); 
    System.out.println("取出元素:" + queue.remove()); 
//   System.out.println("取出元素:" + queue.remove()); 
    System.out.println("size:" + queue.size()); 
    System.out.println(); 
  } 
 
  private int mSize = 3;     //大小 
  private int[] mArray;    //數(shù)組 
  private int mNextItem;     //下一個(gè)位置,也可當(dāng)作 當(dāng)前的元素?cái)?shù) 
   
  public SimulatePriorityQueue() { 
    mArray = new int[mSize]; 
    mNextItem = 0; 
  } 
  public SimulatePriorityQueue(int size) { 
    this.mSize = size; 
    mArray = new int[mSize]; 
    mNextItem = 0; 
  } 
  /** 
   * 插入元素 
   * @param item 
   */ 
  public void insert(int item) { 
    if (!isFull()) { 
      mArray[mNextItem++] = item; 
      for (int i = 0; i < mNextItem; i++) {//冒泡排序 
        for (int j = 0; j < mNextItem - 1; j++) { 
          if (mArray[j] > mArray[j + 1]) { 
            mArray[j] = mArray[j + 1] + 0 * (mArray[j + 1] = mArray[j]); 
            System.out.println(Arrays.toString(mArray)); 
          } 
        } 
      } 
      System.out.println(Arrays.toString(mArray)); 
    } else { 
      System.out.println("----不能插入元素了,隊(duì)列已滿----"); 
    } 
  } 
  /** 
   * 移出元素 先進(jìn)先出 
   * @return 
   */ 
  public int remove() { 
    if (!isEmpty()) { 
      return mArray[--mNextItem]; 
    } else { 
      throw new IllegalArgumentException("沒(méi)有元素可以取出了"); 
    } 
  } 
  /** 
   * 查看前面的元素 
   * @return 
   */ 
  public int peek() { 
    return mArray[mNextItem - 1]; 
  } 
  /** 
   * 是否為空 
   * @return 
   */ 
  public boolean isEmpty() { 
    return mNextItem == 0; 
  } 
  /** 
   * 是否滿 
   * @return 
   */ 
  public boolean isFull() { 
    return mNextItem == mSize; 
  } 
  /** 
   * size 
   * @return 
   */ 
  public int size() { 
    return mNextItem; 
  } 
   
} 

輸出結(jié)果:

[1, 0, 0, 0]
[1, 3, 0, 0]
[1, 2, 3, 0]
[1, 2, 3, 0]
[1, 2, 3, 5]
----不能插入元素了,隊(duì)列已滿----
size:4
peek:5
取出元素:5
取出元素:3
取出元素:2
取出元素:1
size:0

相關(guān)文章

  • mybatis-plus 批量插入示例代碼

    mybatis-plus 批量插入示例代碼

    正常我們使用mybatis-plus插入的時(shí)候,首先想到的是saveBatch方法,不過(guò)看了下打印出來(lái)的sql和底層代碼,才發(fā)現(xiàn)它并不是真正的批量插入這篇文章主要介紹了mybatis-plus 批量插入示例,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于接口ApplicationContext中的getBean()方法使用

    關(guān)于接口ApplicationContext中的getBean()方法使用

    這篇文章主要介紹了關(guān)于接口ApplicationContext中的getBean()方法使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java獲取客戶端真實(shí)IP地址過(guò)程解析

    Java獲取客戶端真實(shí)IP地址過(guò)程解析

    這篇文章主要介紹了Java獲取客戶端真實(shí)IP地址過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • logstash將mysql數(shù)據(jù)同步到elasticsearch方法詳解

    logstash將mysql數(shù)據(jù)同步到elasticsearch方法詳解

    這篇文章主要為大家介紹了logstash將mysql數(shù)據(jù)同步到elasticsearch方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • springboot Controller直接返回String類型帶來(lái)的亂碼問(wèn)題及解決

    springboot Controller直接返回String類型帶來(lái)的亂碼問(wèn)題及解決

    文章介紹了在Spring Boot中,當(dāng)Controller直接返回String類型時(shí)可能出現(xiàn)的亂碼問(wèn)題,并提供了解決辦法,通過(guò)在`application.yaml`中設(shè)置請(qǐng)求和響應(yīng)的編碼格式,并在自定義配置類中進(jìn)行配置,可以有效解決這一問(wèn)題
    2024-11-11
  • 必須詳細(xì)與全面的Java開(kāi)發(fā)環(huán)境搭建圖文教程

    必須詳細(xì)與全面的Java開(kāi)發(fā)環(huán)境搭建圖文教程

    本篇文章內(nèi)容包括:Linux理論與實(shí)操,MySQL實(shí)操,JDK實(shí)操,Tomcat實(shí)操和Tomcat實(shí)操,需要的朋友可以參考下
    2019-11-11
  • Java基礎(chǔ)教程之包(package)

    Java基礎(chǔ)教程之包(package)

    這篇文章主要介紹了Java基礎(chǔ)教程之包(package),本文詳細(xì)講解了包的創(chuàng)建、使用等方法,需要的朋友可以參考下
    2014-08-08
  • springboot整合mail實(shí)現(xiàn)郵箱的發(fā)送功能

    springboot整合mail實(shí)現(xiàn)郵箱的發(fā)送功能

    本文分步驟給大家介紹springboot整合mail實(shí)現(xiàn)郵箱的發(fā)送功能,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-09-09
  • logback的isDebugEnabled日志配置級(jí)別源碼解析

    logback的isDebugEnabled日志配置級(jí)別源碼解析

    這篇文章主要為大家介紹了logback的isDebugEnabled日志配置級(jí)別源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java 模擬cookie登陸簡(jiǎn)單操作示例

    Java 模擬cookie登陸簡(jiǎn)單操作示例

    這篇文章主要介紹了Java 模擬cookie登陸簡(jiǎn)單操作,結(jié)合實(shí)例形式分析了Java 模擬cookie登陸的相關(guān)原理與基本實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-03-03

最新評(píng)論

江门市| 固阳县| 茶陵县| 延川县| 鄂尔多斯市| 襄樊市| 北流市| 溧水县| 扎鲁特旗| 洪洞县| 伊金霍洛旗| 马山县| 离岛区| 梁河县| 南阳市| 临安市| 汽车| 忻州市| 裕民县| 会宁县| 平山县| 普格县| 金湖县| 营口市| 时尚| 衡东县| 宿州市| 当雄县| 青岛市| 青铜峡市| 安龙县| 东辽县| 保山市| 乌拉特前旗| 广德县| 色达县| 昔阳县| 资溪县| 德格县| 呼图壁县| 裕民县|