算法导论示例-ChainedHash

原创 2006年06月07日 23:09:00
/**
 * Introduction to Algorithms, Second Edition 
 * 11.2 Direct-address tables
 * @author 土豆爸爸
 * 
 */
public class ChainedHash {
    private LinkedList[] table; //哈希表
    
    /**
     * 构造函数。
     * @param slot 指定哈希表的大小
     */
    public ChainedHash(int slot) {
        table = new LinkedList[slot];
        for(int i = 0; i < slot; i++) {
            table[i] = new LinkedList();
        }
    }
    
    /**
     * 查找键值为k的元素
     * @param k 待查找元素的键值
     * @return 键值为k的元素,未找到返回null
     */
    public LinkedList.Node search(int k) {
        return table[hash(k)].search(k);
    }
    
    /**
     * 插入节点x。根据x.key计算哈希值,将x插入到哈希表所指向的链表中。
     * @param x 待插入节点
     */
    public void insert(LinkedList.Node x) {
        table[hash(x.key)].insert(x);
    }
    
    /**
     * 删除节点x。
     * @param x 待删除节点
     */
    public void delete(LinkedList.Node x) {
        table[hash(x.key)].delete(x);
    }
    
    /**
     * 计算哈希值
     * @param key 键值
     * @return 哈希值
     */
    private int hash(int key) {
        return key % table.length;
    }
    
    public void print() {
        for(int i = 0; i < table.length; i++) {
            LinkedList.Node head = table[i].getHead();
            System.out.print(i + ":");
            while(head != null) {
                System.out.print(head.key + " ");
                head = head.next;
            }
            System.out.println();
        }
    }
}

import junit.framework.TestCase;

public class ChainedHashTest extends TestCase {
    public void testLinkedList() {
        ChainedHash table = new ChainedHash(10);
        // 插入100个随机节点
        for (int i = 0; i < 100; i++) {
            int key = (int) (Math.random() * 1000);
            if (table.search(key) == null) {
                table.insert(new LinkedList.Node(key));
            }
        }

        table.print();
        // 找到一个节点
        LinkedList.Node node = null;
        for (int i = 0; i < 100; i++) {
            node = table.search(i);
            if (node != null) {
                break;
            }
        }
        assertNotNull(node);
        table.delete(node);
        assertEquals(null, table.search(node.key));
    }
}

算法导论22.2广度优先搜索 练习总结

22.2-1 请计算出在有向图 22-2(a) 上运行广度优先搜索算法后的 d 值和 π 值,这里假定结点 3 为算法所用的源结点。 ANSWER: 22.2-2 请计算出在图 22-3 所示无向...
  • chan15
  • chan15
  • 2015年11月14日 19:50
  • 2251

用Latex排版论文(4)《大连海事大学硕博学位论文Latex模板》中算法排版例子(添加中文输入和输出)

最近一直在写硕士毕业论文,在LaTeXStudio上发现了由@智博是小叮当编写的《大连海事大学硕博学位论文latex模板》,所以就开始尝试使用该模板来写毕业论文,有种前人种树后人乘凉的感觉。     ...
  • kbawyg
  • kbawyg
  • 2014年03月05日 00:50
  • 3548

算法导论第十一章----11.1.1-11.1.4

http://test.scripts.psu.edu/users/d/j/djh300/cmpsc465/notes-4985903869437/solutions-to-some-homework...
  • lihenair
  • lihenair
  • 2014年02月27日 18:20
  • 3045

算法导论与比赛常用算法示例_第1版

  • 2013年12月01日 22:44
  • 390KB
  • 下载

链式哈希表(Hash Table)--算法导论示例

In computer science, a hash table is an associative array data structure that associates keys with v...
  • rockerman_shane
  • rockerman_shane
  • 2011年02月21日 20:06
  • 2137

算法导论中文第三版,非扫描,带书签

  • 2017年11月08日 08:03
  • 33.26MB
  • 下载

堆排序(C#,C++)算法导论

  • 2017年10月11日 10:50
  • 3.21MB
  • 下载

USTCer 算法导论 字符串匹配实验

  • 2017年10月10日 11:52
  • 424KB
  • 下载

算法导论-第3版

  • 2017年11月02日 13:46
  • 99.01MB
  • 下载

算法导论中文第三版

  • 2017年10月30日 22:47
  • 65.32MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法导论示例-ChainedHash
举报原因:
原因补充:

(最多只允许输入30个字)