/** * 跳表 * @filename: Skiplist.ts * @author: Mr Prince * @date: 2022-05-28 21:39:49 */ declare enum INSERT_MODE { UNIQUE = 0, MULTIPLE = 1 } /** * 跳表 */ declare class SkipList { private compare; /** * 插入模式 * 如果不能重复插入,insert 可能返回false */ static readonly INSERT_MODE: typeof INSERT_MODE; /** * 提升的概率 */ private static readonly probability; /** * 最高等级 */ private static readonly MAX_LEVEL; /** * 当前最高等级 * 优化的一种手段把,可以少一点点遍历 */ private currentLevel; /** * 头结点 不存放数据 */ private head; /** * 节点数 */ private size; constructor(compare: (a: T, b: T) => number); get length(): number; /** * 判断是否有完全相同的元素 */ search(target: T): boolean; /** * 满足 compareFn(value) >= 0 的第一个元素 */ lowerBound(compareFn: (value: T) => number): T; upperBound(compareFn: (value: T) => number): T; /** * 获取第一个元素 */ getFirst(): T; /** * 插入模式 * 允许重复插入的情况下 * 多次插入相等的值, 最后插入的节点会在最前面 * @returns 是否成功插入 */ insert(value: T, insertMode?: INSERT_MODE): boolean; /** * 删除指定值 */ remove(value: T): boolean; /** * 移除并返回移除的值 */ removeAndReturn(value: T): T | null; forEach(callback: (value: T, index: number, context: SkipList) => void): void; toArray(): T[]; isEmpty(): boolean; isNotEmpty(): boolean; [Symbol.iterator](): { next: () => { value: T; done: boolean; }; }; /** * 移除过后,删除孤立节点层 */ private reduceLevel; /** * 随机节点高度 */ private randomLevel; /** * 删除操作的具体实现 */ private removeImpl; } export default SkipList;