C 对堆栈排序

C 对堆栈排序,c,sorting,stack,C,Sorting,Stack,我知道如何对数组进行排序,但我以前从未对堆栈进行过排序。 所以请帮忙。如何使用快速排序算法对堆栈进行排序? 谢谢。对堆栈排序是什么意思?堆栈的整体概念是它是后进先出的后进先出顺序。使用堆栈的东西期望他们放在堆栈上的最新的东西会在堆栈的顶部,而较旧的东西会在其下方,按插入时的相反顺序排列,因为堆栈就是这样。如果你把这堆东西分类,你会把它打破的 我知道如何对数组进行排序,但以前从未对堆栈进行过排序 最有效的解决方案可能是将数据结构更改为允许随机访问的列表,然后对列表进行排序。也就是说,类似这样的事情

我知道如何对数组进行排序,但我以前从未对堆栈进行过排序。 所以请帮忙。如何使用快速排序算法对堆栈进行排序?
谢谢。

对堆栈排序是什么意思?堆栈的整体概念是它是后进先出的后进先出顺序。使用堆栈的东西期望他们放在堆栈上的最新的东西会在堆栈的顶部,而较旧的东西会在其下方,按插入时的相反顺序排列,因为堆栈就是这样。如果你把这堆东西分类,你会把它打破的

我知道如何对数组进行排序,但以前从未对堆栈进行过排序

最有效的解决方案可能是将数据结构更改为允许随机访问的列表,然后对列表进行排序。也就是说,类似这样的事情:

将堆栈的所有元素弹出到数组中 使用您知道的算法对数组进行排序。 将所有元素推回堆栈。 如果您绝对不想使用列表,您可能会发现这个解决方案很有趣。被盗自:


你能做的是。。使用递归,递归地弹出堆栈中的元素,然后找到插入当前元素的最佳位置。如果您需要代码,请告诉我,但是排序堆栈是完全没有根据的,如前面的注释所述:

我编写此函数是为了使用On space对堆栈进行排序。这个很好用。如能及时改进,我将不胜感激。现在正在播放

StackHead sortStack(StackHead s1){

StackHead s2=createStack();
Element a,b;

while(!isEmpty(s1)){

    a=top(s1);s1=pop(s1);
    if(isEmpty(s2) || top(s2) > a){
            s2=push(a,s2);
    } else {
            while(top(s2)<=a && !isEmpty(s2)){
                    b=top(s2); s2=pop(s2);
                    s1=push(b,s1);
            }

            s2=push(a,s2);

            while( (isEmpty(s2) || top(s1) < top(s2) ) && !isEmpty(s1)) {
                    b=top(s1); s1=pop(s1);
                    s2=push(b,s2);
            }
    }//end of else

}//end of outer while

return s2;

}

为什么要对堆栈进行排序?堆栈的本质是保持后进先出顺序。排序后,它不再是一个真正的堆栈。到目前为止,您尝试了什么?你犯了什么错误?你还不明白什么?这是作业吗?@Steve,当然还是一堆。为什么不能有一个已排序的堆栈?@aioobe-堆栈按元素被自然推送和弹出的顺序排序。其他任何东西,它不是一个真正的堆栈。我想你可以说一个堆栈已经排序。。。排序的标准是元素在堆栈上的放置顺序:/我知道,但这是一种家庭作业,老师在作业中写了这个。
StackHead sortStack(StackHead s1){

StackHead s2=createStack();
Element a,b;

while(!isEmpty(s1)){

    a=top(s1);s1=pop(s1);
    if(isEmpty(s2) || top(s2) > a){
            s2=push(a,s2);
    } else {
            while(top(s2)<=a && !isEmpty(s2)){
                    b=top(s2); s2=pop(s2);
                    s1=push(b,s1);
            }

            s2=push(a,s2);

            while( (isEmpty(s2) || top(s1) < top(s2) ) && !isEmpty(s1)) {
                    b=top(s1); s1=pop(s1);
                    s2=push(b,s2);
            }
    }//end of else

}//end of outer while

return s2;

}