1.循环队列的封装

package com.pinjia.shop.common.collection;

/**
* Created by wangwei on 2016/12/29.
* 循环队列的自我封装
*/
public class Myqueue<E> {
E[] a;//数组对象
private static final int DEFAULT_SIZE = 10;//默认队列初始化大小
int front;
int rear;
public Myqueue(){
this(DEFAULT_SIZE);
} public Myqueue(int size){
a = (E[])new Object[size];
front = 0;
rear = 0;
} public boolean inQueue(E obj){
if((rear+1)%a.length==front){ //队满
return false;
}else{
a[rear] = obj;
rear = (rear+1)%a.length;
return true;
}
} public E outQueue(){
if(front == rear){
return null;
}else{
E obj = a[front];
front = (front+1)%a.length;
return obj;
}
} public int length(){
if(rear>front)
return rear-front+1;
else
return a.length;
} public boolean isEmpty(){
return rear == front;
} public String toString(){
StringBuilder sb = new StringBuilder();
for(int i=0;i<a.length;i++){
sb.append(outQueue()+""+",");
}
return sb.toString().substring(0,sb.toString().lastIndexOf(","));
} public static void main(String[] args) {
Myqueue<Integer> myqueue = new Myqueue<Integer>(12);
System.out.println(myqueue.length());
myqueue.inQueue(1);
myqueue.inQueue(2);
myqueue.inQueue(3);
myqueue.inQueue(4);
System.out.println(myqueue.toString());
} }

2.链式队列的封装

package com.pinjia.shop.common.collection;

import java.util.LinkedList;

/**
* Created by wangwei on 2016/12/29.
*/
public class LinkedQueue<T> {
//定义链式数据结构
private class Node{
private Node next;
private T data;
public Node(){}
public Node(T data,Node next){
this.next = next;
this.data = data;
}
} private Node front;
private Node rear;
private int size = 0; public LinkedQueue(){
Node s = new Node(null,null);
s.next = null;
front = rear = s;
} //入队
public void inQueue(T data){
Node node = new Node(data,null);
rear.next = node;
rear = node;
size++;
} //出队
public T outQueue(){
if(front == rear) //空队列
return null;
else{
Node p = front.next;
T x = p.data;
front.next = front.next.next;
if(p.next==null)rear = front;
p = null;
size--;
return x;
}
} /**
* 队列长队
* @return
* @author WWX
*/
public int size(){
return size;
} /**
* 判断队列是否为空
* @return
* @author WWX
*/
public boolean isEmpty(){
return size==0; } public String toString() {
if(isEmpty()){
return "[]";
}else{
StringBuilder sb = new StringBuilder("[");
for(Node current=front.next;current!=null;current=current.next){
sb.append(current.data.toString() + ", ");
}
int len = sb.length();
return sb.delete(len - 2, len).append("]").toString();
}
}
public static void main(String[] args) {
LinkedQueue<Integer> queue=new LinkedQueue<Integer>();
queue.inQueue(1);
queue.inQueue(2);
queue.inQueue(3);
queue.inQueue(4);
queue.inQueue(5);
queue.inQueue(6);
System.out.println(queue);
System.out.println("出队:"+queue.outQueue());
System.out.println("队列长度="+queue.size());
System.out.println(queue);
System.out.println("出队:"+queue.outQueue());
System.out.println("队列长度="+queue.size());
System.out.println(queue);
System.out.println("出队:"+queue.outQueue());
System.out.println("队列长度="+queue.size());
System.out.println(queue);
}
}

  

  

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. C#获得系统打开的端口和状态

    实际是通过c#编程方式调用了CMD命令行,然后调用netstat命令,然后将CMD命令的输出流转到了C#控制台程序上.也可以将结果输出到文件. using System; using System.C ...

  2. POJ1976A Mini Locomotive(01背包装+连续线段长度)

    A Mini Locomotive Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 2485   Accepted: 1388 ...

  3. Emgu学习之(一)——Emgu介绍

    OpenCV“OpenCV是一个开源的计算机视觉库.OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上.OpenCV还提供了Python.Ruby.MATLA ...

  4. Unity教程之再谈Unity中的优化技术

    这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体   这一步主要是为了针对性能瓶颈中的”顶点 ...

  5. php 单态设计模式

    单态设计模式通常包含以下三点: · 一个私有的 构造方法:(确保用户无法通过创建对象对其进行实例化) · 一个公有的 静态的 方法:(负责对其本身进行实例化) · 一个私有的 静态的 属性:(用于保存 ...

  6. nginx 服务器重启命令,关闭 (转)

    nginx -s reload  :修改配置后重新加载生效nginx -s reopen  :重新打开日志文件nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否 ...

  7. Linux命令 ,在当前目录下查找一个,或者多个文件

    1,find ./ -name "y*" 查找以y开头的文件. 2,列出gearman进程 ps -aux | grep gearman 3,查看一个文件下,所有文件夹的大小 du ...

  8. 用windbg+sos找出程序中谁占用内存过高,谁占用CPU过高(转载)

    原文地址: http://www.cnblogs.com/Lawson/archive/2011/01/23/1942692.html 很早看到windbg+sos方面的知识,一直没仔细学习,也许因为 ...

  9. 解决SQL SERVER LDF文件过大的问题

      我的SQL server数据库仅用作分析用, 不需要考虑数据备份和恢复的问题. 每天都会增长大量的数据, 现在碰到的问题是, ldf 文件增长的非常厉害, 需要压一压.    参考文章:  htt ...

  10. endnote参考文献格式设置

    endnote参考文献格式调整: 在office word 2010中加载了endnote x7插件之后,使用过程中发现格式有点乱,不该斜的地方斜体显示,该加方框[]的地方却没有方框,因此从网路上找资 ...