队列Queue和栈
1、队列Queue是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式,只能从线性表的一段添加(offer)元素,
从另一段取出(poll)元素,队列遵循先进先出的原则。
2、JDK中提供了Queue接口,同时使得LinkList实现了该接口,选择LinkList实现Queue的原因是Queue经常要进行添加和删除的操作 ,而LinkList在这方面效率较高。
3、Queue接口的主要方法:
1)boolean offer(E e) 将一个对象添加至队尾,如果添加成功则返回true。
2)E poll 从对首返回一个元素,并删除此元素。
3)E peek 返回一个元素(但并不删除此元素)
public void testQueue() {
Queue<String> queue = new LinkedList<String>();
queue.offer("a");
queue.offer("b");
queue.offer("c");
System.out.println(queue); // [a, b, c]
String str = queue.peek();
System.out.println(str); // a
while (queue.size() > 0) {
str = queue.poll();
System.out.print(str + " "); // a b c}}
4、Deque是Queue的子接口,定义了所谓的双端队列,即从队列的两端分别可以入队(offer)和出队(poll),LinkList实现了该接口,
如果将Deque限制为只能从一端入队和出队,则可实现 栈(Stack)的数据结构,对于栈而言,入栈称之为push,出栈称之为pop,栈遵循先进后出的原则。
使用Deque提供的peek方法,可以查看栈顶元素,并查看栈顶元素。
public void testStack() {
Deque<String> stack = new LinkedList<String>();
stack.push("a");
stack.push("b");
stack.push("c");
System.out.println(stack); // [c, b, a]
String str = stack.peek();
System.out.println(str); // c
//循环删除栈顶元素
while (stack.size() > 0) {
str = stack.pop();
System.out.print(str + " "); // c b a}
}
队列Queue和栈的更多相关文章
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- 队列Queue、栈LifoQueue、优先级队列PriorityQueue
队列:队列是先进先出. import queue q = queue.Queue() q.put(1) q.put(2) q.put(3) q.put(4) print(q.get()) print( ...
- c++中队列queue和栈stack的基本操作
1.queue 模板类的定义在<queue>头文件中. 定义queue 对象的示例代码如下:queue<int> q1;queue<double> q2; queu ...
- C# 队列(Queue) 和堆栈(Stack)
队列 (Queue) ...
- python基本数据结构栈stack和队列queue
1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...
- STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较
栈stack .队列queue 和优先级priority_queue 三者比较 默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现 ...
- C++栈(stack)、队列(queue)、链表(list)的常用函数
C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.front() 返回第一 ...
- [LeetCode] Implement Stack using Queues 用队列来实现栈
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- STL中的单向队列queue
转载自:http://blog.csdn.net/morewindows/article/details/6950917 stl中的queue指单向队列,使用时,包含头文件<queue>. ...
随机推荐
- SpartanBrowser产品和安全特性简介
v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...
- 支持老版本IE的3种解决方案
原文链接: 3 Solutions for Supporting Internet Explorer 翻译人员: 铁锚 翻译时间: 2014年2月14日 在刚发布的那几年,Internet Explo ...
- saiku显示不出新的cube(加载的cube,saiku会保存到缓存中,不重新加载)
当用workbench 修改cube后,保存到saiku路径. saiku读取该cube时,如果以前加载过该cube(同路径,同名).则不会新加载,而是用缓存中的cube,这个cube是以前的cube ...
- 《java入门第一季》之面向对象面试题
1:方法重写和方法重载的区别?方法重载能改变返回值类型吗? 方法重写: 在子类中,出现和父类中一模一样的方法声明的现象. 方法重载: 同一个类中,出现的方法名相同,参数列表不同的现象. 方法重载能改变 ...
- 基于Reactjs实现webapp(加精)
git原文链接:https://github.com/my-fe/wiki/issues/1 由于最近的reactjs实在太火,而且距离第一版已经快2年的时间了,已经相对稳定和成熟了,基于这两个前提下 ...
- “《编程珠玑》(第2版)第2章”:B题(向量旋转)
B题是这样子的: 将一个n元一维向量向左旋转(即循环移位)i个位置.例如,当n=8且i=3时,向量abcdefgh旋转为defghabc.简单的代码使用一个n元的中间向量在n步内完成该工作.你能否仅使 ...
- 安卓TV开发(八) 移动智能终端多媒体爬虫技术 获取加载网页视频源
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40049137,作者:skay 从上一篇学习中,学习了多媒体技术中的怎么去用josu ...
- 【Matlab编程】马氏链随机模拟
本文是利用蒙特卡罗算法对马氏链过程的模拟.假设有10个状态,从每个状态到与之相邻状态的概率是相同的,仿真次数为1000,及进行了1000次状态转移.我们以动画的形式再现了状态转移的过程,并记录了到达每 ...
- unix重定向标记
stdin ,0,< << stdout,1,> >> stderr,2,2> 2>> 将stdout和stderr输出到同一个文件: > ...
- 十分钟搞定mongodb副本集
mongodb副本集配置 最近项目中用到了mongodb,由于是用mongodb来记录一些程序的日志信息和日常的统计,为了增加应用的可靠性,一直在找mongodb集群的一些资料,下面是对最近做的一个小 ...