TypeScript数据结构与算法(13)基于LinkedList实现的Map
源码如下:
import { Interface_Map } from "../Interface_Map";
class Node<K, V> {
public key: K; //键
public value: V;//值
public next: Node<K, V>;
public constructor(key: K, value: V, next: Node<K, V>) {
this.key = key;
this.value = value;
this.next = next;
}
}
/**
* Autor: Created by 李清风 on 2021-01-02.
* Desc: 基于链表的映射实现,字典,dict,关键词:键值对
*/
export class DataStruct_LinkedList_Map<K, V> implements Interface_Map<K, V> {
private dummyHead: Node<K, V>;
private size: number;
public constructor() {
this.dummyHead = new Node<K, V>(null, null, null);
this.size = 0;
}
//不允许重复
add(key: K, value: V): void {
let node = this.getNode(key);
if (node == null) {
this.dummyHead.next = new Node(key, value, this.dummyHead.next);
} else {
//用户想更新
node.value = value;
}
}
//在map中删除某个元素
remove(k: K): V {
let prev = this.dummyHead;
while (prev.next != null) {
if (prev.next.key == k) { //可以自己封装一个equals
break;
}
prev = prev.next;
}
if (prev.next != null) {
let delNode = prev.next;
prev.next = delNode.next;
delNode.next = null;//与链表脱离
return delNode.value;
}
return null; //未找到key对应元素
}
contains(k: K): boolean {
return this.getNode(k) != null;
}
//查找某个节点
private getNode(k: K) {
let cur = this.dummyHead.next;
while (cur != null) {
if (cur.key == k) {
return cur;
}
cur = cur.next;
}
return null;
}
//从map中get指定元素
get(k: K): V {
let node = this.getNode(k);
return node == null ? null : node.value;
}
//更新指定值
set(k: K, v: V): void {
let node = this.getNode(k);
if (node == null) {
throw new Error("Doesn't exist!");
}
node.value = v;
}
getSize(): number {
return this.size;
}
isEmpty(): boolean {
return this.size == 0;
}
}

浙公网安备 33010602011771号