Java关于队列的自我实现
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关于队列的自我实现的更多相关文章
- atitit. java queue 队列体系and自定义基于数据库的队列总结o7t
atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...
- lesson2:java阻塞队列的demo及源码分析
本文向大家展示了java阻塞队列的使用场景.源码分析及特定场景下的使用方式.java的阻塞队列是jdk1.5之后在并发包中提供的一组队列,主要的使用场景是在需要使用生产者消费者模式时,用户不必再通过多 ...
- Java消息队列-Spring整合ActiveMq
1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Jav ...
- java 数据结构 队列的实现
java 数据结构队列的代码实现,可以简单的进行入队列和出队列的操作 /** * java数据结构之队列的实现 * 2016/4/27 **/ package cn.Link; import java ...
- MinerQueue.java 访问队列
MinerQueue.java 访问队列 package com.iteye.injavawetrust.miner; import java.util.HashSet; import java.ut ...
- Java操作队列
Java操作队列 常见的几种模式: 1 简单队列simple 模型:(p + 队列 + c) P:生产者producer,将消息发送到队列 红色:消息队列 C:消费者consumer,从队列消费消 ...
- 数据结构与算法Java描述 队列
package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...
- 细说并发5:Java 阻塞队列源码分析(下)
上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...
- Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例
Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. Java.util.concurr ...
随机推荐
- Spring学习8-用MyEclipse搭建SSH框架 Struts Spring Hibernate
1.new一个web project. 2.右键项目,为项目添加Struts支持. 点击Finish.src目录下多了struts.xml配置文件. 3.使用MyEclipse DataBase Ex ...
- Logistic Regression and Gradient Descent
Logistic Regression and Gradient Descent Logistic regression is an excellent tool to know for classi ...
- (翻译)初学者的object-C指南
初学者的object-C指南 英文原文:http://blog.teamtreehouse.com/the-beginners-guide-to-objective-c-language-and-va ...
- SQL防注入程序 v1.0
/// ***************C#版SQL防注入程序 v1.0************ /// *使用方法: /// 一.整站防注入(推荐) /// 在Global.asax.cs中查找App ...
- PHP大批量插入数据库的3种方法和速度对比
第一种,使用insert into 插入,最后显示为:23:25:05 01:32:05 也就是花了2个小时多! $params = array(‘value'=>'50′); set_time ...
- Python代码性能优化技巧
摘要:代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Python代码,看完一定会让你 ...
- linux 优化&安全运维&黑客攻防
优化: 可删除用户:adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher. :userdel games 可删除组:adm,lp,ne ...
- linux find 命令详解
Linux下 利用find命令删除所有vssver2.scc文件 删除所有vssver2.scc文件 这是我当初查找 Linux find 命令的目的所在 1) find / -name ‘vssv ...
- liunx几台机器直接用ssh链接
1,查看ip sudo ifconfig 2,查看是否安装了ssh server服务 ps -ef |grep ssh 或者ps -aux |grep ssh 看一下里面有没有sshd.如果没有表示 ...
- centOS6.4 extundelete工具恢复rm -rf 删除的目录
PS:补充下,我在fedora 19上运行的时候遇到的一个问题: [root@localhost extundelete-]# ./configure Configuring extundelete ...