我正在阅读,我发现了这个问题,我不知道它的正确答案是什么。这是一个问题:
假设您正在为手机实施通讯簿功能。地址 本书需要按人名分类,并支持快速访问 按姓氏查询。以下哪种数据结构是一个不错的选择 用于存储地址簿?解释为什么。这将是一个糟糕的选择,为什么?
(a)未分类链表
(b)排序链表
(c)二元搜索树
(d)哈希表
我的答案是使用哈希表,因为它具有键和值... 我的回答是否正确?
由于
答案 0 :(得分:1)
不,通常哈希表不是电话簿的最佳选择。
Hashtables具有出色的O(1)
查找性能,但是他们通过几乎不支持按顺序完成本书来获得这一点。几乎我能想到的在电话簿中搜索某些内容的每个场景都涉及到没有答案。
例如,如果我想查找名字以“George”开头的所有人,我不想知道我需要查询“George Jestson”,因为这是存储在我的哈希表中的值。
使用有序数据结构,任何类型的树都允许您修剪值太高或太低,有序列表或有序数组也是如此;但是,请避免使用有序链表,因为您仍需要横向列表O(n)
来查找条目。您可以通过对数组执行b树搜索或仅使用某种链接列表树来做得更好O(n log n)
。
答案 1 :(得分:1)
根据要求,正确使用的结构是二进制搜索树。 为什么呢?
( a )未排序的链表:未排序,O(n)搜索
( b )排序链表:排序,O(n)搜索;请注意,您无法在链接列表上应用二进制搜索 single或double
( c )二叉搜索树:排序,O(登录)搜索
( d )哈希表:未排序,O(1)搜索
由于排序要求,(a)和(d)被排除在外;然后(c)在搜索时比(b)更快。
*只是注意到你也问“选择不好”,这显然是(a)(未排序的链表)
答案 2 :(得分:0)
(c)二元搜索树
因为它既有排序,又支持快速访问。