符号表
符号表:即键值对
- 符号表中,键具有唯一性
符号表的实现
结点类:
符号表:
package com.example.algorithm.linear;
public class SymbolTable<Key, Value> {
//记录首结点
private Node head;
//记录符号表中元素的个数
private int N;
private class Node {
//键
public Key key;
//值
public Value value;
//下一个结点
public Node next;
public Node(Key key, Value value, Node next) {
this.key = key;
this.value = value;
this.next = next;
}
}
public SymbolTable() {
this.head = new Node(null, null, null);
this.N = 0;
}
public int size() {
return N;
}
public void put(Key key, Value value) {
Node n = head;
while (n.next != null) {
n = n.next;
if (n.key.equals(key)) {
n.value = value;
return;
}
}
Node newNode = new Node(key, value, null);
Node oldFirst = head.next;
head.next = newNode;
newNode.next = oldFirst;
N++;
}
public void delete(Key key) {
Node n = head;
while (n.next != null) {
if (n.next.key.equals(key)) {
n.next = n.next.next;
N--;
return;
}
n = n.next;
}
}
public Value get(Key key) {
Node n = head;
while (n.next != null) {
n = n.next;
if (n.key.equals(key)) {
return n.value;
}
}
return null;
}
}
有序符号表
public class SymbolTable<Key extends Comparable<Key>, Value> {
public void put(Key key, Value value) {
Node curr = head.next;
Node pre = head;
while (curr != null && key.compareTo(curr.key) > 0) {
pre = curr;
curr = curr.next;
}
if (curr != null && key.compareTo(curr.key) == 0) {
curr.value = value;
return;
}
Node newNode = new Node(key, value, curr);
pre.next = newNode;
N++;
}
}