用一个栈实现另一个栈的排序

要求:使用一个辅助栈实现栈的排序

思路:

要排序的栈为stack,辅助栈为help

stack弹出一个元素cur,判断cur与help栈顶元素的大小,若小于或等于,则直接压入help,

否则,将help中小于cur的元素一次压入stack,之后将cur压入help,

重复上面的过程,直到stack为空。

具体代码如下:

public class pro5_sortStackByStack {
    public static void sortStackByStack(Stack<Integer> stack) {
        Stack<Integer> help = new Stack<Integer>() ;
        while(!stack.isEmpty()) {
            int cur = stack.pop() ;
            while(!help.isEmpty() && help.peek() < cur) {
                stack.push(help.pop()) ;
            }
            help.push(cur) ;
        }
        while(!help.isEmpty()) {
            stack.push(help.pop()) ;
        }
    }
}
时间: 2024-11-13 09:55:46

用一个栈实现另一个栈的排序的相关文章

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

import java.util.Stack; /**  * 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.  * @author user  *  *思路:队列是先入先出,栈是先入后出,可以将数据压入第一个栈后,在弹出来压入第二个栈,弹得时候直接从第二个栈弹出,弹出后又将  *第二个栈中的所有数据弹出重新压入的一个栈  */ public class Solution {     Stack<Integer> stack1 = new Stack<

设计一个有getMin功能的栈

最近在看左程云老师的程序员代码面试指南,里面都是一些很经典的算法,贴出来大家一起学习. 题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 要求:1.pop.push.getMin操作的时间复杂度都是O(1).2.设计的栈类型可以输用现成的栈结构. 方案1: import java.util.Stack; public class GetMinStack1 { public static class MyStack1 { private Stack<Integer

用两个栈模拟实现一个队列

题目:如何用两个栈模拟实现一个队列?  如果这两个堆栈的容量分别是m和n(m>n),你的方法能保证的队列容量是多少?(这里讨论的是顺序栈,如果是链式栈的话完全没有必要考虑空间) 分析:栈的特点是“后进先出(LIFO)”,而队列的特点是“先进先出(FIFO)”.用两个栈模拟实现一个队列的基本思路是:用一个栈作为存储空间,另一个栈作为输出缓冲区,把元素按顺序压入两栈(模拟的队列),并按此顺序出队并输出即可. 如下图,用容量为m的栈作为存储空间,容量为n的栈作为输出缓冲区,一开始先将n个元素压入(pu

转:《链接、装载与库》里的一个错误:关于调用栈

<链接.装载与库>里的一个错误:关于调用栈 按照原文中描述做了一个PPT: 每次执行push指令时,esp都会减4(因为栈是向低地址增长的),每次pop时esp都会加4. 指令:push a 指令:push b 指令: 1.把main方法当前指令的下一条指定地址(即return address))push到栈中. 2.使用call指令调用目标函数体. 指令:将ebp的当前值push到栈中,即saved ebp. 指令:将esp的值赋给ebp,则意味着进入了foo方法的调用栈. 指令:push

数据结构——栈——寻找下一个较大元素

题目描述 给出一个数组,向右寻找每一个元素的下一个较大的元素,没有更大的则为-1 举例 {4,6,1,3,2,5} 则求得的答案应为 {6,-1,3,5,5,-1} 题目分析 首先对于这样的题目,我们总是先想到最简单的,那么就是枚举,每次循环一个元素,不停的向右找就可以了.时间复杂度应该是n^2 但是这样肯定是不够用的. 然后我们考虑,这道题我们实际上遇到的问题是什么? 其实简单的说,这道题的意思是,在变化的数组中找到下一个较大的值. 难点在于,数组元素的变化,以及不是找最大值,而是找下一个较大

算法总结之 用一个栈实现另一个栈的排序

用一个栈实现另一个栈的排序 一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序.只允许申请一个栈.除此之外可以申请新的变量,但不能申请额外数据结构 思路: 将要排序的栈记为 stack, 申请的数组栈记为help. stack上执行pop操作, 弹出的元素记为cur 如果cur <= help.peek()   则将cur直接压入help 如果 cur>help.peek()  将help元素逐一弹出,最后将help中的所有元素弹出逐一压入stack   直到cur小于 hel

设计一个带有getmin功能的栈,保证时间复杂度在O(1)

2017-06-22  20:56:10 需要得到最小值,最简单的思路就是遍历一遍求出最小值.但是这样的时间复杂度会是O(n),不满足O(1)的要求.于是想到在建立一个栈来保存最小值. 具体操作是建立两个栈,一个存放数据,一个存放最小值. push:首先将数据压入数据栈,若最小值栈为空,则将之压入最小值栈,若最小值栈非空,则需要比较它和最小值栈的顶部数据,若小于等于,则将之压入.这里用到的思想就是,如果当前压入的数据比最小值大,那么目前数据栈的最小值就是最小值栈的栈顶元素,反之则需要将之压入:

9.3栈和队列(七)——用两个栈来实现一个队列

/** * 功能:用两个栈来实现一个队列. */ import java.util.*; /** * 思路:需要修改peek()和pop(),以相反顺序执行操作.可以利用第二个栈来反转元素的次序. * stackNewest顶端为最新元素,stackOldest顶端为最旧元素,利用两个栈的元素的转移来实现. * */ public class MyQuene1 { Stack stackNewest ,stackOldest ; public MyQuene1(){ stackNewest= n

一、实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作

请指教交流! 1 package com.it.hxs.c01; 2 3 import java.util.Stack; 4 5 /* 6 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作 7 */ 8 public class GetMinStack { 9 10 public static void main(String args[]) { 11 GetMinStack demoStack = new GetMinStack(); 12 demoStack.pus

给定入栈序列,判断一个串是否为出栈序列

剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) { if (Spush.length <= 0 || Spop.length <= 0 || Spush.length != Spop.length) return false; int len = Spush.length; Stack<Integer> s = new Stack<I