数组的 头部 方法 插入或者添加 一项 的话,会对后面项产生影响,因为 数组是一个连续的存储结构,这样操作的话,数据量 较大的时候,会影响性能
所以使用 链表这种数据结构,可以很方便的操作头和尾
<!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>
尾插法