无序符号表(链表实现,JAVA,算法(四))

来源:互联网 发布:淘宝大学 编辑:程序博客网 时间:2024/05/29 12:30

符号表简介:将键和值联系起来。能够将键值对插入符号表并希望在以后可以使用键找到对应的值。

链表作为一种简单的数据结构,也是最开始学习的,它可以稍加修改一下便可以用来实现队列和栈其它的数据结构。符号表使用链表无非就是实现简单,将它的每一个节点保存对应的键值对,就可以达到遍历键而找到值的操作了。链表的操作大都是线性的,例如无序插入(这里虽然是头结点插入,但由于需要遍历链表以查询是否重复键,也达到了线性复杂度),删除,查询…..

package com.lizi.datastructure.symboltable;import java.util.ArrayList;import java.util.List;//迭代器收集所有节点使用了标准库中的链表//链表实现的无序符号表,不能允许键或值为nullpublic class SequentialSearchST<Key,Value> {    private Node first=null;//头结点    int size=0;    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;        }    }    //给出的键找到值,如果存在键为空,那么循环可能中断,如果值为空,那么不存在与找到为null的键返回结果一致,    //故不允许空的键或值    public Value get(Key key) {        for (Node x=first; x!=null; x=x.next) {            if(key.equals(x.key))                return x.value;        }        return null;    }    //查找给定的键,找到则更新其值,否则在头节点处新建节点    public void put(Key key,Value value) {        if(key==null||value==null) return;        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 Value delete(Key key) {        Node pre=first;        Value value=null;        for (Node now=first; now!=null;pre=now, now=now.next) {            if(key.equals(now.key)){                value=now.value;                size--;                if(key.equals(first.key))   first=now.next;                else                        pre.next=now.next;            }        }        return value;    }    //未排序的所有键加入到迭代器中    public Iterable<Key> keys() {        List<Key> keys=new ArrayList<Key>(size);        for (Node x=first; x!=null; x=x.next) {            keys.add(x.key);        }        return keys;    }    public boolean contains(Key key) {        return get(key)!=null;    }    public boolean isEmpty() {        return size==0;    }    public int size() {        return size;    }    public void print() {        System.out.println();        for (Node x=first; x!=null; x=x.next) {            System.out.print(x.value+"   ");        }    }}
原创粉丝点击