最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 栈结构、队列结构

    正文概述 掘金(Joe_cat)   2020-12-08   332

    栈结构

    元素进栈操作

    1. 有一个执行环境栈,五个上下文。进栈时放在顶端,并且是顶端进栈,顶端出栈。
    2. 首先1进栈

    栈结构、队列结构 3. 然后2进栈 栈结构、队列结构 4. 然后3进栈 栈结构、队列结构 5. 现在进行出栈操作:此时只能 3 先出栈,因为只有这样才能让21 出栈 栈结构、队列结构

    栈结构、队列结构 6. 此时 4 进栈,出栈,5 进栈 栈结构、队列结构 栈结构、队列结构 栈结构、队列结构

    1. 此时栈内还有执行上下文15 ,此时栈内会根据执行上下文的活跃度在站内进行调整, 如果接下来要执行的是1,则栈内发生变化为

    栈结构、队列结构

    一. 自己封装栈结构

    创建栈结构就相当与创建栈结构的实例

       class Stack {
           container = [];
       
           // 进栈
           enter(value){
               this.container.unshift(value)
           }
           
           // 出栈
           leave(){
               return this.container.shift()
           }
           
           // 长度
           size(){
               return this.container.length
           }
           
           value(){
               // 克隆为了外部的操作修改内部的container
               return this.container.slice(0)
           }
       }
       
    

    二. 趁热打铁~ 面试题

    1. 内置方法实现
      let num = 19870;
      num.toString(2);
    
    1. 自己实现
    Number.prototype.deci = function deci(){
        // this => num
        // sk = new Stack 创建栈结构的实例
        let deciNum = this, sk = new Stack;
        if(deciNum === 0) return '0'
        while(deciNum > 0){
            let n = Math.floor(deciNum /2),
            m = deciNum % 2;
            sk.enter(m);
            deciNum = n;
        }
        return sk.value().join('')
    }
    let num = 19870;
    console.log(num.deci())
    

    队列结构

    1. 进入队列:首先1进入队列

    栈结构、队列结构 2. 然后2进入队列 栈结构、队列结构 3. 然后3进入队列 栈结构、队列结构 4. 开始出队列:首先1出队列 栈结构、队列结构

    1. 首先按照12345的顺序进入队列,1开始进入队列

    栈结构、队列结构 2. 然后2开始进入队列,此时2会和1进行优先级比较,1的优先级大于2,所以: 栈结构、队列结构 3. 然后3开始进入队列,此时发现3的优先级要高于1和2,所以3要排在队列的头部 栈结构、队列结构 4. 然后4开始进入队列,此时4和1、2比较发现优先级高于1和2,再和3进行比较,发现优先级与3相同,根据3和4进入队列的顺序,所以: 栈结构、队列结构

    实现队列结构

    class Queue {
        container = [];
        // element 元素  priority 优先级
        enter(element, priority = 0){
            let obj = {
                element,
                priority
            };
            // 如果进入队列的元素的优先级为0
            if(priority === 0) {
                // 添加到队列的队尾 
                this.container.push(obj);
                return;
            }
            
            // 用于判断某个元素是否进行处理过
            let flag = false;
            for(let i = this.container.length - 1; i>=0; i--){
                let item = this.container[i];
                if(item.priority >= priority){
                    this.container.splice(i - 1, 0, obj);
                    flag = true;
                    break;
                }
            }
            !flag ? this.container.push(obj) : null;
        }
        leave(){
            rerrun this.container.shift();
        }
        size(){
            return this.container.length;
        }
        value(){
            return this.container.slice(0)
        }
    }
    
    
    // 有8个人进行击鼓传花游戏,每个人顺序标号从1到8,传到第五个人的时候,这个人退出该游戏。
    
    function game(n, m){
        // 创建队列结构的实例
        let qe = new Queue;
        for(let i = 0; i< n; i++){
            qe.enter(i + 1);
        }
        
        while(qe.size() > 1){
            for(let i = 0; i< m - 1; i++){
                qe.enter(qe.leave())
            }
            qe.leave();
        }
        
        return  qe.value().toString();
    }
    console.log(8, 5)
    

    起源地下载网 » 栈结构、队列结构

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元