我是靠谱客的博主 合适灰狼,这篇文章主要介绍用一个栈实现另一个栈的排序,现在分享给大家,希望可以做个参考。

题目:一个栈中元素的类型为整型,想从栈顶到栈底按从大到小的顺序排序,只允许申请一个栈,可以申请变量,但不能使用其他数据结构。

思路:

主要要保证辅助栈中从栈顶到栈底为从小到大的顺序。

需要排序栈为stackA,辅助栈为stackB

1)stack执行pop操作,弹出元素记为cur,如果cur小于等于栈B的栈顶元素,则直接压入

2)如果cur大于栈B的栈顶元素,则将栈B中所有元素逐一弹出,逐一压入栈A中,直到cur小于等于栈B的栈顶元素,再将cur压入help中。

过程:

1)A弹出4,压入B中

2)A弹出5,5>4,则把B中的4弹出压入A中。5压入到B中

3)A弹出4,2,1,都压入B中

 4)A弹出3,3>1,3>2,1和2从B中弹出压入A中,3<4,3进B中

 5)A弹出2,1直接进栈,此时A为空,执行下面while循环,把B中元素一一弹出压入A中,即可完成排序。

    public static void sortStackByStack(Stack<Integer> stackA){
        Stack<Integer> stackB = new Stack<>();
        while (!stackA.isEmpty()) {
            //栈A弹出
            int cur = stackA.pop();
            
            while (!stackB.isEmpty() && stackB.peek() < cur){
                stackA.push(stackB.pop());
            }
            stackB.push(cur);
        }
        while (!stackB.isEmpty()) {
            stackA.push(stackB.pop());
        }
    }

最后

以上就是合适灰狼最近收集整理的关于用一个栈实现另一个栈的排序的全部内容,更多相关用一个栈实现另一个栈内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(119)

评论列表共有 0 条评论

立即
投稿
返回
顶部