`
阿尔萨斯
  • 浏览: 4192086 次
社区版块
存档分类
最新评论

用数组模拟 优先级队列

 
阅读更多
package datastruct;

import java.util.Arrays;
import java.util.Comparator;

/**
 * 用数组模拟 优先级队列  优先级高的排前、先出 线性表结构
 * 类似使用了比较器的 TreeSet、TreeMap
 * @author stone
 * 2014-07-30 09:29:12
 */
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



分享到:
评论

相关推荐

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

    主要介绍了Java数组模拟优先级队列数据结构的实例,优先级队列中的元素会被设置优先权,本文的例子借助了Java中的TreeSet和TreeMap,需要的朋友可以参考下

    Python 超详细算法与数据结构视频教程

    课程的目录结构如下,每一章都有配套的文字讲义(markdown),示例代码,...优先级队列 二叉查找树 图与图的遍历 python 内置常用数据结构和算法的使用。list, dict, set, collections 模块,heapq 模块 面试笔试常考算法

    《数据结构与算法分析》.txt

    典型算法 典型算法部分主要介绍了若干典型算法的实现,并给出必要的复杂性分析和比较过程,具体包括递归、排序、查找和内存管理等 复杂数据结构 复杂数据结构部分主要包括优先级队列、不相交集合类和文件结构等 算法...

    进程调度设计与实现

    8、 初始化时,创建一个邻接表,包含50个就绪队列,各就绪队列的进程优先级priority分别是0到49。 9、 为了模拟用户动态提交任务的过程,要求动态创建进程。进入进程调度循环后,每次按ctrl+f即动态创建一个进程,...

    进程调度的设计与分析实验报告

    初始化时,创建一个邻接表,包含50个就绪队列,各就绪队列的进程优先级priority分别是0到49。 9、 为了模拟用户动态提交任务的过程,要求动态创建进程。进入进程调度循环后,每次按ctrl+f即动态创建一个进程,然后将...

    进程调度的设计与实现

    8、 初始化时,创建一个邻接表,包含50个就绪队列,各就绪队列的进程优先级priority分别是0到49。 9、 为了模拟用户动态提交任务的过程,要求动态创建进程。进入进程调度循环后,每次按ctrl+f即动态创建一个进程,...

    OS 操作系统 进程 线程 文件 设备 C# 多用户 登陆 课程设计 报告 算法 FCFS

    用数组模拟其他内存区域,大小为512字节。 主存分配策略 当有程序要存放入主存时,查看空闲块总数是否够用,如果够用,先分配一块用来存放页表,然后查 位示图中为“0”的位,根据查到的位所在的字号和位号可计算...

    数据结构与算法

    用循环数组实现队列 ……… 应用 …………………………… 本章小结 ……………………………… 习题 …………………………………… 第 章 递归…………………………… 递归的概念 …………………… 递归程序设计……...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main 函数的参数 166...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    10.4.2 使用字符串指针变量与字符数组的区别 158 10.5 函数指针变量 159 10.6 指针型函数 160 10.7 指针数组和指向指针的指针 161 10.7.1 指针数组的概念 161 10.7.2 指向指针的指针 164 10.7.3 main 函数的参数 166...

    JAVA 范例大全 光盘 资源

    实例19 数组实现顺序栈与队列 46 实例20 Arrays数组的应用 50 第5章 面向对象设计 54 实例21 图形面积与周长(抽象类) 54 实例22 宠物结婚(封装) 56 实例23 一个盒子(继承) 58 实例24 学生的生活(多态)...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例141 使用阻塞队列实现线程同步 183 实例142 新建有返回值的线程 184 实例143 使用线程池优化多线程编程 186 实例144 Object类中线程相关的方法 187 实例145 哲学家就餐问题 189 实例146 使用信号量实现线程同步 ...

    Java范例开发大全 (源程序)

     实例55 一维数组的创建与使用 78  实例56 按相反的顺序输出 79  实例57 奇偶分组 80  实例58 找宝 81  实例59 寻找最小数 82  实例60 我的位置在哪里 83  实例61 复制数组 85  实例62 插入新元素 86...

    java范例开发大全(pdf&源码)

    实例55 一维数组的创建与使用 78 实例56 按相反的顺序输出 79 实例57 奇偶分组 80 实例58 找宝 81 实例59 寻找最小数 82 实例60 我的位置在哪里 83 实例61 复制数组 85 实例62 插入新元素 86 实例63 数组的合并 87 ...

    java范例开发大全源代码

     实例55 一维数组的创建与使用 78  实例56 按相反的顺序输出 79  实例57 奇偶分组 80  实例58 找宝 81  实例59 寻找最小数 82  实例60 我的位置在哪里 83  实例61 复制数组 85  实例62 插入...

Global site tag (gtag.js) - Google Analytics