java多维数组行优先_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;

/**

* 用数组模拟 优先级队列 优先级高的排前、先出 线性表结构

* 类似使用了比较器的 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; //数组

private int mNextItem; //下一个位置,也可当作 当前的元素数

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("----不能插入元素了,队列已满----");

}

}

/**

* 移出元素 先进先出

* @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;

}

}

输出结果:

[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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值