1.循环队列的封装

  1. package com.pinjia.shop.common.collection;
  2.  
  3. /**
  4. * Created by wangwei on 2016/12/29.
  5. * 循环队列的自我封装
  6. */
  7. public class Myqueue<E> {
  8. E[] a;//数组对象
  9. private static final int DEFAULT_SIZE = 10;//默认队列初始化大小
  10. int front;
  11. int rear;
  12. public Myqueue(){
  13. this(DEFAULT_SIZE);
  14. }
  15.  
  16. public Myqueue(int size){
  17. a = (E[])new Object[size];
  18. front = 0;
  19. rear = 0;
  20. }
  21.  
  22. public boolean inQueue(E obj){
  23. if((rear+1)%a.length==front){ //队满
  24. return false;
  25. }else{
  26. a[rear] = obj;
  27. rear = (rear+1)%a.length;
  28. return true;
  29. }
  30. }
  31.  
  32. public E outQueue(){
  33. if(front == rear){
  34. return null;
  35. }else{
  36. E obj = a[front];
  37. front = (front+1)%a.length;
  38. return obj;
  39. }
  40. }
  41.  
  42. public int length(){
  43. if(rear>front)
  44. return rear-front+1;
  45. else
  46. return a.length;
  47. }
  48.  
  49. public boolean isEmpty(){
  50. return rear == front;
  51. }
  52.  
  53. public String toString(){
  54. StringBuilder sb = new StringBuilder();
  55. for(int i=0;i<a.length;i++){
  56. sb.append(outQueue()+""+",");
  57. }
  58. return sb.toString().substring(0,sb.toString().lastIndexOf(","));
  59. }
  60.  
  61. public static void main(String[] args) {
  62. Myqueue<Integer> myqueue = new Myqueue<Integer>(12);
  63. System.out.println(myqueue.length());
  64. myqueue.inQueue(1);
  65. myqueue.inQueue(2);
  66. myqueue.inQueue(3);
  67. myqueue.inQueue(4);
  68. System.out.println(myqueue.toString());
  69. }
  70.  
  71. }

2.链式队列的封装

  1. package com.pinjia.shop.common.collection;
  2.  
  3. import java.util.LinkedList;
  4.  
  5. /**
  6. * Created by wangwei on 2016/12/29.
  7. */
  8. public class LinkedQueue<T> {
  9. //定义链式数据结构
  10. private class Node{
  11. private Node next;
  12. private T data;
  13. public Node(){}
  14. public Node(T data,Node next){
  15. this.next = next;
  16. this.data = data;
  17. }
  18. }
  19.  
  20. private Node front;
  21. private Node rear;
  22. private int size = 0;
  23.  
  24. public LinkedQueue(){
  25. Node s = new Node(null,null);
  26. s.next = null;
  27. front = rear = s;
  28. }
  29.  
  30. //入队
  31. public void inQueue(T data){
  32. Node node = new Node(data,null);
  33. rear.next = node;
  34. rear = node;
  35. size++;
  36. }
  37.  
  38. //出队
  39. public T outQueue(){
  40. if(front == rear) //空队列
  41. return null;
  42. else{
  43. Node p = front.next;
  44. T x = p.data;
  45. front.next = front.next.next;
  46. if(p.next==null)rear = front;
  47. p = null;
  48. size--;
  49. return x;
  50. }
  51. }
  52.  
  53. /**
  54. * 队列长队
  55. * @return
  56. * @author WWX
  57. */
  58. public int size(){
  59. return size;
  60. }
  61.  
  62. /**
  63. * 判断队列是否为空
  64. * @return
  65. * @author WWX
  66. */
  67. public boolean isEmpty(){
  68. return size==0;
  69.  
  70. }
  71.  
  72. public String toString() {
  73. if(isEmpty()){
  74. return "[]";
  75. }else{
  76. StringBuilder sb = new StringBuilder("[");
  77. for(Node current=front.next;current!=null;current=current.next){
  78. sb.append(current.data.toString() + ", ");
  79. }
  80. int len = sb.length();
  81. return sb.delete(len - 2, len).append("]").toString();
  82. }
  83. }
  84. public static void main(String[] args) {
  85. LinkedQueue<Integer> queue=new LinkedQueue<Integer>();
  86. queue.inQueue(1);
  87. queue.inQueue(2);
  88. queue.inQueue(3);
  89. queue.inQueue(4);
  90. queue.inQueue(5);
  91. queue.inQueue(6);
  92. System.out.println(queue);
  93. System.out.println("出队:"+queue.outQueue());
  94. System.out.println("队列长度="+queue.size());
  95. System.out.println(queue);
  96. System.out.println("出队:"+queue.outQueue());
  97. System.out.println("队列长度="+queue.size());
  98. System.out.println(queue);
  99. System.out.println("出队:"+queue.outQueue());
  100. System.out.println("队列长度="+queue.size());
  101. System.out.println(queue);
  102. }
  103. }

  

  

