/** * 小顶堆 * compare返回值取个相反数就是大顶堆 * @filename: Heap.ts * @author: Mr Prince * @date: 2021-07-13 09:02:21 */ /// /** * @public */ declare class Heap { private heap; private compare; static readonly CompareInvalidError: { new (message?: string): { name: string; message: string; stack?: string | undefined; }; captureStackTrace(targetObject: object, constructorOpt?: Function | undefined): void; prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined; stackTraceLimit: number; }; static readonly HeapEmptyError: { new (message?: string): { name: string; message: string; stack?: string | undefined; }; captureStackTrace(targetObject: object, constructorOpt?: Function | undefined): void; prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined; stackTraceLimit: number; }; /** * @param compare - 比较函数 * @param arr - 初始数据,需要注意不要再继续使用这个数组了 */ constructor(compare: (a: T, b: T) => number, arr?: T[]); /** * 根据初始数据建堆 */ private buildHeap; /** * 下沉操作调整堆 * 类似数组移位,把要移动的数据移出来,找到第一个不满足要求的数据的位置,填入 */ private shiftDown; /** * 上浮操作调整堆 */ private shiftUp; /** * 获取堆大小 */ get size(): number; /** * 是否为空 */ isEmpty(): boolean; /** * 是否非空 * @description 使用过程中经常会用到非空判断,就给它加上了 */ isNotEmpty(): boolean; /** * 获取顶点值 */ peak(): T; /** * 获取堆顶元素并移除 */ pool(): T; /** * 插入节点 */ insert(value: T): void; /** * 移除顶点 */ remove(): T; /** * 替换顶点 * @description 限制堆大小的情况下,经常会有一下两种情况 * 1. 先remove后insert * 2. 先insert后remove的操作 * 其实完全可以通过一步操作来实现 * 所以添加了这样一个 replaceTop 方法 */ replaceTop(value: T): void; /** * 清空堆 */ clear(): void; /** * 获取当前heap内容 */ toArray(): T[]; } export default Heap;