数据结构-队列结构

封装队列

用数组进行封装

队列常见操作:
1、enqueue(element):
向队列尾部添加一个或多个新的项
2、dequeue():
移除队列第一项,并返回被移除的元素
3、front():
返回队列第一个元素,队列不做任何变动
4、isEmpty():
如果队列不包含任何元素,返回true,否则返回false
5、size():
返回队列包含的元素个数,与数组的length属性类似
6、toString():
将队列中的内容转成字符串形式

 // 封装队列类
    function Queue() {

        this.items = [];

        // 1、enter queue方法
        Queue.prototype.enqueue = function (element) {
            this.items.push(element);
        }

        // 2、delete queue方法
         Queue.prototype.dequeue = function () {
            return this.items.shift();
        }

        //3、查看队列中的第一个元素
         Queue.prototype.front = function () {
            return this.items[0];
        }

        // 4、查看队列是否为空
         Queue.prototype.isEmpty = function () {
            return this.items.length == 0;
        }

        // 5、查看队列中元素的个数
         Queue.prototype.size = function () {
            return this.items.length;
        } 
        // 6、toString方法
        Queue.prototype.toString = function(){
            var resultString = '';
            for(var i = 0; i < this.items.length; i++){
                resultString += this.items[i] + ' '
            }
            return resultString
        }
    }

    // 创建队列对象
    var queue = new Queue();

    // 在队列中添加元素
    queue.enqueue(1);
    queue.enqueue(2);
    queue.enqueue(3);
    alert(queue);

    // 查看一下队列前端元素
    alert(queue.front())

    // 查看队列是否为空和元素个数
    alert(queue.isEmpty())
    alert(queue.size())

    // 从队列中删除元素
    alert(queue.dequeue())
    alert(queue.dequeue())
    alert(queue.dequeue())

队列应用:
几个人围成一圈数数,数到某个数字的人自动淘汰,
最后剩下的人获胜,请问最后剩下的人原来所在的位置。

 function passGame(nameList,num){
     // 1、创建一个队列结构
     var queue = new Queue();

     // 2、将所有人依次加入到队列中
     for(var i = 0; i < nameList.length; i++){
         queue.enqueue(nameList[i]);
     }
     
     // 3、开始数数字
     while(queue.size() > 1){
         // 3.1不是num的时候,重新加入到队列末尾
        for(var i = 0; i < num - 1; i++){
         queue.enqueue(queue.dequeue());
        }
        // 3.2 num对应的这个人,直接从队列中删除
        queue.dequeue();
     }

     //4、获取剩下的那个人
     var endName = queue.front();
     alert('最终剩下的人:' + endName);

     return nameList.indexOf(endName);
}  

// 测试
names = ['赵', '钱', '孙', '李', '周'];
alert(passGame(names,3));

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值