数据结构的队列

129 阅读2分钟

队列 Queue 受限的线性表 特点FIFO 先进先出

队列只允许在表的后端进行插入操作,在表的前端进行删除操作(左边为前端,右边为后端)

栈和队列添加删除的区别:
    栈添加和删除都是只能操作顶端数据,即最上方数据
    队列插入数据则是在队列的后端(最右边)插入数据
    队列删除数据则是在队列的前端(最左边)删除前端数据



function Queue(element) {
    this.item = []
    // 添加参数
    Queue.prototype.enqueue = function (element) {
      this.item.push(element)
    }
    // 删除第一个元素
    Queue.prototype.dequeue = function () {
      //  return this.item.pop()   pop是删除队列尾部的元素
       return this.item.shift()
    }
    // 显示第一个元素
    Queue.prototype.front = function () {
       return this.item[0]
    }
    // 判断队列是否有参数
    Queue.prototype.isEmpty = function () {
       return this.item.length == 0
    }
    // 队列的长度
    Queue.prototype.size = function () {
       return this.item.length
    }
    // 将队列内的数据用字符串显示出来
    Queue.prototype.toString = function () {
        var result = ''
        for(var i = 0; i < this.item.length; i++){
          result += this.item[i] + ' '
        }
        return result
    }
}

    var queue = new Queue()

    queue.enqueue('100')
    queue.enqueue('222')
    queue.enqueue('103330')
    queue.enqueue('333')
    queue.enqueue('555')
    queue.enqueue('777')
    alert(queue.dequeue())
    alert(queue.front())
    alert(queue.isEmpty())
    alert(queue.size())
    alert(queue.toString())

队列的击鼓传花面试题

function passGame(nameList, num) {
  // 创建一个队列结构
  var queue = new Queue
  // 将所有人依次放入队列中
  for(var i = 0; i < nameList.length; i++ ){
        queue.enqueue(nameList[i])
  }
  // 开始数数字
  while (queue.size() > 1) {
    // 不是num的时候,重新加入队列的末尾
    // 是num这个数字的时候,删除掉从队列中
    // num数字之前的人重新放入到末尾
    for(var i = 0; i < num - 1 ; i++ ){ 
      queue.enqueue(queue.dequeue()) 
    }
      // num对应的这个直接从队列中删除
    queue.dequeue()
  }
  // 获取剩下的那个人
  alert(queue.size())
  
  var lastOne = queue.front()
  // console.log(queue.front());

  alert('最后的王者:' + lastOne)
  return nameList.indexOf(lastOne)
}

name = ['buluohe1', 'buluohe13', 'buluohe144', 'buluohe155', 'buluohe1222']

alert(passGame(name, 3))

优先级队列 每一个元素不再是一个数据,而且包含数据的优先级 在添加方式中,根据优先级放入正确的位置