java基于有序链表的优先级队列实现
来源:互联网 发布:mac充电黄灯一直亮 编辑:程序博客网 时间:2024/05/02 05:46
1.准备
Link.class
类中包含数据项(为了简单,这里的数据项就为int
值)和下一个Link
节点的引用
/**链表中的节点类,保存数据和节点信息*/public class Link{ int priority;//优先级值 Link next;}
2.实现有序链表
OrderLinkList.class
类用来处理节点之间的关系
public class OrderLinkList{ private Link first;//新的头节点 private Link current;//保存中间节点信息,保证节点在移动过程中不丢失上一个节点信息 private Link previous;//旧的头节点 private boolean flag = false; private int size = 0;//链表的长度 /*数据插入方法*/ public void insert(Object data) { /*把数据插入到链表的第一个节点*/ Link link = new Link(); link.priority = (Integer) data; link.next = first; first = link; current = first; previous = first.next; /*得到数据插入的位置,flag用来控制是否要对节点移动*/ while (current.next != null && link.priority >= current.next.priority) { flag = true; if(current.next == null){break;} current = current.next; } /*移动节点到目标位置*/ if(flag) { link.next = current.next; current.next = link; first = previous; flag = false; } size++; } public int get(int index) { /*没有对index进行检查,有可能发生空指针错误*/ current = first; for (int i = 0; i < index; i++) { current= current.next; } return current.priority; }}
图片画得有点丑,将就着看
3.有序链表测试
public class LinkMain { public static void main(String[] args) { OrderLinkList list = new OrderLinkList(); list.insert(19000); list.insert(8); list.insert(800); list.insert(25); list.insert(800); list.insert(3); list.insert(820); list.insert(6); for (int i = 0; i < 8; i++) { System.out.print(list.get(i)+" "); } }}
运行结果:
3 6 8 25 800 800 820 19000
Process finished with exit code 0
3.优先级队列实现
PriorityQueue.class
基于OrderLinkList.class
实现
public class PriorityQueue { private int size = 0;//队列当前长度 private int length = 5;//指定队列的长度 private OrderLinkList list = new OrderLinkList(); public boolean add(int data) { if (size <= length) { list.insert(data); size++; return true; } else return false; } //移除队头数据 public Integer remove() { if (size > 0) { Integer result = new Integer(list.get(0)); list.removeFirst(); size--; return result; } else return null; }}
4.优先级队列测试
public class LinkMain { public static void main(String[] args) { //优先级队列的长度为5 PriorityQueue list = new PriorityQueue(5); //数据add()测试 System.out.println(list.add(19000)); list.add(8); list.add(800); list.add(25); list.add(800); list.add(820); System.out.println(list.add(33)); //数据remove()测试 for (int i = 0; i < 8; i++) { System.out.print(list.remove()+" "); } }}
运行结果:
true
false
8 25 800 800 820 19000 null null
Process finished with exit code 0
以上就是java简单实现基于有序链表的优先级队列,才开始学习这方面的知识,才识浅薄,写的代码也不规范,望各位指正!
0 0
- java基于有序链表的优先级队列实现
- 基于有序链表的优先级队例
- 基于邻接表和优先级队列的Dijkstra算法实现
- 基于大顶堆实现的最大优先级队列
- (第7讲)利用双向链表实现双端队列、优先级队列(有序数组实现、有序链表实现)
- Java优先级队列实现
- java实现优先级队列
- java中关于优先级队列的实现
- 优先级队列的实现
- 优先级队列的实现
- 基于堆的优先级队列
- 基于数组的优先级队列
- 一个简单的基于数组优先级队列的Java代码
- 循环队列与优先级队列的Java实现
- 有序链表实现优先队列
- Java优先级队列简单实现
- 如何基于RabbitMQ实现优先级队列
- 如何基于RabbitMQ实现优先级队列
- 百度地图内网开发项目
- 201312_MySQL命令集合
- Centos 7 下安装 jdk rpm包
- pm命令介绍与包名信息查询--待完善
- [心得]面试经验谈
- java基于有序链表的优先级队列实现
- linux多核处理下提高编译速度 make -j
- Java中多线程的实现方式
- 正弦波形函数
- WebService流行框架之Axis和CXF
- 一程序员在阿里HBase团队的所感所悟
- java + mysql + jdbc实现图片上传
- 【消息队列技术】nsq
- 操作系统中生产者/消费者问题(一)