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 ...
随机推荐
- P1067Warcraft III 守望者的烦恼(十大矩阵问题之七求递推式)
https://vijos.org/p/1067 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她 ...
- CodeForces 701A Cards
直接看示例输入输出+提示 1. 统计所有数的和 sum,然后求 sum/(n/2) 的到一半数的平均值 6 1 5 7 4 4 3 ->1+5+7+4+4+3=24 分成3组 每组值为8 in ...
- 有关基于模型的设计(MBD)一些概念和理解(zz)
http://www.matlabsky.com/thread-38774-1-1.html 本文转载于MathWorks中国高级工程师董淑成的帖子内容.为了方便阅读,对原文进行了重新整理编辑. 之前 ...
- 锋利的jQuery-3--.css()获取和设置元素的数字属性
$('p').css({"fontSize": "30px", "backgroundColor": "#666"}); ...
- DEDECMS 5.7之前版本远程SQL注入漏洞
2012/4/29 凌晨 知道创宇安全研究团队截获到最新DEDECMS SQL注入 0day,官网目前提供下载的最新版5.7也受影响,截止本告警发出时官方尚未给出补丁或解决方案,此漏洞利用简单且ded ...
- C语言绘制余弦函数图象
#include"stdio.h" #include"math.h" void main() { double y; int x,m; for(y=1;y> ...
- mySQL 增量备份方案(转)
1.在 /etc/my.cnf 下面设置开启bin-log 编辑 vim /etc/my.cnf [mysqld] binlog_format = MIXED ...
- lnmp一键安装包删除添加的域名
lnmp一键安装包删除添加的域名 如果使用lnmp一键安装包/root/vhost.sh 添加的域名可以,可以删除/usr/local/nginx/conf/vhost/要删除的域名.conf 文件, ...
- C开发基础--函数调用栈
发现有一些问题几乎是所有的新人都会遇到,而且也常因为缺乏一些基本的知识而无从下手.函数调用栈的内容就是其中之一.于是花点时间把以前写的内容整理出来. 程序在运行期间,内存中有一块区域,用来实现程序的函 ...
- excel插入当前时间快捷键Ctrl+;
之前写了一篇editplus如何插入当前时间_Ctrl+D的文章,有的同学说excel用习惯了,那在这我们就说一下excel插入当前时间快捷键,让您在excel快速插入当前时间 excel插入当前时间 ...