链表顺序查找

import java.util.ArrayList;


public class Search<Key, Value> {
    private Node first;
    //链表的节点
    private class Node {
        Key k;
        Value v;
        Node next;

        public Node(Key k, Value v, Node next) {
            this.k = k;
            this.v = v;
            this.next = next;
        }

    }

    //在链表中顺序查找
    public Value get(Key k){
        for(Node n = first; n != null; n = n.next) {
            if (k.equals(n.k)) {
                return n.v;
            }
        }

        return null;
    }

    //在链表中写入数据
    public void put(Key k, Value v) {
        for(Node n = first; n != null; n = n.next) {
            if (n.k.equals(k)) {
                n.v = v;
                return;
            }
        }

        //没有找到
        first = new Node(k, v, first);

    }

    //在链表中删除数据
    public void delete(Key k) {
        Node n;
        Node last = first;
        for (n = first; n != null; n = n.next) {
            if (k.equals(n.k)) {
                //删除链表节点
                if (n.k.equals(first.k)) {
                    first = n.next;
                    return;
                }

                if (last.k == first.k) {
                    first.next = n.next;
                } else {
                    last.next = n.next;
                }
                return;
            }
            last = n;
        }
    }

    public ArrayList<String> list_keys() {
        ArrayList<String> result = new ArrayList<String>();

        for(Node n = first; n != null; n = n.next) {
            result.add(n.k.toString());
        }

        return result;
    }

    public static void main(String []args) {
        System.out.println("Beging to search");
        Search<String, Integer> s = new Search<String, Integer>();
        s.put("A", 1);
        s.put("B", 2);
        s.put("C", 3);

        int v = s.get("A");

        System.out.println(v);

        s.delete("B");

        System.out.println("List keys:");
        ArrayList<String> keys = s.list_keys();

        for(String key : keys) {
            System.out.println(key);
        }

    }

}

符号表的实现上面,使用了一个私有的内部Node类来保存键和值。get()方法的实现会顺序的搜索链表,查找所给定的key是否在链表中存在。put方法会往链表中插入一个键值对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值