4.借助一个栈空间,将一个栈进行进行排序(以整型元素为例,从栈顶到栈底依次递增排序)

Posted 曲项向天歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.借助一个栈空间,将一个栈进行进行排序(以整型元素为例,从栈顶到栈底依次递增排序)相关的知识,希望对你有一定的参考价值。

分析:借助一个栈空间(这里我们称为辅助栈),将目标栈中的元素按从栈顶到栈底依次递减的顺序添加到辅助栈中,然后将辅助栈中的元素逐个弹出并压入目标栈即可。

思路:先申请一个辅助栈helpStack,然后弹出目标栈的栈顶元素top,此时如果helpStack为空则直接将top压入helpStack,否则将helpStack的栈顶元素与top进行比较,如果top大于等于helpStack的栈顶元素大则直接将top压入helpStack,反之将helpStack栈顶元素弹出并压入目标栈中,让top与此时的helpStack栈顶元素进行比较,直至top小于helpStack的栈顶元素或者helpStack为空时,将top元素压入helpStack。以上整个操作当目标栈中元素全部弹出并压入helpStack后结束。此时helpStack栈中的元素从栈顶到栈底依次递减,然后将helpStack栈元素弹出并添加到目标栈中,直到helpStack栈为空,程序结束。

附上Java代码:

class SortingStack{
    public void ascendingSort(Stack<Integer> stack){
        Stack<Integer> helpStack=new Stack<>();//辅助栈
        while(!stack.isEmpty()){
            Integer top=stack.pop();
     /* 下面的注释部分是依思路中的文字写的,当写完后发现while循环已经包括了helpStack为空的情况,所以可以进一步优化如下*/
       //     if(helpStack.isEmpty()){
       //         helpStack.push(top);
        //    }else {
                while (!helpStack.isEmpty() && helpStack.peek() > top) {
                    stack.push(helpStack.pop());
                }
                helpStack.push(top);
       //     }
        }
        while(!helpStack.isEmpty()){
            stack.push(helpStack.pop());
        }
    }
}

 

以上是关于4.借助一个栈空间,将一个栈进行进行排序(以整型元素为例,从栈顶到栈底依次递增排序)的主要内容,如果未能解决你的问题,请参考以下文章

haha

双栈排序 2008年NOIP全国联赛提高组(二分图染色)

济南学习 Day1 T2 pm

P1155 双栈排序

什么是堆?堆排序又是什么?

noip2008 双栈排序