题目:

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

题2:用两个队列来实现一个栈,完成栈的add和remove操作。 栈中的元素为int类型

知识点:

  1. 队列的基本知识,创建空队列、add、remove、isempty等;
  2. 栈的基本知识,创建空栈、pop、empty、push等; 参考:https://blog.csdn.net/qq_42124842/article/details/91420306
  3. 静态static:参考:https://baijiahao.baidu.com/s?id=1636927461989417537&wfr=spider&for=pc
    1. 静态方法只能访问静态成员(非静态即可访问静态也可非静态)
    2. 静态方法中不能用this,super(静态方法是类变量,不是实例变量)
    3. 主函数是静态的;

注意:

  1. 创建空队列:Queue<Integer> q1= new LinkedList<Integer>();
  2. 创建空栈:Stack<Integer> stack1 = new Stack<>();

代码实现:

  • 题1:使用两个栈来互相倒,从而实现队列的先进先出,及删除队头元素,主要看stack2
  • 题2:将除要删除的元素都移至q2,将删除元素从q1中弹出后,再将q2元素移至q1,主要看q1
package jzoffer;import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;import javax.management.RuntimeErrorException;import org.omg.CORBA.PUBLIC_MEMBER;import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Collections;import jdk.internal.dynalink.beans.StaticClass;public class Num09 {public static void main(String[] args) {//测试1StackImpQueue queue = new StackImpQueue();//添加元素queue.appendTail(1);queue.appendTail(2);queue.appendTail(5);queue.appendTail(7);queue.appendTail(9);//删除队头元素queue.deleteHead();//打印队列元素queue.showQueue();//测试2QueueImpStack stack = new QueueImpStack();//添加元素stack.appendTail(1);stack.appendTail(2);stack.appendTail(3);stack.appendTail(4);stack.appendTail(5);//删除队头元素stack.deleteHead();//打印队列元素stack.showStack();}//栈实现队列public static class StackImpQueue{public Stack<Integer> stack1 = new Stack<>();public Stack<Integer> stack2 = new Stack<>();public void appendTail(Integer a) {stack1.push(a);}/*** 打印队列元素*/public void showQueue() {while(!stack1.empty()) {Integer output1 = stack1.pop();stack2.push(output1);}while(!stack2.empty()) {System.out.print(stack2.pop()+ " ");}}/*** 删除队头元素* @return*/public int deleteHead() {//若stack1、2均空if(stack1.empty() && stack2.empty()) {throw new RuntimeException("队列为空");//若stack1不空、2空}else if(stack2.empty()) {while(!stack1.empty()) {stack2.push(stack1.pop());}}return stack2.pop();}}//队列实现栈public static class QueueImpStack{private Queue<Integer> q1= new LinkedList<Integer>();private Queue<Integer> q2= new LinkedList<Integer>();/*** 添加元素* @param data*/public void appendTail(int data) {q1.add(data);}/*** 删除元素*/public void deleteHead() {if(q1.isEmpty() && q2.isEmpty()) {throw new RuntimeException("栈 为空"); }while(q1.size()>1) {Integer output1 = q1.remove();q2.add(output1);}q1.remove();while(!q2.isEmpty()) {q1.add(q2.remove());}}/*** 打印*/public void showStack() {ArrayList<Integer> ls = new ArrayList<Integer>();while(!q1.isEmpty()) {ls.add(q1.remove());}for(int i=ls.size()-1; i>=0; i--) {System.out.println(ls.get(i));}}}
}

代码实现(C++):

stack<int> stack1;
stack<int> stack2;void push(int node) {stack1.push(node);
}int pop() {int res;//当stack2有值先弹if (!stack2.empty()){res = stack2.top();stack2.pop();}//stack2为空,stack1不为空else if(!stack1.empty()){//将stack1的值压入stack2while (!stack1.empty()) {int num = stack1.top();stack2.push(num);stack1.pop();}res =  stack2.top();stack2.pop();}return res;
}

剑指offer——9.用两个栈实现队列相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java

    <LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...

  2. java 栈和队列实现迷宫代码_LeetCode每日一题--剑指 Offer 09. 用两个栈实现队列(Java)

    DailyChallenge 剑指 Offer 09. 用两个栈实现队列 Easy20200630 Description 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTai ...

  3. 【LeetCode】剑指 Offer 09. 用两个栈实现队列

    [LeetCode]剑指 Offer 09. 用两个栈实现队列 文章目录 [LeetCode]剑指 Offer 09. 用两个栈实现队列 一.双栈 总结 一.双栈 维护两个栈,第一个栈支持插入操作,第 ...

  4. 【剑指offer】 用两个栈实现队列 java实现

    [剑指offer] 用两个栈实现队列 题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 栈和队列的性质,栈是先进后出的,而队列是先进先出的.对于栈我 ...

  5. 剑指Offer #05 用两个栈实现队列(模拟)

    题目来源:牛客网-剑指Offer专题 题目地址:用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目解析 首先,我们需要知道一下基本知 ...

  6. [剑指Offer]9.用两个栈实现队列

    题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 用栈来模拟队列.我们首先插入一个元素a到stack1中,再压入两个元素bc,此时栈中有元素abc,其中 ...

  7. 剑指OFFER之用两个栈实现队列(九度OJ1512)

    题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 输入: 每个输入文件包含一个测试样例. 对于每个测试样例,第一行输入一个n(1<=n<=1 ...

  8. Leetcode 剑指 Offer 09. 用两个栈实现队列 (每日一题 20210915)

    用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHea ...

  9. 【双100%提交】剑指 Offer 09. 用两个栈实现队列

    立志用最少的代码做最高效的表达 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队 ...

  10. 剑指 Offer 09. 用两个栈实现队列(相邻相同操作只需要移动一次)

    题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,delete ...

最新文章

  1. golang mysql 超时_golang中mysql建立连接超时时间timeout 测试
  2. 2019最全Python入门学习路线,绝对是最全
  3. include详解 shell_socket实现基于tcp/ip的网络远程shell命令解析器(完善中...)
  4. 设计模式——解释器模式
  5. yum httpd安装详解
  6. At present, Huawei has two more important
  7. 脑瘫男孩17岁考上大学,毕业在家工作每月7500,成为公司骨干
  8. UVA1394 LA3882 POJ3517 And Then There Was One【约瑟夫环+数学】
  9. 在 CentOS7 安装 ELK
  10. perl语言入门(小骆驼)学习(一)
  11. 基于近邻用户协同过滤算法的音乐推荐系统
  12. 向量的方向余弦公式_方向余弦怎么求
  13. ps怎么打开php图片大小,如何使用ps修改图片尺寸
  14. macOSX下格式化外接固态硬盘
  15. Redis 作者 Antirez 讲如何实现分布式锁?Redis 实现分布式锁天然的缺陷分析Redis分布式锁的正确使用姿势!...
  16. 左眼跳或右眼跳吉凶对照表(必读)
  17. 春风十里,美拉德在人人投等你!
  18. MySQL面试常问大全
  19. 混凝土骨料微观结构数学物理模型建模
  20. net::ERR_ABORTED 404 (Not Found)

热门文章

  1. loj10147. 「一本通 5.1 例 1」石子合并
  2. 数据库原理--事务(一)
  3. erlang 读取confg文件异常 could not start kernel pid error in config file
  4. iPhone girl幕后推手浮出 制造者为论坛站长
  5. 【Java数据结构】链式存储的二叉树
  6. 软件设计师19-系统开发和运行02
  7. Windows域控设置客户端禁用运行/cmd命令行【全域策略生效】
  8. 电脑的服务器操作系统是什么,电脑的服务器操作系统是什么
  9. 转行、入行必看!都2021年了,数据分析行业还值得进吗?
  10. 如何将qq客服搬到我们的flex应用中