【数据结构初学】(java实现篇)——队列(转)
原文地址:http://www.cnblogs.com/skywang12345/p/3603935.html
原文地址:http://www.cnblogs.com/skywang12345/p/3603935.html
原文地址:http://www.cnblogs.com/skywang12345/p/3603935.html
(自己是个javav初学者 借助一下大牛的文章 记录下每天的学习情况!大家多去这个大牛博客里面看看,里面很多干货 绝对福利!)
JDK包Queue中的也提供了"队列"的实现。JDK中的Queue接口就是"队列",它的实现类也都是队列,用的最多的是LinkedList。本部分介绍给出2种Java实现
1. Java实现一:数组实现的队列,能存储任意类型的数据。
2. Java实现二:Java的 Collection集合 中自带的"队列"(LinkedList)的示例。
1. Java实现一:数组实现的队列,能存储任意类型的数据
实现代码(ArrayQueue.java)
/**
* Java : 数组实现“队列”,只能存储int数据。
*
* @author skywang
* @date 2013/11/07
*/
public class ArrayQueue { private int[] mArray;
private int mCount; public ArrayQueue(int sz) {
mArray = new int[sz];
mCount = 0;
} // 将val添加到队列的末尾
public void add(int val) {
mArray[mCount++] = val;
} // 返回“队列开头元素”
public int front() {
return mArray[0];
} // 返回“栈顶元素值”,并删除“栈顶元素”
public int pop() {
int ret = mArray[0];
mCount--;
for (int i=1; i<=mCount; i++)
mArray[i-1] = mArray[i];
return ret;
} // 返回“栈”的大小
public int size() {
return mCount;
} // 返回“栈”是否为空
public boolean isEmpty() {
return size()==0;
} public static void main(String[] args) {
int tmp=0;
ArrayQueue astack = new ArrayQueue(12); // 将10, 20, 30 依次推入栈中
astack.add(10);
astack.add(20);
astack.add(30); // 将“栈顶元素”赋值给tmp,并删除“栈顶元素”
tmp = astack.pop();
System.out.printf("tmp=%d\n", tmp); // 只将“栈顶”赋值给tmp,不删除该元素.
tmp = astack.front();
System.out.printf("tmp=%d\n", tmp); astack.add(40); System.out.printf("isEmpty()=%b\n", astack.isEmpty());
System.out.printf("size()=%d\n", astack.size());
while (!astack.isEmpty()) {
System.out.printf("size()=%d\n", astack.pop());
}
}
}
运行结果:
tmp=10
tmp=20
isEmpty()=false
size()=3
size()=20
size()=30
size()=40
结果说明:ArrayQueue是通过数组实现的队列,而且ArrayQueue中使用到了泛型,因此它支持任意类型的数据。
2. Java实现二:Java的 Collection集合 中自带的"队列"(LinkedList)的示例
实现代码(QueueTest.java)
import java.util.Stack; /**
* 用“栈”实现队列
*
* @author skywang
*/
public class StackList<T> { // 向队列添加数据时:(01) 将“已有的全部数据”都移到mIn中。 (02) 将“新添加的数据”添加到mIn中。
private Stack<T> mIn = null;
// 从队列获取元素时:(01) 将“已有的全部数据”都移到mOut中。(02) 返回并删除mOut栈顶元素。
private Stack<T> mOut = null;
// 统计计数
private int mCount = 0; public StackList() {
mIn = new Stack<T>();
mOut = new Stack<T>();
mCount = 0;
} private void add(T t) {
// 将“已有的全部数据”都移到mIn中
while (!mOut.empty())
mIn.push(mOut.pop()); // 将“新添加的数据”添加到mIn中
mIn.push(t);
// 统计数+1
mCount++;
} private T get() {
// 将“已有的全部数据”都移到mOut中
while (!mIn.empty())
mOut.push(mIn.pop());
// 统计数-1
mCount--; // 返回并删除mOut栈顶元素
return mOut.pop();
} private int size() {
return mCount;
}
private boolean isEmpty() {
return mCount==0;
} public static void main(String[] args) {
StackList slist = new StackList(); // 将10, 20, 30 依次推入栈中
slist.add(10);
slist.add(20);
slist.add(30); System.out.printf("isEmpty()=%b\n", slist.isEmpty());
System.out.printf("size()=%d\n", slist.size());
while(!slist.isEmpty()) {
System.out.printf("%d\n", slist.get());
}
}
}
运行结果:
tmp=10
tmp=20
isEmpty()=false
size()=3
tmp=20
tmp=30
tmp=40
【数据结构初学】(java实现篇)——队列(转)的更多相关文章
- java与数据结构(8)---java实现链队列
		
