顺序查找(基于无序链表)

本文介绍了顺序查找的基本思想和算法实现,特别是在无序链表中的应用。通过get()和put()方法进行查找和插入操作,每个操作平均需要N次比较。性能分析表明,这种查找方式在大型数据集上效率较低,不适合处理大量输入。
摘要由CSDN通过智能技术生成

1、基本思想

采用链表数据结构,每个节点存储一个键值对
get():顺序遍历链表,用equals()方法比较键,如果匹配成功就返回相应的值,否则返回null
put():顺序遍历链表,用equals()方法比较键,如果匹配成功就用第二个参数更新该键相关联的值,否则就创建一个新的节点并将该键值对插入到链表的开头。
这里写图片描述
这里写图片描述

2、算法实现

/** 算法3.1 顺序查找(基于无序链表)
 * 符号表的实现使用了一个私有内部Node类来在链表中保存键和值。
*/
public class SequentialSearchST<Key,Value>
{
   
    private Node first;           //链表首节点
    //private int N;              //结点数量
    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; }
    }

    // get()的实现会顺序地搜索链表查找给定的键(找到则返回相关联的值)
    public Value get(Key key)
    {              
        for(Node x=first; x!=null; x=x.next)
            if(key.equals(x.key))
                return x.val;                /*命中*/
        return null;                         /*未命中*/
    }

    //put()的实现也会顺序地搜索链表查找给定的键,如果找到则更新相关联的值,否则它会用给定的键值对创建一个新的结点并将其插到链表的开头。
    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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值