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

查找----基于无序链表

作者头像
SuperHeroes
发布2018-05-30 17:34:21
6250
发布2018-05-30 17:34:21
举报
文章被收录于专栏:云霄雨霁云霄雨霁

此算法实现简单,就是单纯地将键值对存入链表中,get()、put()、delete()操作和普通链表的操作原理完全相同。

在含有N对键值对的基于无序链表实现的符号表中,未命中查找和插入操作都需要N次比较;命中的查找平均需要N/2次比较;特别的,从零构造一个N的符号表需要~N^2次比较。

无序链表实现的符号表效率较其他方法低。

代码语言:javascript
复制
public class SequentialSearchST<Key,Value> {
    private  Node first;    //头指针
    private int size;     //链表结点数
	
    public SequentialSearchST() {size = 0;first = null;}
    //节点类
    private class Node{
        Key key;
        Value value;
        Node next;
        public Node(Key key,Value value,Node next) {
            this.key = key;
            this.value = value;
            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.value;	//命中
        return null;	//未命中
    }
    //put()方法,加入键值对
    public void put(Key key,Value value,Node next) {
        for(Node x = first;x!=null;x=x.next)
            if(key.equals(x.key)) {
                x.value = value;return ;	//命中,更新
        }
        first = new Node(key,value,first);		//未命中,新建,连接到链表的最前面
        size++;
    }
    //返回键值对个数
    public int size() {return size;}
    //delete()方法,删除键值对
    public void delete(Key key) {
        for(Node x = first;x!=null;x=x.next)
            if(x.next.key.equals(key)) {
                x.next = x.next.next;
                break;
            }
    }  
    //获取链表中的所有key
    public Iterable<Key> keys()  {
        Queue<Key> queue = new Queue<Key>();
        for (Node x = first; x != null; x = x.next)
            queue.enqueue(x.key);
        return queue;
    }
} 

下一篇:基于有序数组的查找

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.12.16,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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