Ejemplo n.º 1
0
Archivo: BST.java Proyecto: 9r3y/c47
 private Node put(Node x, Key key, Value val) {
   if (x == null) return new Node(key, val, 1);
   int cmp = key.compareTo(x.key);
   if (cmp < 0) x.left = put(x.left, key, val);
   else if (cmp > 0) x.right = put(x.right, key, val);
   else x.val = val;
   x.N = 1 + size(x.left) + size(x.right);
   return x;
 }
Ejemplo n.º 2
0
 private Node put(Node x, String key, Value val, int d) {
   if (x == null) x = new Node();
   if (d == key.length()) {
     x.val = val;
     return x;
   }
   char c = key.charAt(d);
   x.next[c] = put(x.next[c], key, val, d + 1);
   return x;
 }
Ejemplo n.º 3
0
 public void put(Key key, Value val) {
   for (Node tmp = first; tmp != null; tmp = tmp.next) {
     if (tmp.key.equals(key)) {
       tmp.val = val;
       return;
     }
   }
   N++;
   first = new Node(key, val, first);
 }
Ejemplo n.º 4
0
 private static Node createNode(int[] arr, int start, int end) {
   if (start > end) {
     return null;
   }
   int mid = (start + end) / 2;
   Node n = new dot43().new Node();
   n.val = arr[mid];
   n.left = createNode(arr, start, mid - 1);
   n.right = createNode(arr, mid + 1, end);
   return n;
 }
Ejemplo n.º 5
0
 private Node delete(Node x, String key, int d) {
   if (x == null) return null;
   if (d == key.length()) x.val = null;
   else {
     char c = key.charAt(d);
     x.next[c] = delete(x.next[c], key, d + 1);
   }
   if (x.val != null) return x;
   for (int c = 0; c < R; c++) if (x.next[c] != null) return x;
   return null;
 }
Ejemplo n.º 6
0
  public int canCompleteCircuit(int[] gas, int[] cost) {
    if (null == gas
        || null == cost
        || 0 == gas.length
        || 0 == cost.length
        || gas.length != cost.length) return -1;
    int val = 0;
    for (int idx = 0; idx < gas.length; ++idx) {
      val += gas[idx] - cost[idx];
    }
    if (val < 0) return -1;

    Node node = new Node(0, gas[0] - cost[0]), p;
    node.next = node;
    int v1;
    for (int idx = 1; idx < gas.length; ++idx) {
      v1 = gas[idx] - cost[idx];
      if (node.val >= 0 && node.val + v1 >= 0 || node.val < 0 && v1 < 0) {
        node.val += v1;
      } else {
        p = new Node(idx, v1);
        p.next = node.next;
        node.next = p;
        node = p;
      }
    }

    p = node;
    while (node.next != node) {
      if (node.val >= 0 && node.val + node.next.val >= 0 || node.val < 0 && node.next.val < 0) {
        node.val += node.next.val;
        node.next = node.next.next;
      }
    }

    return node.idx;
  }
  /**
   * Inserts the key-value pair into the symbol table, overwriting the old value with the new value
   * if the key is already in the symbol table. If the value is <tt>null</tt>, this effectively
   * deletes the key from the symbol table.
   *
   * @param key the key
   * @param val the value
   */
  public void put(Key key, Value val) {
    if (val == null) {
      delete(key);
      return;
    }

    for (Node x = first; x != null; x = x.next) {
      if (key.equals(x.key)) {
        x.val = val;
        return;
      }
    }
    first = new Node(key, val, first);
    N++;
  }
Ejemplo n.º 8
0
  /**
   * Inserts the specified key-value pair into the symbol table, overwriting the old value with the
   * new value if the symbol table already contains the specified key. Deletes the specified key
   * (and its associated value) from this symbol table if the specified value is <tt>null</tt>.
   *
   * @param key the key
   * @param val the value
   * @throws NullPointerException if <tt>key</tt> is <tt>null</tt>
   */
  public void put(Key key, Value val) {
    if (key == null) throw new NullPointerException("first argument to put() is null");
    if (val == null) {
      delete(key);
      return;
    }

    for (Node x = first; x != null; x = x.next) {
      if (key.equals(x.key)) {
        x.val = val;
        return;
      }
    }
    first = new Node(key, val, first);
    N++;
  }
Ejemplo n.º 9
0
  // insert the key-value pair in the subtree rooted at h
  private Node put(Node h, Key key, Value val) {
    if (h == null) return new Node(key, val, RED, 1);

    int cmp = key.compareTo(h.key);
    if (cmp < 0) h.left = put(h.left, key, val);
    else if (cmp > 0) h.right = put(h.right, key, val);
    else h.val = val;

    // fix-up any right-leaning links
    if (isRed(h.right) && !isRed(h.left)) h = rotateLeft(h);
    if (isRed(h.left) && isRed(h.left.left)) h = rotateRight(h);
    if (isRed(h.left) && isRed(h.right)) flipColors(h);
    h.N = size(h.left) + size(h.right) + 1;

    return h;
  }
Ejemplo n.º 10
0
  // delete the key-value pair with the given key rooted at h
  private Node delete(Node h, Key key) {
    // assert get(h, key) != null;

    if (key.compareTo(h.key) < 0) {
      if (!isRed(h.left) && !isRed(h.left.left)) h = moveRedLeft(h);
      h.left = delete(h.left, key);
    } else {
      if (isRed(h.left)) h = rotateRight(h);
      if (key.compareTo(h.key) == 0 && (h.right == null)) return null;
      if (!isRed(h.right) && !isRed(h.right.left)) h = moveRedRight(h);
      if (key.compareTo(h.key) == 0) {
        Node x = min(h.right);
        h.key = x.key;
        h.val = x.val;
        // h.val = get(h.right, min(h.right).key);
        // h.key = min(h.right).key;
        h.right = deleteMin(h.right);
      } else h.right = delete(h.right, key);
    }
    return balance(h);
  }
Ejemplo n.º 11
0
 public void deleteNode(Node node) {
   node.val = node.next.val;
   node.next = node.next.next;
 }