符号表

无序链表的顺序查找

public class SequentialSearchST<Key, Value>
{
	private Node first;           //链表首结点
	private class Node
	{	//链表结点的定义
		Key key;
		Value val;
		Node next;
		public Node(Key key, Value val, Node next)
		{
			this.key = key;
			this.val = val;
			this.next = next;
		}
	}
	public Value get(Key key)
	{	//查找给定的键,返回相关联的值
		for (Node x = first; x != null; x = x.next)
			if (key.equals(x.key))
				return x.val;        //命中
		return null;                 //未命中
	}
	public void put(key key, Value val)
	{	//查找给定的键,找到则更新其值,否则在表中新建结点
		for (Node x = first; x != null; x = x.next)
			if (key.equals(x.key))
			{	x.val = val; return;	}     //命中,更新
		first = new Node(key, val, first);    //未命中,新建结点
	}
}

  向一个空表插入N个不同的键需要N2/2次比较,一次查找所需比较数,采用随机命中的话是N/2,说明基于链表的实现和顺序查找是非常低效的。

有序数组中的二分查找

猜你喜欢

转载自www.cnblogs.com/auhz/p/9048045.html