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

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ù)字來標(biāo)記其優(yōu)先級(jí),不妨設(shè)較小的數(shù)字具有較高的優(yōu)先級(jí),這樣我們就可以在一個(gè)集合中訪問優(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)刪除 一般情況下,查找操作用來搜索優(yōu)先權(quán)最大的元素,刪除操作用來刪除該元素 。對(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)常用說到的先進(jìn)先出原則(FIFO)。Java 中的 List 就可以作為隊(duì)列來使用,在隊(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("沒有元素可以取出了"); 
    } 
  } 
  /** 
   * 查看前面的元素 
   * @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)文章

  • SpringBoot邏輯異常統(tǒng)一處理方法

    SpringBoot邏輯異常統(tǒng)一處理方法

    這篇文章主要介紹了SpringBoot邏輯異常統(tǒng)一處理方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Springboot中使用Redisson+AOP+自定義注解實(shí)現(xiàn)訪問限流與黑名單攔截

    Springboot中使用Redisson+AOP+自定義注解實(shí)現(xiàn)訪問限流與黑名單攔截

    本文主要介紹了Springboot中使用Redisson+AOP+自定義注解實(shí)現(xiàn)訪問限流與黑名單攔截,包含針對(duì)用戶IP限流,整個(gè)接口的訪問限流,以及對(duì)某個(gè)參數(shù)字段的限流,并且支持請(qǐng)求限流后處理回調(diào),感興趣的可以了解一下
    2024-02-02
  • spring boot整合shiro安全框架過程解析

    spring boot整合shiro安全框架過程解析

    這篇文章主要介紹了spring boot整合shiro安全框架過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java設(shè)計(jì)模式筆記之抽象工廠代碼示例

    Java設(shè)計(jì)模式筆記之抽象工廠代碼示例

    這篇文章主要介紹了Java設(shè)計(jì)模式筆記之抽象工廠代碼示例,見解獨(dú)到,代碼詳細(xì),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Java 進(jìn)制轉(zhuǎn)換的方法

    Java 進(jìn)制轉(zhuǎn)換的方法

    這篇文章介紹了Java 進(jìn)制轉(zhuǎn)換的方法,有需要的朋友可以參考一下
    2013-09-09
  • 使用Filter過濾器中訪問getSession()要轉(zhuǎn)化

    使用Filter過濾器中訪問getSession()要轉(zhuǎn)化

    這篇文章主要介紹了使用Filter過濾器中訪問getSession()要轉(zhuǎn)化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java中static關(guān)鍵字的作用解析

    Java中static關(guān)鍵字的作用解析

    這篇文章主要介紹了Java中static關(guān)鍵字的作用解析,Java 中,不能在所有類之外定義全局變量,只能通過在一個(gè)類中定義公用、靜態(tài)的變量來實(shí)現(xiàn)一個(gè)全局變量,需要的朋友可以參考下
    2023-11-11
  • java基礎(chǔ)學(xué)習(xí)筆記之泛型

    java基礎(chǔ)學(xué)習(xí)筆記之泛型

    所謂泛型,就是變量類型的參數(shù)化。泛型是JDK1.5中一個(gè)最重要的特征。通過引入泛型,我們將獲得編譯時(shí)類型的安全和運(yùn)行時(shí)更小的拋出ClassCastException的可能。在JDK1.5中,你可以聲明一個(gè)集合將接收/返回的對(duì)象的類型。
    2016-02-02
  • RocketMQ的四種常用消息隊(duì)列及代碼演示

    RocketMQ的四種常用消息隊(duì)列及代碼演示

    這篇文章主要介紹了RocketMQ的四種常用消息隊(duì)列及代碼演示,普通消息隊(duì)列是最基本的一種消息隊(duì)列,可以按照先進(jìn)先出(FIFO)的順序存儲(chǔ)消息,并且可以被多個(gè)消費(fèi)者同時(shí)消費(fèi),可以通過在生產(chǎn)者端指定主題名稱和標(biāo)簽來創(chuàng)建普通消息隊(duì)列,需要的朋友可以參考下
    2024-01-01
  • Java 5個(gè)人坐在一起(有關(guān)第五個(gè)人歲數(shù)的問題)

    Java 5個(gè)人坐在一起(有關(guān)第五個(gè)人歲數(shù)的問題)

    利用遞歸的方法,遞歸分為回推和遞推兩個(gè)階段。要想知道第五個(gè)人歲數(shù),需知道第四人的歲數(shù),依次類推,推到第一人(10歲),再往回推,需要的朋友可以參考下
    2017-02-02

最新評(píng)論