3.1.16

上次更新:2019-04-17
发现了题解错误/代码缺陷/排版问题?请点这里:如何:提交反馈

解答

官方实现:https://algs4.cs.princeton.edu/31elementary/BinarySearchST.java.html

先通过二分查找获得下标,然后后面的元素依次向前移动一位。

public void Delete(TKey key)
{
    if (key == null)
        throw new ArgumentNullException("argument to Delete() is null");
    if (IsEmpty())
        return;

    int i = Rank(key);

    if (i == this.n && this.keys[i].CompareTo(key) != 0)
        return;

    for (int j = i; j < this.n - 1; j++)
    {
        this.keys[j] = this.keys[j + 1];
        this.values[j] = this.values[j + 1];
    }

    this.n--;
    this.keys[this.n] = default(TKey);
    this.values[this.n] = default(TValue);

    if (this.n > 0 && this.n == this.keys.Length / 4)
        Resize(this.n / 2);
}

另请参阅

SymbolTable 库

上一题 下一题