数据结构-javascript实现【队列】

队列是遵循先进先出(FIFO) 原则的一组有序的项,队列在尾部添加新元素,并从首部移除元素。

1.队列可用的的方法

enqueque(elements) : 向队列尾部添加一个或多个新的元素

dequeque(): 移除队列的第一个元素,并返回被移除的元素

front(): 返回队列中第一个元素,最先被添加,也是最先被移除的元素

isEmpty(): 检测队列是否为空

size(): 返回队列中包含的元素个数

2. 队列的实现

class Queue {
  constructor(){
    this.items = [];
  }

  enqueue(element) {
    this.items.push(element);
  }

  dequeue(){
    return this.items.shift();
  }

  front() {
    return this.items[0];
  }

  isEmpty() {
    return this.items.length === 0;
  }

  clear() {
    this.items = [];
  }
  
  size() {
    return this.items.length;
  };

  print() {
    console.log(this.items.toString());
  }
}

const queue = new Queue();
console.log(queue.isEmpty()); // true
queue.enqueue('John');
queue.enqueue('Jack');
console.log(queue.size()); // 2
queue.dequeue();
queue.print(); // 'Jack'

3. 优先队列,基于优先级进行队列的添加和移除。

  实现方案有两种:

  第一种:设置优先级,然后在正确的位置添加元素。下面的实现为最小优先队列,优先值越小,优先级别越高。

function priorityQueue()
{
  let items = [];

  const enqueue = (element, priority) =>{
    const queueElement = {element, priority};
    if(isEmpty()) {
      items.push(queueElement);
    }
    else {
      let  added = false;
      for (let i = 0; i < items.length; i++){
        if(queueElement.priority < items[i].priority){
          items.splice(i, 0, queueElement);
          added = true;
          break;
        }
      }
      if(!added){
        items.push(queueElement);
      }
    }
  }

  const dequeue = () => {
    return items.shift();
  };

  const front = () => {
    return items[0];
  };

  const isEmpty = () => {
    return items.length === 0;
  };

  const clear = () =>{
    items = [];
  };
  
  const size = () => {
    return items.length;
  };

  const print = () => {
    console.log(items.map((item)=> item.element).toString());
  };
  return {
    enqueue,
    dequeue,
    front,
    isEmpty,
    clear,
    size,
    print
  };

}

const priorityQueueObj = priorityQueue();
priorityQueueObj.enqueue('John',2);
priorityQueueObj.enqueue('Jack',1);
priorityQueueObj.enqueue('Camila',1);
priorityQueueObj.print();

第二种: 入列添加元素,然后按照优先级移除

 

posted @ 2021-11-22 14:21  箫笛  阅读(108)  评论(0)    收藏  举报