使用TS实现各种队列
简单队列
interface QueueType<T> {
deQueue(): T | undefined
enQueue( element: T ): void
front(): T | undefined
size(): number
isEmpty(): boolean
clear(): void
}
interface itemsType<T> {
[key: number]: T
}
export default class Queue<T> implements QueueType<T> {
private items: itemsType<T> = {}
private frontIndex: number = 0
private backIndex: number = 0
deQueue(): T | undefined {
if ( this.isEmpty() ) {
throw new Error( '队列已空,禁止出队' )
}
let res = this.items[this.frontIndex]
delete this.items[this.frontIndex++]
return res
}
enQueue( data: T ): void {
this.items[this.backIndex++] = data
}
front(): T | undefined {
return this.items[this.frontIndex]
}
size(): number {
return this.backIndex - this.frontIndex
}
isEmpty(): boolean {
return this.backIndex - this.frontIndex === 0
}
clear(): void {
this.items = {}
this.frontIndex = 0
this.backIndex = 0
}
}
双端队列
interface DequeType<T> {
addFront( element: T ): void
removeFront(): T | undefined
addBack( element: T ): void
removeBack(): T | undefined
size(): number
isEmpty(): boolean
clear(): void
}
interface itemsType<T> {
[key: number]: T
}
export default class Deque<T> implements DequeType<T> {
private items: itemsType<T> = {}
private frontIndex: number = 0
private backIndex: number = 0
addFront( element: T ): void {
this.items[--this.frontIndex] = element
}
removeFront(): T | undefined {
if ( this.isEmpty() ) {
throw new Error( '队列已空,禁止出队' )
}
const res = this.items[this.frontIndex]
delete this.items[this.frontIndex++]
return res
}
addBack( element: T ): void {
this.items[this.backIndex++] = element
}
removeBack(): T | undefined {
if ( this.isEmpty() ) {
throw new Error( '队列已空,禁止出队' )
}
const res = this.items[this.backIndex - 1]
delete this.items[--this.backIndex]
return res
}
size(): number {
return this.backIndex - this.frontIndex
}
isEmpty(): boolean {
return this.backIndex - this.frontIndex === 0
}
clear(): void {
this.items = {}
this.frontIndex = 0
this.backIndex = 0
}
}