栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java数组模拟优先级队列数据结构的实例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java数组模拟优先级队列数据结构的实例

优先级队列
如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。这样,我们就引入了优先级队列 这种数据结构。 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 。对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。

Java数组模拟队列
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。这也就是我们平常经常用说到的先进先出原则(FIFO)。Java 中的 List 就可以作为队列来使用,在队列尾部添加元素则使用 list.add 方法,从队列头部删除元素则使用 list.remove 方法。

Java数组模拟优先级队列结构实例:

package datastruct; 
 
import java.util.Arrays; 
import java.util.Comparator; 
 
 
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;    //数组 
  private int mNextItem;     //下一个位置,也可当作 当前的元素数 
   
  public SimulatePriorityQueue() { 
    mArray = new int[mSize]; 
    mNextItem = 0; 
  } 
  public SimulatePriorityQueue(int size) { 
    this.mSize = size; 
    mArray = new int[mSize]; 
    mNextItem = 0; 
  } 
   
  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("----不能插入元素了,队列已满----"); 
    } 
  } 
   
  public int remove() { 
    if (!isEmpty()) { 
      return mArray[--mNextItem]; 
    } else { 
      throw new IllegalArgumentException("没有元素可以取出了"); 
    } 
  } 
   
  public int peek() { 
    return mArray[mNextItem - 1]; 
  } 
   
  public boolean isEmpty() { 
    return mNextItem == 0; 
  } 
   
  public boolean isFull() { 
    return mNextItem == mSize; 
  } 
   
  public int size() { 
    return mNextItem; 
  } 
   
} 

输出结果:

[1, 0, 0, 0]
[1, 3, 0, 0]
[1, 2, 3, 0]
[1, 2, 3, 0]
[1, 2, 3, 5]
----不能插入元素了,队列已满----
size:4
peek:5
取出元素:5
取出元素:3
取出元素:2
取出元素:1
size:0

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/150304.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号