前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于链表的无序查找

基于链表的无序查找

作者头像
用户2436820
发布2019-02-25 14:16:39
3890
发布2019-02-25 14:16:39
举报
代码语言:javascript
复制
package com.snail.basic;


public class SequentialSearchST<Key, Value> {
    // 链表首结点
    private Node first;

    private class Node {
        // 链表结点定义
        Key key;
        Value val;
        Node next;

        public Node(Key key, Value val, Node next) {
            this.key = key;
            this.val = val;
            this.next = next;
        }
    }

    public Value get(Key key) {
        // 查找给定的键,返回相连的值
        for (Node x = first; x != null; x = x.next)
            if (key.equals(x.key))
                return x.val;
        return null;
    }

    public void put(Key key, Value val) {
        // 查找给定的键,找到则更新其值,否则在表中新建结点
        for (Node x = first; x != null; x = x.next)
            if (key.equals(x.key)) {
                // 命中 更新
                x.val = val;
                return;
            }
        // 未命中新建结点
        first = new Node(key, val, first);
    }

}
代码语言:javascript
复制
package com.snail.basic;

/**
 * 二分查找基于有序数组
 * 
 * @param <Key> 有序排列的键
 * @param <Value> 键对应的值
 */
public class BinarySearchST<Key extends Comparable<Key>,Value> {
    private Key[] keys;
    private Value[] vals;
    private int N;
    public BinarySearchST(int capacity){
        keys = (Key[]) new Comparable[capacity];
        vals = (Value[]) new Object[capacity];
    }
    public int size(){
        return N;
    }
    public Value get(Key key){
        int i = rank(key);
        if(i<N&&keys[i].compareTo(key)==0)return vals[i];
        else return null;
        
    }
    public int rank(Key key){
        int lo = 0,hi =N-1;
        while (lo<=hi){
            int mid = lo + (hi-lo)/2;
            int cmp = key.compareTo(keys[mid]);
            if(cmp<0)hi=mid-1;
            else if(cmp>0)lo=mid+1;
            else return mid;
        }
        return lo;
    }
    public void put(Key key,Value val){
        int i = rank(key);
        if(i<N && keys[i].compareTo(key)==0){
            vals[i] = val;return;
        }
        for (int j = N; j > i; j--) {
            keys[j]= keys[j-1];
            vals[j] = vals[j-1];
        }
        keys[i]=key;
        vals[i]=val;
        N++;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.01.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档