用JS来实现一个栈

分别使用线性表和链表两种形式

//使用链表实现
function linkedStack(){
    var top;
    var length = 0;
    function Node(element){
        this.element = element;
        this.next = null;
    }
    this.push = function(element){
        var node = new Node(element);
        if(top){
            node.next = top;
            top = node;
            length++;
            return true;
        }else{
            top = node;
            length++;
            return true;
        }
    }
    this.pop = function(){
        if(top){
            var current;
            current = top;
            top = top.next;
            current.next = null;
            length--;
            return current;
        }else{
            return "stack empty"
        }
    }
    this.top = function(){
        return top;
    }
    this.length = function(){
        return length;
    }
    this.toString = function(){
        var string = '';
        var current = top;
        while(current){
            string += current.element;
            current = current.next;
        }
        return string;
    }
    this.clear = function(){
        top = null;
        length = 0;
        return true;
    }
}



//使用线性表实现
function Stack(){
    var stack = [];
    this.push = element =>stack.push(element);
    this.pop = ()=>stack.pop();
    this.length = ()=>stack.length;
    this.top = ()=>{
        if(stack.length){
            return stack[stack.length-1];
        }
        return "stack empty"
    }
    this.clear = ()=>{
        stack.length = 0;
        return true;
    }
    this.toString = ()=>{
        if(stack.length){
            stack.reverse();
            return stack.join(" "); 
        }
        return "stack empty"
        
    }
    
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用两个实现浏览器的前进和后退功能。我们假设当前正在浏览的网页为 A,然后我们访问了 B 和 C 两个网页,此时两个的情况如下: 后退:[C, B, A] 前进:[] 当我们点击后退按钮时,我们从后退中弹出顶元素 C,并将其压入前进中,此时两个的情况如下: 后退:[B, A] 前进:[C] 当我们再次点击后退按钮时,我们从后退中弹出顶元素 B,并将其压入前进中,此时两个的情况如下: 后退:[A] 前进:[C, B] 当我们点击前进按钮时,我们从前进中弹出顶元素 C,并将其压入后退中,此时两个的情况如下: 后退:[C, A] 前进:[B] 当我们再次点击前进按钮时,我们从前进中弹出顶元素 B,并将其压入后退中,此时两个的情况如下: 后退:[B, C, A] 前进:[] 这样就可以用两个实现浏览器的前进和后退功能了。以下是一个简单的 JavaScript 实现: ```javascript var backStack = []; // 后退 var forwardStack = []; // 前进 function goTo(url) { backStack.push(url); forwardStack = []; // 跳转到 url } function back() { if (backStack.length > 1) { var currentUrl = backStack.pop(); forwardStack.push(currentUrl); // 跳转到上一个 url } } function forward() { if (forwardStack.length > 0) { var currentUrl = forwardStack.pop(); backStack.push(currentUrl); // 跳转到下一个 url } } ``` 在这个实现中,我们通过 backStack 和 forwardStack 两个数组来模拟后退和前进。goTo 函数用来跳转到一个新的 url,每次跳转时我们将当前的 url 压入后退中,并清空前进。back 函数用来执行后退操作,如果后退中有多于一个元素,则弹出后退顶元素并压入前进中,然后跳转到上一个 url。forward 函数用来执行前进操作,如果前进中有元素,则弹出前进顶元素并压入后退中,然后跳转到下一个 url。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值