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

符号表

符号表:即键值对

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

结点类:

image-20210701201411985

符号表:

image-20210701201430741

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

  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值