UNPKG

1.06 kBJavaScriptView Raw
1
2export class QueueNode {
3 constructor () {
4 /**
5 * @type {QueueNode|null}
6 */
7 this.next = null
8 }
9}
10
11export class Queue {
12 constructor () {
13 /**
14 * @type {QueueNode | null}
15 */
16 this.start = null
17 /**
18 * @type {QueueNode | null}
19 */
20 this.end = null
21 }
22}
23
24/**
25 * @note The queue implementation is experimental and unfinished.
26 * Don't use this in production yet.
27 *
28 * @return {Queue}
29 */
30export const create = () => new Queue()
31
32/**
33 * @param {Queue} queue
34 */
35export const isEmpty = queue => queue.start === null
36
37/**
38 * @param {Queue} queue
39 * @param {QueueNode} n
40 */
41export const enqueue = (queue, n) => {
42 if (queue.end !== null) {
43 queue.end.next = n
44 queue.end = n
45 } else {
46 queue.end = n
47 queue.start = n
48 }
49}
50
51/**
52 * @param {Queue} queue
53 * @return {QueueNode | null}
54 */
55export const dequeue = queue => {
56 const n = queue.start
57 if (n !== null) {
58 // @ts-ignore
59 queue.start = n.next
60 if (queue.start === null) {
61 queue.end = null
62 }
63 return n
64 }
65 return null
66}