数据结构与算法系列笔记四:符号表

符号表

符号表:即键值对

    符号表中,键具有唯一性
符号表的实现

结点类:

符号表:

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++;

  }
}
经验分享 程序员 微信小程序 职场和发展