- 浏览: 787418 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
萨琳娜啊:
Java读源码之Netty深入剖析网盘地址:https://p ...
Netty源码学习-FileRegion -
飞天奔月:
写得有趣 ^_^
那一年你定义了一个接口 -
GoldRoger:
第二个方法很好
java-判断一个自然数是否是某个数的平方。当然不能使用开方运算 -
bylijinnan:
<script>alert("close ...
自己动手实现Java Validation -
paul920531:
39行有个bug:"int j=new Random ...
java-蓄水池抽样-要求从N个元素中随机的抽取k个元素,其中N无法确定
import java.util.ArrayList; import java.util.List; import java.util.Stack; /* * Q 57 用两个栈实现队列 */ public class QueueImplementByTwoStacks { private Stack<Integer> stack1; private Stack<Integer> stack2; QueueImplementByTwoStacks(){ stack1=new Stack<Integer>(); stack2=new Stack<Integer>(); } public Integer poll(){ Integer re=null; if(!stack2.empty()){ re=stack2.pop(); }else{ while(!stack1.empty()){//move to stack2 to make stack1 have only one element.Then pop this element. re=stack1.pop(); stack2.push(re); } if(!stack2.empty()){ re=stack2.pop(); } } return re; } public Integer offer(int o){ stack1.push(o); return o; } public static void main(String[] args) { QueueImplementByTwoStacks queue=new QueueImplementByTwoStacks(); List<Integer> re=new ArrayList<Integer>(); queue.offer(1); queue.offer(2); queue.offer(3); re.add(queue.poll()); queue.offer(4); re.add(queue.poll()); queue.offer(5); re.add(queue.poll()); re.add(queue.poll()); re.add(queue.poll()); System.out.println(re.toString()); } }
import java.util.LinkedList; /* * Q 57 用两个队列实现一个栈 */ public class StackImplementByTwoQueues { //use 'queue1' and 'queue2' as a queue.That means only use the method 'addLast' and 'removeFirst'. private LinkedList<Integer> queue1; private LinkedList<Integer> queue2; StackImplementByTwoQueues(){ queue1=new LinkedList<Integer>(); queue2=new LinkedList<Integer>(); } public Integer pop(){ Integer 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){//do not add the last element of queue1 to queue2 queue2.addLast(re); } } }else if (queue1.size()==0){ while(queue2.size()>0){ re=queue2.removeFirst(); if(queue2.size()!=0){//do not add the last element of queue2 to queue1 queue1.addLast(re); } } } return re; } public Integer push(Integer o){ if(queue1.size()==0&&queue2.size()==0){ queue1.addLast(o);//queue2.addLast(o); is also ok } if(queue1.size()!=0){ queue1.addLast(o); }else if(queue2.size()!=0){ queue2.addLast(o); } return o; } public static void main(String[] args) { StackImplementByTwoQueues stack=new StackImplementByTwoQueues(); int tmp=0; 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 } }
评论
2 楼
bylijinnan
2015-07-03
sand_clock 写道
楼主代码有误:
两个队列实现一个栈
第一次push时你的代码会让第一个元素进栈2遍。
错误代码:
public Integer push(Integer o){
if(queue1.size()==0&&queue2.size()==0){
queue1.addLast(o);//queue2.addLast(o); is also ok
}
if(queue1.size()!=0){
queue1.addLast(o);
}else if(queue2.size()!=0){
queue2.addLast(o);
}
return o;
}
纠正代码:
public Integer push(Integer o){
if(queue1.size()!=0){
queue1.addLast(o);
}else if(queue2.size()!=0){
queue2.addLast(o);
}
if(queue1.size()==0&&queue2.size()==0){
queue1.addLast(o);//queue2.addLast(o); is also ok
}
return o;
}
两个队列实现一个栈
第一次push时你的代码会让第一个元素进栈2遍。
错误代码:
public Integer push(Integer o){
if(queue1.size()==0&&queue2.size()==0){
queue1.addLast(o);//queue2.addLast(o); is also ok
}
if(queue1.size()!=0){
queue1.addLast(o);
}else if(queue2.size()!=0){
queue2.addLast(o);
}
return o;
}
纠正代码:
public Integer push(Integer o){
if(queue1.size()!=0){
queue1.addLast(o);
}else if(queue2.size()!=0){
queue2.addLast(o);
}
if(queue1.size()==0&&queue2.size()==0){
queue1.addLast(o);//queue2.addLast(o); is also ok
}
return o;
}
不会啊,不会存在两个queue都不为空的情况
1 楼
sand_clock
2015-07-02
楼主代码有误:
两个队列实现一个栈
第一次push时你的代码会让第一个元素进栈2遍。
错误代码:
public Integer push(Integer o){
if(queue1.size()==0&&queue2.size()==0){
queue1.addLast(o);//queue2.addLast(o); is also ok
}
if(queue1.size()!=0){
queue1.addLast(o);
}else if(queue2.size()!=0){
queue2.addLast(o);
}
return o;
}
纠正代码:
public Integer push(Integer o){
if(queue1.size()!=0){
queue1.addLast(o);
}else if(queue2.size()!=0){
queue2.addLast(o);
}
if(queue1.size()==0&&queue2.size()==0){
queue1.addLast(o);//queue2.addLast(o); is also ok
}
return o;
}
两个队列实现一个栈
第一次push时你的代码会让第一个元素进栈2遍。
错误代码:
public Integer push(Integer o){
if(queue1.size()==0&&queue2.size()==0){
queue1.addLast(o);//queue2.addLast(o); is also ok
}
if(queue1.size()!=0){
queue1.addLast(o);
}else if(queue2.size()!=0){
queue2.addLast(o);
}
return o;
}
纠正代码:
public Integer push(Integer o){
if(queue1.size()!=0){
queue1.addLast(o);
}else if(queue2.size()!=0){
queue2.addLast(o);
}
if(queue1.size()==0&&queue2.size()==0){
queue1.addLast(o);//queue2.addLast(o); is also ok
}
return o;
}
发表评论
-
百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序
2012-12-21 18:17 4102import java.util.Arrays; ... -
java-56-动态规划-最长公共子序列
2012-03-12 00:14 2976http://zhedahht.blog.163.com/bl ... -
java-60-在O(1)时间删除链表结点
2012-03-12 00:12 1988public class DeleteNode_O1_ ... -
java-26-左旋转字符串
2012-03-11 11:23 3085public class LeftRotateString ... -
java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶
2012-03-08 20:41 5003import java.util.Stack; pu ... -
java-54- 调整数组顺序使奇数位于偶数前面
2012-03-06 21:09 3702import java.util.Arrays; imp ... -
java-63-在字符串中删除特定的字符
2012-03-05 16:47 2335public class DeleteSpecific ... -
java-67-扑克牌的顺子.从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大
2012-03-05 15:46 6248package com.ljn.base; import ... -
java-68-把数组排成最小的数。一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的。例如输入数组{32, 321},则输出32132
2012-03-05 10:38 6193import java.util.Arrays; imp ... -
java-69-旋转数组的最小元素。把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素
2012-02-29 10:30 3539public class MinOfShiftedAr ... -
java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。
2012-02-28 00:00 6452public class ProbabilityOfD ... -
java-71-数值的整数次方.实现函数double Power(double base, int exponent),求base的exponent次方
2012-02-27 21:43 3093public class Power { /* ... -
java-73-输入一个字符串,输出该字符串中对称的子字符串的最大长度
2012-02-27 16:14 5845public class LongestSymmtri ... -
java-75-二叉树两结点的最低共同父结点
2012-02-27 11:27 1553import java.util.LinkedList; ... -
java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
2012-02-11 10:56 2508public class OcuppyMoreThan ... -
java-17-在一个字符串中找到第一个只出现一次的字符
2012-02-11 10:04 5887public class FirstShowOnlyO ... -
java-50-输入两棵二叉树A和B,判断树B是不是A的子结构
2012-02-10 23:26 1982思路来自:http://zhedahht.blog.163.c ... -
java-51-输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
2012-02-10 10:55 4276public class PrintMatrixClo ... -
java-61-在数组中,数字减去它右边(注意是右边)的数字得到一个数对之差. 求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5,
2012-02-09 23:08 2234思路来自:http://zhedahht. ... -
java-37.有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接
2012-01-27 22:46 2330public class MaxCatenate { ...
相关推荐
试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...
title: 剑指Offer-用两个栈实现队列subtitle: 用两个栈实现队列categories: 剑指Offer用两个栈实现队列题目描述用两个栈来实现一
在Java编程中,使用两个栈实现队列是一种常见的数据结构问题。这个题目要求我们通过两个栈来模拟队列的基本操作,如入队(enqueue)和出队(dequeue)。栈和队列是两种不同的数据结构,栈是后进先出(LIFO,Last In ...
232. 用两个栈实现队列232. 用栈实现队列题目描述解题思路/** Initialize your data structure here. *//** R
java基础面试题用两个栈实现一个队列本资源系百度网盘分享地址
"利用栈和队列实现迷宫" 通过栈和队列两种不同的方法来实现迷宫问题。...通过栈和队列两种方法来解决迷宫问题,我们可以学习到数据结构的应用和算法的设计,以及如何使用不同的方法来解决同一个问题。
在Java中,可以使用ArrayList或者LinkedList来实现栈。当一个元素被压入栈(push)时,它成为栈顶元素;当一个元素被弹出(pop)时,总是栈顶元素被移除。栈的主要操作还包括查看栈顶元素但不移除(peek)以及检查栈...
9. 用两个栈实现队列题目链接牛客网题目描述用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。当元素要出栈时,需要先进入 out 栈,此时元素出栈
在第232题中,我们需要使用两个栈来模拟一个队列的行为。这个问题的关键在于如何利用栈的特性来实现队列的两个主要操作:入队(enqueue)和出队(dequeue)。 1. 入队(enqueue)操作:将新元素直接压入栈1。这个...
5.用两个栈实现一个队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。* @desc 用两个栈实现队列public class Solutio
- **计算**:基于后缀表达式进行计算,通常使用两个栈:一个存放运算符,另一个存放数值。按照后缀表达式的顺序,逐个处理每个字符,进行相应的计算。 例如,对于中缀表达式“4 + 2 * (1 - 5) ^ 2 ^ 3”,其对应的...
在Java中,我们可以使用ArrayDeque类或者Stack类来实现栈。ArrayDeque相比于Stack性能更优,因为它提供了线程不安全但高效的操作。以下是一个简单的栈操作例子: ```java import java.util.Stack; public class ...
1. **熟练掌握栈和队列的基本操作**:在数组和链表两种存储结构上实现栈和队列的基本操作。 2. **应用栈和队列解决实际问题**:通过具体的编程练习,学习如何利用栈和队列来解决简单的实际问题。 #### 实验内容 本...
"数据结构用两个栈实现一个队列的实例" 本文主要介绍了使用两个栈来实现一个队列的实例,这是数据结构中的一种常见实现方法。队列是一种先进先出(FIFO)的数据结构,栈是一种先进后出(LIFO)的数据结构。通过使用...
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解题思路参考:https://blog.csdn.net/flower_48237/article/details/104055970
本篇文章将深入探讨如何使用两个栈来实现一个队列,并在Java语言中给出具体实现。 首先,我们要理解为何可以使用两个栈来模拟队列的行为。栈1作为辅助栈,用于临时存储数据,而栈2作为主栈,用于模拟队列的出队操作...
这样,我们就成功地使用两个栈模拟了一个队列。 这种设计虽然增加了额外的转移操作,但在某些情况下,比如当内存限制或特定环境限制只允许使用栈时,它提供了一种灵活的解决方案。通过理解这种转换,我们可以更好地...
### 使用两个栈实现队列(Java代码) #### 一、问题背景 在计算机科学中,队列是一种重要的数据结构,遵循先进先出(FIFO)原则。而在实际应用中,有时候我们可能没有现成的队列类或者接口可用,这时就需要通过...
2. **Stack类**:Java标准库中的`java.util.Stack`类也是实现栈的一个选项。它是`Vector`类的子类,因此具有线程安全的特性。但通常,由于其性能较低,推荐使用`ArrayDeque`。使用`Stack`类的示例如下: ```java ...
剑指Offer中的第9题提出了一个用两个栈实现队列的问题。这个问题的核心在于利用栈的特性模拟队列的行为。通常情况下,栈不支持在中间位置进行删除操作,但可以通过以下步骤实现队列功能: 1. 添加元素到队列尾部...