散列表描述

</pre><p><pre name="code" class="java">/*
 * 散列表
 */
public class HashTable {
	
	public static final int CAPACITY = 10;
	private Node[] value = null;
	
	public static void main(String[] args) {
		HashTable hashtable = new HashTable();
		hashtable.insertData(22);
		hashtable.insertData(22);
		hashtable.insertData(123);
		hashtable.insertData(436);
		hashtable.insertData(55);
		hashtable.insertData(157);
		hashtable.insertData(235);
		hashtable.insertData(256);
		hashtable.insertData(525);
		hashtable.insertData(724);
		hashtable.insertData(278);
		hashtable.insertData(209);
		hashtable.insertData(67);
		hashtable.insertData(54);
		hashtable.insertData(546);
		hashtable.insertData(350);
		hashtable.insertData(101);
		hashtable.insertData(23);
		System.out.println("删除前的散列表:");
		hashtable.printHashTable();
		hashtable.deleteData(55);
		hashtable.deleteData(350);
		System.out.println("删除后的散列表:");
		hashtable.printHashTable();

	}
	
	public HashTable() {
		value = new Node[CAPACITY];
	}
	
	//在哈希表中查找数据
	private Node searchData(int data) {
		Node node = value[data % CAPACITY];
		if(null == node) {
			return null;
		}
		
		while(node != null) {
			if(data == node.key) {
				return node;
			}
			node = node.next;	
		}
		return null;
	}
	
	//插入数据
	private boolean insertData(int data) {
		Node nd = value[data % CAPACITY];
		if(null == nd) {
			Node node = new Node(data);
			value[data % CAPACITY] = node;
			return true;
		}
		//如果已经有这个值了,插入无效
		if(null != searchData(data)) {		
			return false;
		}
		while(nd.next != null) {
			nd = nd.next;
		}
		nd.next = new Node(data);
		return true;
	}
	
	private boolean deleteData(int data) {
		Node head = value[data % CAPACITY];
		Node node = searchData(data);
		
		if(null == head || null == node) {
			return false;
		}

		if(node == head) {
			//删除时要注意,head只是栈内存中的引用
			value[data % CAPACITY] = head.next;		
			return false;
		}
		while(node != head.next) {
			head = head.next;
		}
		head.next = node.next;
		return true;
	}
	
	void printHashTable()
	{
		int i=0;

	    System.out.println("[Hash idx]     [value]");
	    do {
	    	System.out.print("   "+i+"-------------");
	        if(null == value[i]) {
	            i++;
	            System.out.println("NULL");
	            continue;
	        }
	        Node node = value[i];

	        while(node != null) {
	        	System.out.print(node.key+" ");
	            node = node.next;
	        }
	        System.out.println();
	        i++;
	    } while (i<10);

        System.out.println();
	}
	
	private static class Node {
		int key = 0;
		Node next = null;
		public Node(int key) {
			this.key = key;
		}	
	}
}

运行结果为:

删除前的散列表:
[Hash idx]     [value]
   0-------------350 
   1-------------101 
   2-------------22 
   3-------------123 23 
   4-------------724 54 
   5-------------55 235 525 
   6-------------436 256 546 
   7-------------157 67 
   8-------------278 
   9-------------209 

删除后的散列表:
[Hash idx]     [value]
   0-------------NULL
   1-------------101 
   2-------------22 
   3-------------123 23 
   4-------------724 54 
   5-------------235 525 
   6-------------436 256 546 
   7-------------157 67 
   8-------------278 
   9-------------209 



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值