JS 算法与数据结构之队列

一、 什么是队列

队列是一种先进先出(FIFO,First-in-first-out)的数据结构,其数据智能在队尾插入,在队首删除。

可以将队列想象成在食堂排队的人群,排在最前面的人第一个打饭,后面来的人只能在队尾排队,直到轮到他们为止。

二、队列的操作

1、入队

使用 enqueue() 方法, 在队尾插入新元素。

2、出队

使用 dequeue() 方法, 删除队头的元素。

3、读取队头元素

使用 front() 方法,读取队首的元素。

4、读取队尾元素

使用 back() 方法,读取队尾的元素。

5、显示队列内的所有元素

使用 toString() 方法,显示队列的所有元素。

6、表示队列内是否含有元素

使用 empty() 方法,判断队列是否为空。

三、队列的实现

1、定义 Queue 类

function Queue() {
  this.dataStore = []
  this.enqueue = enqueue
  this.dequeue = dequeue
  this.front = front
  this.back = back
  this.toString = toString
  this.empty = empty
}

2、实现 enqueue 方法

function enqueue(element) {
  this.dataStore.push(element)
}

3、实现 dequeue 方法

function dequeue() {
  return this.dataStore.shift()
}

4、实现 front 方法

function front() {
  return this.dataStore[0]
}

5、实现 back 方法

function back() {
  return this.dataStore[this.dataStore.length - 1]
}

6、实现 toString 方法

function toString() {
  var retStr = ''
  for (var i = 0; i < this.dataStore.length; ++i) {
    retStr += this.dataStore[i] + '\n'
  }
  return retStr
}

7、实现 empty 方法

function empty() {
  if (this.dataStore.length == 0) {
    return true
  } else {
    return false
  }
}

8、测试 Queue 类的实现

var q = new Queue()

q.enqueue('a')
q.enqueue('b')
q.enqueue('c')

console.log(q.toString())
// "a"
// "b"
// "c"

q.dequeue()

console.log(q.toString())
// "b"
// "c"
console.log(q.front())  // "b"
console.log(q.back())   // "c"
console.log(q.empty())  // false

q.dequeue()
q.dequeue()

console.log(q.empty())  // true
posted @ 2021-04-15 22:25  Leophen  阅读(122)  评论(0编辑  收藏  举报