链队列 实际上就是单链表,只是规定了删除在队头进行,添加在队尾进行. 链队列代码结构 package list.queue; public interface Queuable<T>; p ...
 - Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)
		
江南好,何处异京华. 香散翠帘多在水,绿残红叶胜于花.无事避风沙. --<纳兰词> 诗词再好,大图不能忘 上大图: 先说说栈和队列: 栈就好比手枪的弹匣,你往里面压入子弹,最先压入的子弹就 ...
 - 自己动手实现java数据结构(八) 优先级队列
		
1.优先级队列介绍 1.1 优先级队列 有时在调度任务时,我们会想要先处理优先级更高的任务.例如,对于同一个柜台,在决定队列中下一个服务的用户时,总是倾向于优先服务VIP用户,而让普通用户等待,即使普 ...
 - java提高篇(二二)-----LinkedList
		
摘自http://blog.csdn.net/chenssy/article/details/18099417 java提高篇(二二)-----LinkedList 一.概述 LinkedList与 ...
 - Java提高篇(三三)-----Map总结
		
在前面LZ详细介绍了HashMap.HashTable.TreeMap的实现方法,从数据结构.实现原理.源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结. ...
 - Java提高篇(三二)-----List总结
		
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...
 - Java提高篇(三一)-----Stack
		
在Java中Stack类表示后进先出(LIFO)的对象堆栈.栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的.每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下: Stack通过 ...
 - java提高篇(三十)-----Iterator
		
迭代对于我们搞Java的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. Iterator iterator = list.iterator(); while(iterator ...
 - java提高篇(二九)-----Vector
		
在java提高篇(二一)-–ArrayList.java提高篇(二二)-LinkedList,详细讲解了ArrayList.linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现 ...
 
随机推荐
- [转]Eclipse SVN冲突解决
			
原文地址:http://www.devnote.cn/article/82.html 基本原则是:每次提交前需要先和线上的对比,先把冲突解决掉,然后把线上的更新到本地,最后把本地的提交上去. 右键项目 ...
 - evil program
			
写的一个恶作剧程序,运行后直接重装系统吧,学习交流使用,后果自负. #include <windows.h> #pragma comment( linker, "/subsyst ...
 - BZOJ 2179: FFT快速傅立叶
			
2179: FFT快速傅立叶 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2923 Solved: 1498[Submit][Status][Di ...
 - 向shell脚本中传入参数
			
写一个 程序名为 test.sh 可带参数为 start 和 stop 执行 test.sh start执行 start 内容的代码 执行 test.sh stop 执行 stop 内 ...
 - <<< 如何查看自己是外网还是内网
			
判断的方法很简单,就是看你的网络中有没有路由器,不管是有线路由还是无线路由,只要你的网络中用了路由,那你就是内网,用路由器的网络有一个特点,那就是只要路由器在开着,那你开了电脑之后就可以直接上网,不需 ...
 - zabbix监控单核cpu使用率和多核cpu总负载
			
zabbix自带的基础监控的模板中只有对单核cpu负载1分钟.5分钟.15分钟的监控. 添加对总的cpu负载的监控 key:system.cpu.load[all,avg1] 1分钟cpu总的负载 添 ...
 - AE开发实现Spatial Join Analysis
			
总体网上资料不多,包括esri帮助文档都写的很简单,没有各个string参数如match_option之类的可以输入的string限制,导致在摸索中gp.Execute时报错n回. 结合网上搜集资料及 ...
 - 英文写作——冠词的使用(Use 0f Articles)
			
1.使用'a','an','the'和不使用冠词的基本规则: <1>泛指,不可数名词不能有任何冠词 <2>泛指,可数,复数名词前不能有冠词 <3>泛指,可数,单数名 ...
 - 初识Docker和Windows Server容器
			
概览 伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器.它集成了Docker对Windows S ...
 - CentOS 7 上安装 redis3.2.3安装与配置
			
前一段时间写过一篇codis集群的文章,写那篇文章主要是因为当时的项目不支持redis自身集群的功能. 而现在最新的项目是需要redis集群的,这篇文章我们就来介绍下有关redis的安装与配置. 一. ...