相关知识介绍

栈是一种常见的数据结构,广泛应用于计算机领域(线程的存储调用)

  • 特点:后进先出(进通常被形象地称为压入(push)、出称为弹出(pop)

队列

队列是和栈长得非常像的一种数据结构,不同的是,队列是“先进先出”

  • 特点:先进先出

题目:用两个栈实现队列

  • 用两个栈实现队列,请实现它的两个函数appendTail和deleteHead,完成在尾部插入节点和在头部删除节点的功能

Java实现

实现栈功能

/** 泛型实现 */
class MyStack<O>{//栈顶位置、数组模拟private int top;private ArrayList<O> arr;//构造函数public MyStack() {top = -1;arr = new ArrayList<O>();}//实现push功能public void push(O o){arr.add(++top,o);}public <O>O pop(){if(top==-1){return (O) "栈为空";}else{return (O) arr.get(top--);}}public boolean isEmpty(){if(top==-1){return true;}else{return false;}}
}

解题:用两个栈实现队列功能

/** 实现队列*/
class MyQueue<O>{private MyStack<O> stack;private MyStack<O> stack2;public MyQueue(){stack = new MyStack();stack2 = new MyStack();}public void push(O o){while(!stack2.isEmpty()){stack.push(stack2.pop());}stack.push(o);}public <O>O pop(){while (!stack.isEmpty()) {stack2.push(stack.pop());}if(stack2.isEmpty()==true){return (O) "队列为空";}else{return stack2.pop();}}
}

测试用例

/*** 用两个栈实现一个队列* * 测试用例* 1.正常:添加删除元素* 2.特殊:连续删除到为空* @author 林博弈**/
public class Q9_StackAndQueue {public static void main(String[] args) {//栈测试MyStack<Integer> intStack = new MyStack<Integer>();intStack.push(11);intStack.push(22);intStack.push(55);System.out.println(intStack.pop().toString());System.out.println(intStack.pop().toString());System.out.println(intStack.pop().toString());System.out.println(intStack.pop().toString());//队列测试MyQueue<Integer> intQueue = new MyQueue<Integer>();intQueue.push(11);intQueue.push(22);intQueue.push(55);System.out.println(intQueue.pop().toString());System.out.println(intQueue.pop().toString());System.out.println(intQueue.pop().toString());System.out.println(intQueue.pop().toString());}
}

[剑指Offer]Q9_栈和队列(用两个栈实现队列)相关推荐

  1. 剑指offer——面试题7:用两个栈实现队列

    剑指offer--面试题7:用两个栈实现队列 Solution1: 注意栈的基本操作与vector略有不同~ class Solution { public:void push(int node) { ...

  2. 剑指offer:面试题09. 用两个栈实现队列

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

  3. 《剑指offer》c++版本 9. 用两个栈来实现一个队列

    如题: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 本题考察对数据结构队列,栈的理解.队列的特点是FIFO,先进先出.栈的特点是FILO,先进后出.题目要求我 ...

  4. 牛客网(剑指offer) 第五题 用两个栈来实现一个队列

    //用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. //方法一:没有用到栈 $queue=array(); function mypush($node) {glo ...

  5. 《剑指offer》第九题(用两个栈实现队列)

    // 面试题:用两个栈实现队列 // 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的 ...

  6. [剑指offer]面试题7:用两个栈实现队列

    面试题7:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 用两个栈模 ...

  7. 【剑指offer】(七)—— 用两个栈实现队列

    题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队尾插入节点和在队列头部删除节点的操作. template<typena ...

  8. 剑指offer——面试题17:合并两个排序的链表

    剑指offer--面试题17:合并两个排序的链表 Solution1: 不要犯低级错误... /* struct ListNode {int val;struct ListNode *next;Lis ...

  9. LeetCode_剑指 Offer 57. 和为s的两个数字(利用set、双撞指针两种思路 Java实现)

    题目描述:剑指 Offer 57. 和为s的两个数字 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:n ...

最新文章

  1. Ruby之Tempfile
  2. 正则表达式的基本入门
  3. 判断运营商_三大通信运营商步调一致,大流量互联网套餐陆续成绝版
  4. Solidity 0.5 address payable和address的区别是什么?
  5. SCOPE_IDENTITY()、 @@IDENTITY 、 IDENT_CURRENT()
  6. 翻转单词顺序列C语言,剑指offer刷题之c、c++实现的翻转单词顺序列
  7. 随机产生13个0~51不同的随机数 -思想(定义参考系)
  8. C语言【库函数与自定义函数】详解
  9. 资产配置那些事-标准普尔家庭资产象限图
  10. 注册免费许可证试用 PowerApps
  11. Spark面试近300题初始版本
  12. 《雍正皇帝·九王夺嫡》社会文化专有词泰译研究(称谓)
  13. X-Order创始人陶荣祺:Libra让所有互联网应用成为开放金融的一部分
  14. 苹果手机升级13无法开机_苹果手机更新时突然断电,手机无法开机,为什么?...
  15. Php使用ZipArchive打包下载文件、图片
  16. DOC与DOCX的区别
  17. python大漠插件多开_绝地助手_python挪用大漠插件教程04鼠键事宜及基本项目头脑...
  18. vw 前端_Vw / Vh 更好的做前端适配
  19. 汇编实现两位数(包括负数)以内的输入,排序和输出
  20. NY8B062E单片机软件IC开发(OTP MCU)

热门文章

  1. python雷达图详解_Python成绩单雷达图
  2. matlab求解rl电路,基于MATLAB的RL并联电路频率响应特性分析
  3. 【数据结构与算法】尚硅谷韩顺平老师+含java代码(更新中)
  4. 天龙八部荣耀版 天龙h5 脚本辅助 定制开发
  5. 网络综合布线工程知识大全
  6. 大航海时代2人物剧情(转载)
  7. NOI:7213 垃圾炸弹
  8. 某工厂人脸识别考勤系统
  9. 一种有效组织Java GUI 源码的编程架构
  10. PAT乙级-1048 数字加密