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;
}