【发布时间】:2012-09-10 18:08:47
【问题描述】:
这是我的代码:
function sort(stack){
if(stack.length > 0){
var x = stack.pop();
sort(stack);
insert(x,stack);
}
}
function insert(x,stack){
if(stack.length>0){
var tops = topr(stack);
if(tops>x){
stack.pop();
insert(x,stack);
stack.push(tops);
}else{
stack.push(x);
}
}
}
function topr(stack){
var t = stack.pop();
stack.push(t);
return t;
}
var stack = [1,3,2];
sort(stack);
console.log(stack);
我必须在不使用数组(递归)的情况下构建它。 但它在控制台中返回 void/aka 什么都没有。
编辑: 完整的工作解决方案:
function sort(stack) {
if(stack.length > 0) {
var x = stack.pop();
sort(stack);
insert(x,stack);
}
return stack;
}
function insert(x,stack){
if(stack.length>0){
var tops = topr(stack);
if(tops>x){
stack.pop();
insert(x,stack);
stack.push(tops);
}else{
stack.push(x);
}
}else{
stack.push(x);
}
}
function topr(stack){
var t = stack.pop();
stack.push(t);
return t;
}
var stack = [1,3,2];
stack = sort(stack);
console.log(stack);
【问题讨论】:
-
WTF 你要为堆栈排序吗? JS 中堆栈和数组之间的唯一区别是 LIFOness。你把它扔掉,你还不如只使用一个数组。
-
@cHao,我这样做不是为了生产,而是为了我对堆栈的理解。
-
那么理解这一点:堆栈不需要,也不应该拥有,排序功能。它将堆栈的堆叠性吹到了地狱。他们应该能够做的唯一一件事就是推送、弹出并可能偷看顶部元素。哦,也许可以算一下其中有多少元素。
-
@cHao 没错。 )想用这个来更新我的答案,但我想你的评论在这里很不错。虽然有 优先级队列 这样的东西,但“优先级堆栈”是没有意义的。
标签: javascript sorting stack