Java关于队列的自我实现的更多相关文章

  1. atitit. java queue 队列体系and自定义基于数据库的队列总结o7t

    atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...

  2. lesson2:java阻塞队列的demo及源码分析

    本文向大家展示了java阻塞队列的使用场景.源码分析及特定场景下的使用方式.java的阻塞队列是jdk1.5之后在并发包中提供的一组队列,主要的使用场景是在需要使用生产者消费者模式时,用户不必再通过多 ...

  3. Java消息队列-Spring整合ActiveMq

    1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Jav ...

  4. java 数据结构 队列的实现

    java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java ...

  5. MinerQueue.java 访问队列

    MinerQueue.java 访问队列 package com.iteye.injavawetrust.miner; import java.util.HashSet; import java.ut ...

  6. Java操作队列

    Java操作队列 常见的几种模式:   1 简单队列simple 模型:(p + 队列 + c) P:生产者producer,将消息发送到队列 红色:消息队列 C:消费者consumer,从队列消费消 ...

  7. 数据结构与算法Java描述 队列

    package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...

  8. 细说并发5:Java 阻塞队列源码分析(下)

    上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...

  9. Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例

    Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. Java.util.concurr ...

随机推荐

  1. Mybatis的ResultMap的使用

    本篇文章通过一个实际工作中遇到的例子开始吧: 工程使用Spring+Mybatis+Mysql开发.具体的业务逻辑很重,对象之间一层一层的嵌套.和数据库表对应的是大量的model类,而和前端交互的是V ...

  2. display & visibility区别

    http://www.cnblogs.com/zhangran/archive/2012/08/29/2662459.html 说明:在学习css的过程中由于其中包含太多的元素.属性等等,总有许多是自 ...

  3. WPF 检测输入状态

    [DllImport("user32.dll")] static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); pub ...

  4. JAVA HTTP请求 常用的代理设置

    由于公司上网实行代理机制, 而最近一段时间又在研究Web上的OpenApi. 没办法一定要使用代理,我之前有文章介绍了httpclient的代理使用方式, 这里介绍基本java的代理使用方式. 最常使 ...

  5. prototype.js $F()函数介绍

    $F()是一个能够简化编码量的函数, 对于字段输入控件有效,包括input.textarea.select等,该函数的输入参数为这些输入控件元素对象的id或元素对象本身,函数负责返回 这些输入控件元素 ...

  6. Pb (数据存储单位)

    PB (数据存储单位) 编辑 pb指petabyte,它是较高级的存储单位,其上还有EB,ZB,YB等单位. 它等于1,125,899,906,842,624(2的50次方)字节,“大约”是一千个te ...

  7. emmet-vim

    最近啊,我投奔了网页的开发,看了一本<head first HTML and CSS>的书,感觉非常不错,然后又配置了一些vim里面用到的插件,现在我把学习到的东西记录下来! 首先,我不会 ...

  8. linux在所有文件中查找某一个字符

    # find <directory> -type f -name "*.c" | xargs grep "<strings>" < ...

  9. hoj3152-Dice 等比数列求和取模

    http://acm.hit.edu.cn/hoj/problem/view?id=3152 Dice My Tags (Edit) Source : Time limit : sec Memory ...

  10. PHP 基础语法实例及注意事项

    <?$varint = 1;$varinteger = "test";$varstring = "tes";$varbool = true;$varflo ...