yocto-queue 的使用

283 阅读1分钟

数组的 头部 方法 插入或者添加 一项 的话,会对后面项产生影响,因为 数组是一个连续的存储结构,这样操作的话,数据量 较大的时候,会影响性能

所以使用 链表这种数据结构,可以很方便的操作头和尾

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      class ListNode {
        next;
        value;
        constructor(value) {
          this.value = value;
        }
      }

      class Queue {
        //  head and tail is empty at begin
        // # is Symbol for  private key
        #head;
        #tail;
        #size;
        constructor() {
          this.#size = 0;
        }
        //
        dequeue() {
          let current = this.#head.next;
          if (!current) return;
          this.#head = this.#head.next;
          this.#size--;
          return current.value;
        }
        enqueue(value) {
          let node = new ListNode(value);
          if (!this.#head) {
            this.#head = this.#tail = node;
          } else {
            // 尾插法
            this.#tail.next = node;
            this.#tail = node;
          }
          this.#size++;
        }
        get size() {
          return this.#size;
        }
        *[Symbol.iterator]() {
          let current = this.#head;

          while (current) {
            yield current.value;
            current = current.next;
          }
        }
        clear() {
          this.#head = this.#tail = null;
          this.#size = 0;
        }
      }

      const queue = new Queue(); //此处打断点
      queue.enqueue("⛵");
      queue.enqueue("🌊");
      //push in queue array

      console.log(queue.dequeue());

      console.log(queue.size);
      for (let q of queue) {
        console.log(q);
      }
      queue.clear();
    </script>
  </body>
</html>

尾插法

微信图片_20220509152422.png