美文网首页
1.算法-栈和队列

1.算法-栈和队列

作者: 乙腾 | 来源:发表于2021-02-09 10:43 被阅读0次

题目

image.png

解题思路

这题需要将原先无序的栈进行排序,变成从栈顶到栈底大到小排序,且只允许申请一个栈,即一个变量来实现,基于此,可以创建一个哨兵栈,将原栈中的元素按照从小到大排序,然后再将之重新入栈即可。
哨兵栈的设计思路:
哨兵栈从小到大排序,那么其栈顶永远是其最小值,将哨兵栈中的栈顶和原stack中的栈顶pop比较,如果小于原栈中的pop数据,那么将哨兵栈栈顶弹出,弹出所有小于pop的元素,并将之重新压入原栈,直到哨兵栈中栈顶大于pop或者哨兵栈为空。

code

package com.pl.arithmetic.zo.stack.stack5;

import java.util.Stack;

/**
 * <p>
 *
 * @Description:
 * </p>
 * @ClassName MyStack5
 * @Author pl
 * @Date 2021/2/9
 * @Version V1.0.0
 */
public class MyStack5 {

    /**
     * 反转一个stack,可以通过维护一个哨兵stack,本题需要stack从大到小输出,那么维护一个哨兵队列从栈顶到栈底按照从小到大入栈。
     *
     * @param stack
     * @return void
     * @exception
     * @author silenter
     * @date 2021/2/9 10:12
    */
    public void sortByDescStack(Stack<Integer> stack){
        //栈顶到栈底按照从小到大排序
        Stack<Integer> flagStack = new Stack<>();
        while (!stack.empty()){
            Integer pop = stack.pop();
            //将pop和flagStack中的元素比较,如果小于pop,从flagStack中弹出,即弹出flagStack中所有小于pop的元素,直到栈顶大于pop或者哨兵栈为空。
            //既然哨兵栈是从小到大排列的,那么哨兵队列的栈顶永远都是最小的,循环直到栈顶元素大于pop
            while (!flagStack.empty()&&flagStack.peek()<pop){
                //将哨兵stack中弹出的元素重新压入stack
                stack.push(flagStack.pop());
            }
            //除了哨兵stack中为空这种情况,哨兵stack能够入栈的条件就是,栈顶大于pop
            flagStack.push(pop);
        }
        //此时哨兵中一定是从小到大排列的
        while (!flagStack.empty()){
            stack.push(flagStack.pop());
        }
    }
}

相关文章

  • 1.算法-栈和队列

    题目 解题思路 这题需要将原先无序的栈进行排序,变成从栈顶到栈底大到小排序,且只允许申请一个栈,即一个变量来实现,...

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • 算法-栈和队列算法总结

    栈和队列算法总结 1 模拟 1.1 使用栈实现队列 1.2 使用队列实现栈 2 栈的应用 2.1 栈操作 2.2 ...

  • iOS开发集锦之 2017.03.30(Swift 算法实战之路

    1. Swift 算法实战之路:栈和队列 作者: 故胤道长描述:栈和队列的基本Swift实现,以及在iOS开发中应...

  • Algorithm小白入门 -- 队列和栈

    队列和栈队列实现栈、栈实现队列单调栈单调队列运用栈去重 1. 队列实现栈、栈实现队列 队列是一种先进先出的数据结构...

  • 数据结构

    知识点:堆栈,队列,排序算法 堆栈: 一.基本概念: 栈顶,栈底,出栈(pop),入栈(push),空栈 1.堆栈...

  • 算法

    基本排序和查找算法? 如何用栈实现队列? TimSort原理?

  • 队列之-队列实现栈

    一、队列实现栈核心算法概述 之前已经描述过了用栈实现队列的功能,见栈系列之-实现队列,那么同样队列也可以用来实现栈...

  • 跟我一起学算法系列7---用两个栈实现队列

    1.题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 2.算法分析 ...

  • 排序算法

    什么是算法 书籍推荐 《数据结构与算法分析》 表、栈和队列 树 散列(hash) 优先队列(堆) 排序 定义 问题...

网友评论

      本文标题:1.算法-栈和队列

      本文链接:https://www.haomeiwen.com/subject/aswqxltx.html