9.3栈和队列(七)——用两个栈来实现一个队列

/**

* 功能:用两个栈来实现一个队列。

*/

import java.util.*;

/**
 * 思路:需要修改peek()和pop(),以相反顺序执行操作。可以利用第二个栈来反转元素的次序。
 * stackNewest顶端为最新元素,stackOldest顶端为最旧元素,利用两个栈的元素的转移来实现。
 *
 */
public class MyQuene1 {

      Stack stackNewest ,stackOldest ;

      public MyQuene1(){
             stackNewest= new  Stack();
             stackOldest= new  Stack();
      }

      public int size(){
             return stackNewest.size()+ stackOldest.size();
      }

      public void add(Object value){
             stackNewest.push(value);
      }

      //返回最旧元素
      public Object peek(){
             this.shiftStack();
             return stackOldest.peek();
      }

      //删除最旧元素
      public Object remove(){
             this.shiftStack();
             return stackOldest.pop();
      }

      public void shiftStack(){
             if( stackOldest.isEmpty())
                   while(! stackNewest.isEmpty())
                         stackOldest.push(stackNewest.pop());
      }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-04 00:25:33

9.3栈和队列(七)——用两个栈来实现一个队列的相关文章

自定义栈的实现及使用两个栈模拟队列

一,使用单链表实现栈 ①栈需要一个栈顶指针 ②栈的基本操作有出栈和入栈,以及判断栈是否为空 ③单链表中每个结点表示一个栈元素,每个结点有指向下一个结点的指针.因此,在栈内部需要实现一个单链表.代码如下: public class Stack<T extends Comparable<? super T>>{ private class Node{ T ele; Node next; public Node(T ele) { this.ele = ele; } } Node top;

数据结构和算法之栈和队列一:两个栈模拟一个队列以及两个队列模拟一个栈

今天我们需要学习的是关于数据结构里面经常看到的两种结构,栈和队列.可以说我们是一直都在使用栈,比如说在前面递归所使用的的系统的栈,以及在链表倒序输出时介绍的自定义栈类Stack和使用系统的栈进行递归.那么,在这里我们就讲述一下这两个比较具有特色的或者说关系比较紧密的数据结构之间的互相实现问题. 一:两个栈模拟实现一个队列: 栈的特点是先进后出,然而队列的特点是先进先出. public class Queen(Stack s1,Stack s2){ //实现插入的方法 public void ad

栈的实现 与 用两个栈实现队列

栈的实现 /** * 栈的实现:数组 */ class MyStack1<T>{ private T[] data; private int maxLength; private int top; public MyStack1(int maxLength) { this.maxLength = maxLength; this.data= (T[])new Object[maxLength]; top=-1; } public boolean isFull(){ if(top==maxLeng

C++算法之 用两个栈实现一个队列

算法思路: 一个栈用来入队列,一个栈用来出队列: 现有两个栈s1 和s2:s1用来入栈,比如  队列进入  1 2 3 4 5 那么s1进栈 1 2 3 4 5 ,现在要出队列,意思就是要1先出来: 那么我们把栈s1的数据取出来都压到栈s2当中,那么栈s2就是 5 4 3 2 1 :s2再出栈,此时1出栈就模拟出出队列的效果: 编写代码: // QueueFrom2Stack.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include &l

题目:用两个栈实现一个队列

题目描述:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 1 template <typename T> class CQueue 2 { 3 public: 4 CQueue(void); 5 ~CQueue(void); 6 7 void appendTail(const T& node); 8 T deleteHead(); 9 10 private: 11 stack&l

剑指offer:用两个栈实现一个队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 类似汉诺塔,当我们需要将栈A下面的元素出栈的时候可以先将栈A中的元素全部逆序压入到另一个栈B,这时栈B保存的就是栈A的逆序,也就是满足了FIFO的要求 class Solution: """ 用两个栈模拟一个队列,如果两个栈的容量分别为M和N,其中M > N,那么模拟得到的队列的容量是2N+1 因为假设先把stack2塞满N个,然后此时stack1塞进N+2个,那么此时将元素出

【剑指Offer】05 - 用两个栈实现队列

重建二叉树 时间限制:1秒 空间限制:32768K 本题知识点:队列 栈 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. import java.util.Stack; public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); publi

题目七:用两个栈实现队列

//////////////////////////////////////////////////////////////////////////////////// // 10.题目七:用两个栈实现队列 // 题目:用两个栈实现一个队列,队列的声明如下: template <typename TYPE> class CQueue { public: CQueue(){} ~CQueue(){} void AppendTail(const TYPE& node); TYPE Dele

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型

import java.util.Stack; /**  * 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.  * @author user  *  *思路:队列是先入先出,栈是先入后出,可以将数据压入第一个栈后,在弹出来压入第二个栈,弹得时候直接从第二个栈弹出,弹出后又将  *第二个栈中的所有数据弹出重新压入的一个栈  */ public class Solution {     Stack<Integer> stack1 = new Stack<