博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
哈希表
阅读量:581 次
发布时间:2019-03-11

本文共 2985 字,大约阅读时间需要 9 分钟。

【哈希表】

哈希表(HashTable)又称散列表,是根据关键码进行数据访问的一种数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

哈希表有多种实现结构:数组+链表,数组+二叉树。这里用数组+链表来实现哈希表

 

 数组+链表的形式,实际上就是一个链表数组。而添加数据时,只要根据填入数据的id,通过取特征码运算,获取一个特征码,添加链表节点的数组位置索引,就是这个特征码。其余操作与去前面所说的链表,数组几乎一样。下面的代码中,采用 单向-无头-普通类-循环 的链表来作为存储结构。

代码实现:

package cn.dataStructureAndAlgorithm.demo.HashTable;import java.util.Scanner;class Node{    private int id;    private String data;    private Node next;    public Node(int id, String data) {        this.id = id;        this.data = data;    }    public int getId() {        return id;    }    public String getData() {        return data;    }    public Node getNext() {        return next;    }    public void setNext(Node next) {        this.next = next;    }    @Override    public String toString() {        return "Node{" +                "id=" + id +                ", data='" + data + '\'' +                '}';    }}class LinkList{    private Node root;    public void add(Node node){//无序添加        if (root==null){            this.root=node;            return;        }        Node temp=this.root;        while (temp.getNext()!=null){//找到链表尾            temp=temp.getNext();        }        temp.setNext(node);    }    public void show(){        if (root==null){            System.out.println("链表为空");            return;        }        Node temp=root;        while (temp!=null){            System.out.print(" =>"+temp);            temp=temp.getNext();        }        System.out.println();    }    public Node find(int id){        if (root==null){            return null;        }        Node temp=this.root;        while (true){            if (temp.getId()==id){//找到                break;            }            if (temp.getNext()==null){//未找到                temp=null;                break;            }            temp=temp.getNext();        }        return  temp;    }    public void delete(int id){        if (root==null){            System.out.println("链表为空");            return;        }        if (root.getId()==id){//删除根节点            this.root=this.root.getNext();        }else {//删除子节点            Node temp=this.root;            while (true) {                if (temp.getNext() == null) {//未找到                    System.out.println("未找到");                    break;                }                if (temp.getNext().getId() == id) {//找到                    temp.setNext(temp.getNext().getNext());                    break;                }            }        }    }}class Hashtable{    private int size;    LinkList[] hashtable;    public Hashtable(int size) {        this.size = size;        hashtable = new LinkList[size];//初始化链表数组        for (int i=0;i
a(add):添加数据s(show):展示数据f(find):操作数据d(delete):删除数据e(exit):退出程序a请输入id:9请输入data:xiaominga(add):添加数据s(show):展示数据f(find):操作数据d(delete):删除数据e(exit):退出程序s第1个链表:链表为空第2个链表:链表为空第3个链表: =>Node{id=9, data='xiaoming'}第4个链表:链表为空第5个链表:链表为空第6个链表:链表为空第7个链表:链表为空a(add):添加数据s(show):展示数据f(find):操作数据d(delete):删除数据e(exit):退出程序

 

<-- 宝藏在此(doge)  

转载地址:http://ccztz.baihongyu.com/

你可能感兴趣的文章