剑指Offer——Java实现栈和队列的互模拟操作
2024-10-15 17:35:23
剑指Offer——Java实现栈和队列的互模拟操作
栈模拟队列
题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。
思路:其实就是把队列正常入栈,出栈的时候先把栈里的内容按顺序搬到另一个栈里,负负得正,这样再按顺序出栈的时候,就成了入栈前队列的顺序
package cn.edu.ujn.demo;
import java.util.Stack;
import org.junit.Test;
public class Stack2Queue {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
// 入栈函数
public void push(int num) {
stack1.push(num); // 要往栈中压入什么就直接用栈的push方法就好了
}
// 出栈函数
public int pop() {
Integer re = null;
if (!stack2.empty()) { // 如果栈2不是空的,那么把最上面那个取出来
re = stack2.pop();
} else {
// 如果栈2是空的,就把栈1里的数一个个取出来,放到栈2里
while (!stack1.empty()) {
re = stack1.pop();
stack2.push(re);
}
// 栈2里有数之后,再次把里面的数取出来
if (!stack2.empty()) {
re = stack2.pop();
}
}
return re;
}
@Test
public void test(){
Stack2Queue sq = new Stack2Queue();
sq.push(1);
sq.push(3);
System.out.println("...:" + sq.pop());
System.out.println("...:" + sq.pop());
}
}
队列模拟栈
题目:JAVA实现用两个队列来实现一个栈,完成栈的Push和Pop操作
package cn.edu.ujn.demo;
import java.util.LinkedList;
public class Queue2Stack {
private LinkedList<String> queue1;
private LinkedList<String> queue2;
public Queue2Stack(){
queue1 = new LinkedList<String>();
queue2 = new LinkedList<String>();
}
public String pop(){
String re =null;
if(queue1.size() == 0 && queue2.size() == 0){
return null;
}
if(queue2.size() == 0){
while(queue1.size() >0){
re = queue1.removeFirst();
if(queue1.size() != 0){
queue2.addLast(re);
}
}
}else if(queue1.size() == 0){
while(queue2.size() >0){
re = queue2.removeFirst();
if(queue2.size()!=0){
queue1.addLast(re);
}
}
}
return re;
}
public String push(String str){
if(queue1.size() ==0 && queue2.size() == 0){
queue1.addLast(str);
}
if(queue1.size()!=0){
queue1.addLast(str);
}else if(queue2.size()!=0){
queue2.addLast(str);
}
return str;
}
public static void main(String[] args) {
Queue2Stack stack = new Queue2Stack();
String tmp;
stack.push("1");
stack.push("2");
stack.push("3");
tmp = stack.pop();
System.out.println(tmp);//3
stack.push("4");
tmp = stack.pop();
System.out.println(tmp);//4
tmp = stack.pop();
System.out.println(tmp);//2
stack.push("5");
stack.push("6");
tmp = stack.pop();
System.out.println(tmp);//6
tmp = stack.pop();
System.out.println(tmp);//5
tmp = stack.pop();
System.out.println(tmp);//1
}
}
最新文章
- docker-compose编写(英文)
- window.onload和window.onscroll
- SQL语句order by两个字段同时排序
- WinForm发布程序方式选择
- xmanager远程桌面连接Linux
- php curl vs python提交多维数组+文件
- BZOJ_1619_[Usaco2008_Nov]_Guarding_the_Farm_保卫牧场_(模拟+bfs)
- jsp九九乘法表
- FunDA(3)- 流动数据行操作:FDAPipeLine operations using scalaz-stream-fs2
- 通过url获取相应的location信息
- 基于tomcat+springMVC搭建基本的前后台交互系统
- Linux修改磁盘挂载目录
- Matlab的集合运算[转]
- ubuntu 下关闭apache服务自动启动
- npm 删除node_modules
- Android批量图片加载经典系列——Volley框架实现多布局的新闻列表
- 通过Intel XDK编写跨平台app(二)
- RegDBGetKeyValueEx函数使用报错error 1 numeric value required
- php 正则表达式四,例子
- HDU - 4763 找出特殊规律的串
热门文章
- Myeclipse修改设置Default VM Arguments
- [LeetCode] Toeplitz Matrix 托普利兹矩阵
- 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例
- 机器学习技法:08 Adaptive Boosting
- Redis安装与卸载
- [USACO 12JAN]Mountain Climbing
- POJ2454 Jersey Politics
- [luoguP3729]曼哈顿计划EX
- 使用C# (.NET Core) 实现状态设计模式 (State Pattern)
- windows server 2003 远程桌面最大连接数调整与windows 2008远程桌面后,本地帐号自动锁定