一个栈实现另一个栈排序

题目

一个栈中元素为整形,现在想将这个栈从栈顶到栈底自大到小排序,允许申请一个栈。除此之外无其他数据结构。允许申请新变量,如何完成排序?

实现思路

1.设置需要排序的栈为stack,辅助的栈为help,从stack弹出的当前值为curt
2.将stack依次弹出,判断弹出的值curt与help的栈顶元素大小关系,如果curt较小,就将help的栈顶元素弹出并压入到stack中,反之,将curt压入到help中,继续循环,直到stack的长度0,且curt也成功压入到help,最后返回help为结果。

代码实现

//需要排序的栈 stack
//辅助排序的栈 help
//一个人变量存储当前的值 curt
function anthorStackSort(stack){
let help = [];
let curt = stack.pop()
while(stack.length>0||curt){
   if(help.length == 0||curt>=help[help.length-1]){
       help.push(curt)
       curt= stack.pop();
   }else{
       stack.push(help.pop())
   }
}
return help
}

简单测试

function arraySort(stack){
    stack.sort(function (x,y) {
        return x-y;
    });
    return stack
}
var {Logarithm} = require('./Logarithm')
Logarithm(5,arraySort,anthorStackSort,false)

代码下载地址

感谢

如果感觉对您的学习工作有帮助,请将它分享给需要的人,或者点赞鼓励一下,感谢支持
你可以加个收藏,我还会不断更新。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值