[剑指Offer]Q9_栈和队列(用两个栈实现队列)
相关知识介绍
栈
栈是一种常见的数据结构,广泛应用于计算机领域(线程的存储调用)
- 特点:后进先出(进通常被形象地称为压入(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_栈和队列(用两个栈实现队列)相关推荐
- 剑指offer——面试题7:用两个栈实现队列
剑指offer--面试题7:用两个栈实现队列 Solution1: 注意栈的基本操作与vector略有不同~ class Solution { public:void push(int node) { ...
- 剑指offer:面试题09. 用两个栈实现队列
题目:用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有 ...
- 《剑指offer》c++版本 9. 用两个栈来实现一个队列
如题: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 本题考察对数据结构队列,栈的理解.队列的特点是FIFO,先进先出.栈的特点是FILO,先进后出.题目要求我 ...
- 牛客网(剑指offer) 第五题 用两个栈来实现一个队列
//用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. //方法一:没有用到栈 $queue=array(); function mypush($node) {glo ...
- 《剑指offer》第九题(用两个栈实现队列)
// 面试题:用两个栈实现队列 // 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的 ...
- [剑指offer]面试题7:用两个栈实现队列
面试题7:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 用两个栈模 ...
- 【剑指offer】(七)—— 用两个栈实现队列
题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队尾插入节点和在队列头部删除节点的操作. template<typena ...
- 剑指offer——面试题17:合并两个排序的链表
剑指offer--面试题17:合并两个排序的链表 Solution1: 不要犯低级错误... /* struct ListNode {int val;struct ListNode *next;Lis ...
- LeetCode_剑指 Offer 57. 和为s的两个数字(利用set、双撞指针两种思路 Java实现)
题目描述:剑指 Offer 57. 和为s的两个数字 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 示例 1: 输入:n ...
最新文章
- Ruby之Tempfile
- 正则表达式的基本入门
- 判断运营商_三大通信运营商步调一致,大流量互联网套餐陆续成绝版
- Solidity 0.5 address payable和address的区别是什么?
- SCOPE_IDENTITY()、 @@IDENTITY 、 IDENT_CURRENT()
- 翻转单词顺序列C语言,剑指offer刷题之c、c++实现的翻转单词顺序列
- 随机产生13个0~51不同的随机数 -思想(定义参考系)
- C语言【库函数与自定义函数】详解
- 资产配置那些事-标准普尔家庭资产象限图
- 注册免费许可证试用 PowerApps
- Spark面试近300题初始版本
- 《雍正皇帝·九王夺嫡》社会文化专有词泰译研究(称谓)
- X-Order创始人陶荣祺:Libra让所有互联网应用成为开放金融的一部分
- 苹果手机升级13无法开机_苹果手机更新时突然断电,手机无法开机,为什么?...
- Php使用ZipArchive打包下载文件、图片
- DOC与DOCX的区别
- python大漠插件多开_绝地助手_python挪用大漠插件教程04鼠键事宜及基本项目头脑...
- vw 前端_Vw / Vh 更好的做前端适配
- 汇编实现两位数(包括负数)以内的输入,排序和输出
- NY8B062E单片机软件IC开发(OTP MCU)