28、队列和栈

1、队列Queue

  在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

  Queue提供了操作队列的相关方法,其主要方法如下:

  boolean offer(E e):将元素追加到队列末尾,若添加成功则返回true。

  E poll():从队首删除并返回该元素。

  E peek():返回队首元素,但是不删除。

 1 Queue<String> queue=new LinkedList<String>();
 2 //入队
 3 queue.offer("a");
 4 queue.offer("b");
 5 queue.offer("c");
 6 System.out.println(queue);
 7 System.out.println(queue.element());  //获取队首a,但不删除队首
 8 System.out.println(queue.peek());     //获取队首a,但不删除队首
 9 //出队
10 while(queue.size()>0){
11     System.out.println(queue.poll());//a、b、c 12 }

2、Deque(双队列)

  Deque是Queue的子接口,定义了所谓“双端队列”即从队列的两端分别可以入队(offer)和出队(poll),LinkedList实现了该接口。

  如果将Deque限制为只能从一端入队和出队,则可实现“栈”(Stack)的数据结构,对于栈而言,入栈称之为push,出栈称之为pop。

  栈遵循先进后出(FILO First Input Last Output )的原则。

  Deque提供了操作栈的相关方法,其主要方法如下:

  void push(E e):将给定元素"压入"栈中。存入的元素会在栈首。即:栈的第一个元素

  E pop():将栈首元素删除并返回。

1 Deque deque = new LinkedList();
2 deque.push("a");
3 deque.push("b");
4 deque.push("c");
5 while(deque.size()>0){
6     System.out.println(deque.pop());  //c、b、a
7 }
时间: 2024-10-15 00:39:54

28、队列和栈的相关文章

编程题目: 两个队列实现栈(Python)

感觉两个队列实现栈 比 两个栈实现队列 麻烦 1.栈为空:当两个队列都为空的时候,栈为空 2.入栈操作:当队列2为空的时候,将元素入队到队列1:当队列1位空的时候,将元素入队到队列2: 如果队列1 和 队列2 都为空的时候,那就选择入队到队列1. 3.出队操作:当两个队列都为空的时候,引发错误"栈为空": 当队列2位空的时候,如果队列1中只有一个元素,则直接将队列1中的元素出队: 如果队列1不止一个元素的时候,就将队列1的元素出队然后入队到队列2,知道队列1中只有一个元素,然后将队列1

C语言算法系列---1.队列和栈

写在前面:在家玩了好久,实在是不知道干嘛了,突然想找些事做,现在是时候做些什么了.这些东西不见得多高深,也可能很简单,但很基础,也无法忽视.同时,也是自己学习走过的一条路. 这是开头,就写写C的队列和栈的一些算法吧. 首先是栈的一些基础功能的实现,先贴代码: #include<stdlib.h> #include<stdio.h> typedef int SElemType; //声明栈元素类型为int typedef int Status; //函数返回值的类型为int #def

用两个栈实现队列和用两个队列实现栈

题目一:用两个栈实现队列,队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列的尾部插入节点和在队列的头部删除节点的功能. template <class T> class CQueue { CQueue(); ~CQueue(); void appendTail(const T& node); T deleteHead(); private: stack<T> stack1; stack<T> stack2; }; 如上

225 Implement Stack using Queues(用队列实现栈)

题目意思:用队列实现栈,push(),pop(),top(),empty() 思路:用两个queue,pop时将一个queue的元素pop再push到另一个队列,queue只留最后一个元素,并pop,再将目标队列变为另一个 ps:用栈实现队列,参考剑指offer 1 class Stack { 2 private: 3 queue<int> q[2]; 4 int flag=0; 5 public: 6 // Push element x onto stack. 7 void push(int

【三支火把】---队列和栈的C程序实现

这几天总结了C语言的队列,栈的实现方法,在此总结一下:一.栈 首先从栈开始,诚然,相信学习过数据结构的你,肯定应该知道栈是什么东西了,如果不知道也没事每一句话我就可以帮你总结--数据只在栈顶进行插入和删除操作,数据进出栈符合先进后出或者后进先出的原则.来贴个图片,你就知道了. 再也没有比上述图片更能贴切的描述栈了,数据结构中的栈和程序运行压栈的栈还略有区别,在此先不说那么多,继续回归正题.栈的应用很多,你最可能会用到的一个就是10进制转换2进制数了,具体怎么应用,请亲爱的你动手试试哦!接下来我就

剑指offer (7) 两个栈实现队列 两个队列实现栈

题目:用两个栈实现一个队列. 队列的声明如下,请实现它的两个函数 appendTail 和  deleteHead,分别完成队列尾部插入结点 和 队列头部删除结点 AppendTail:直接将元素入栈stack1 DeleteHead:当stack2中不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出 如果stack2为空,我们把stack1中的元素逐个弹出并入栈stack2,由于先进入队列的元素被压到stack1的底端,经过弹栈和压入stack2之后就处于stack2的顶端 1

数据结构——队列,栈

队列 有时候,我们会遇到一些数字密码游戏,比如,给出一串数字: 4,6,8,3,5,2,2,6,0,解密规则是这样的,首先将第1个数删除,紧接着将第2个数字放到这串数的末尾,再将第3个数删除并将第4个数放到这串数的末尾,再将第5个数删除……如此往复,直到最后一个数也删除.按照刚才删除的顺序,将这些删除的数连在一起就是我们需要得到的目标数字.OK,这时候,拿出纸和笔,或者用一些小便签或者小卡片,将这9个数字分别写下来,开始模拟解密过程~ 其实解密的过程就像是将这些数进行排队,每次从最前面拿两个,第

算法初级面试题03——队列实现栈、栈实现队列、转圈打印矩阵、旋转矩阵、反转链表、之字打印矩阵、排序矩阵中找数

第一部分主要讨论:栈.队列.数组矩阵相关的面试题 题目一 用数组结构实现大小固定的队列和栈 public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSize < 0) { throw new IllegalArgumentException("The init size is less than 0"

剑指Offer面试题7(Java版):用两个栈实现队列与用两个队列实现栈

题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能. 我们通过一个具体的例子来分析该队列插入和删除元素的过程.首先插入一个元素a,不妨先把它插入到stack1,此时stack1 中的元素有{a},stack2为空.再压入两个元素b和c,还是插入到stack1中,此时stack1中的元素有{a,b,c},其中c位于栈顶,而stack2仍然为空. 这个时候,我们试着删除从队列中删除一个元素.

数据结构(7)----栈与队列之栈的应用四则运算表达式求值

栈与队列之栈的应用四则运算表达式求值 栈在四则运算表达式求值的应用为逆波兰表达式(后缀表达式) 普通算式(中缀表达式):9 + (3 - 1) * 3 + 10 / 2     ---(1) 逆波兰表达式(后缀表达式):9 3 1 - 3 * + 10 2 /         ---(2) 1:逆波兰表达式的计算规则 从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号,就将处于栈顶的两个数字出栈,进行运算,再把运算结果进栈,一直到最终获得结果.接下来我们以(2)式为例: