java实现——007用两个栈实现队列


 1 import java.util.Stack;
2
3 public class T007 {
4 public static void main(String[] args) {
5 Queue q = new Queue();
6 q.stack1 = new Stack();
7 q.stack2 = new Stack();
8 q.appendTail(1);
9 System.out.println(q.stack1.toString());
10 System.out.println(q.stack2.toString());
11 q.appendTail(2);
12 q.appendTail(3);
13 q.deleteHead();
14 System.out.println(q.stack1.toString());
15 System.out.println(q.stack2.toString());
16 }
17
18 public static class Queue {
19 private Stack<Integer> stack1;
20 private Stack<Integer> stack2;
21
22 public void appendTail(int e) {
23 stack1.push(e);
24 }
25
26 public void deleteHead() {
27 if (stack2.size() <= 0) {
28 while (stack1.size() > 0) {
29 int data = stack1.peek();
30 stack1.pop();
31 stack2.push(data);
32 }
33 }
34 if (stack2.size() == 0)
35 System.out.println("queue is empty");
36 int head = stack2.peek();
37 stack2.pop();
38 }
39 }
40 }

java实现——007用两个栈实现队列

时间: 2024-08-02 15:39:35

java实现——007用两个栈实现队列的相关文章

剑指offer第二版-9.用两个栈实现队列

描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对stack2进行弹出操作. 考点:对栈和队列的理解:对泛型的使用等. /** * Copyright(C) 2019 Hangzhou Differsoft Co., Ltd. All rights reserved. * */ package com.java.offer; import java.

两个栈实现队列+两个队列实现栈----java

两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后全部出stack1并进入stack2.实现队列的先进先出即:若stack2非空,我们需要的恰好再栈顶,出栈;若要给队列添加元素,即先进sack1,要出队时,若stack2不为空就出栈,为空时就把stack1全部进栈到stack2 二.两个队列实现一个栈 ps:图片原创于剑桥offer,来自网络 两个栈实现队列+两个队列实现栈----java,布布扣,bubuko.com

【Java】 剑指offer(8) 用两个栈实现队列

本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集  题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 思路 这道题较简单,自己先试着模拟一下插入删除的过程(在草稿纸上动手画一下):插入肯定是往一个栈stack1中一直插入:删除时,直接出栈无法实现队列的先进先出规则,这时需要将元素从stack1出栈,压到另一个栈stack2

剑指offer【05】- 用两个栈实现队列(java)

题目:用两个栈实现队列 考点:栈和队列 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:每次psuh是时先将stack2清空放入stck1(保证选入的一定在栈底),stack2始终是用来删除的.在pop前,先将stack1中中的数据清空放入stack2(保存后入的在栈底),stack1始终用于push. 1 import java.util.Stack; 2 3 public class Solution { 4 Stack<Intege

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

用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 一个栈的顺序是“后进先出”,再用一个栈把顺序颠倒过来就满足队列的“先进先出”规则了 用两个stack实现,stack1负责进队列,然后从stack2弹栈出队列,若stack2为空,再从stack1弹出到stack2 代码 import java.util.Stack; public class Solution { Stack<Integer> stack1 = new St

java-57-用两个栈实现队列&amp;&amp;用两个队列实现一个栈

转自:http://bylijinnan.iteye.com/blog/1450125 ———————————————————————————————————————————— Java代码   import java.util.ArrayList; import java.util.List; import java.util.Stack; /* * Q 57 用两个栈实现队列 */ public class QueueImplementByTwoStacks { private Stack<

两个栈实现队列的功能

//用两个栈实现队列的功能 //假设有两个栈s1与s2,则s1保存刚刚入队的元素,若需出队且s2为空,则将s1所有元素压入s2(此时s2中元素顺序为元素入队顺序),然后取出s2栈顶即可,若s2非空(此时s2中元素为s1之前压入,其栈顶就是最早入队的元素),则直接取出s2的栈顶. template<class T> class MyQueue { stack<T> s1,s2; public: MyQueue(){} int size() { return s1.size()+s2.

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

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

【干货】容器适配器实现两个栈模拟队列

用两个栈模拟队列的思想就是"倒水思想",这里我们用自定义类型模拟出线性表,再用线性表做容器实现栈的数据结构,最后用栈来实现队列,代码如下: #include<iostream> #include<string> #include<cassert> struct __TrueType//类型萃取 { bool Get() { return true; } }; struct __FalseType { bool Get() { return false