创建queue.ts
/**
* 队列
*/
export default class Queue<T> {
private items: object;
private count: number;
private header: number;
constructor() {
this.items = {};
this.count = this.header = 0;
}
/**
* 入队列
* @param element
* @returns 当前队列的数量
*/
enqueue(element: T): number {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
this.items[this.count++] = element;
return this.size();
}
/**
* 出队列
* @returns 出队列的元素
*/
dequeue(): T | undefined {
if (this.isEmpty()) return undefined;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const res = this.items[this.header];
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
delete this.items[this.header];
this.header++;
return res;
}
/**
* 查看队首的元素
* @return 队首位的元素
*/
peek(): T | undefined {
if (this.isEmpty()) return undefined;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
return this.items[this.header];
}
/**
* 返回队列中元素的个数
* @returns count
*/
size(): number {
return this.count - this.header;
}
/**
* 返回队列是否为空
* @returns boolean
*/
isEmpty(): boolean {
return this.size() === 0;
}
/**
* 清空队列
*/
clear(): void {
this.items = {};
this.header = this.count = 0;
}
/**
* 返回队列元素组成的字符串
* @returns string
*/
toString(): string {
if (this.isEmpty()) return "queue is empty!";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
let res = this.items[this.header].toString();
for (let i = this.header + 1; i < this.count; i++) {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
res = `${res}, ${this.items[i].toString()}`;
}
return res;
}
}
在需要的文件当中使用
const queue = new Queue();
queue.enqueue("入队一个元素")