diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2018-08-14 07:51:45 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-08-14 07:51:45 +0900 |
| commit | 0702d0974b7608b4e59c3f2af97bc9842e6bd086 (patch) | |
| tree | 27d3a6ad4bbfdfa69fdc8eab072b4ddfe46df3a2 /src/misc | |
| parent | Merge #2182 (diff) | |
| parent | Resolve #2176 (diff) | |
| download | sharkey-0702d0974b7608b4e59c3f2af97bc9842e6bd086.tar.gz sharkey-0702d0974b7608b4e59c3f2af97bc9842e6bd086.tar.bz2 sharkey-0702d0974b7608b4e59c3f2af97bc9842e6bd086.zip | |
Merge pull request #2199 from syuilo/patch-2176
Resolve #2176
Diffstat (limited to 'src/misc')
| -rw-r--r-- | src/misc/queue.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/misc/queue.ts b/src/misc/queue.ts new file mode 100644 index 0000000000..410878ba8b --- /dev/null +++ b/src/misc/queue.ts @@ -0,0 +1,33 @@ +type Node<T> = { value: T, next: Node<T> }; + +export default class Queue<T> { + private top: Node<T> = null; + private rear: Node<T> = null; + public length: number = 0; + + public push(value: T): void { + const node: Node<T> = { value, next: null }; + if (this.top === null) { + this.top = node; + this.rear = node; + } else { + this.rear.next = node; + this.rear = node; + } + this.length++; + } + + public pop(): void { + this.top = this.top.next; + if (this.top == null) this.rear = null; + this.length--; + } + + public toArray(): T[] { + const arr: T[] = Array<T>(this.length); + for (let node = this.top, i = 0; node !== null; node = node.next, i++) { + arr[i] = node.value; + } + return arr; + } +} |