设为首页 加入收藏

TOP

一步一步写算法(之查找) (二)
2014-11-23 23:33:38 来源: 作者: 【 】 浏览:5
Tags:步一步 算法 查找
NULL;

if(data == pNode->data)

return pNode;

else if(data < pNode->data)

return find_data(pNode->left, data);

else

return find_data(pNode->right, data);

}

(4)同样,我们看到(2)、(3)都是建立在完全排序的基础之上,那么有没有建立在折中基础之上的查找呢?有,那就是哈希表。哈希表的定义如下:1)每个数据按照某种聚类运算归到某一大类,然后所有数据链成一个链表;2)所有链表的头指针形成一个指针数组。这种方法因为不需要完整排序,所以在处理中等规模数据的时候很有效。其中节点的定义如下:

view plaincopy to clipboardprint typedef struct _LINK_NODE

{

int data;

struct _LINK_NODE* next;

}LINK_NODE;

typedef struct _LINK_NODE

{

int data;

struct _LINK_NODE* next;

}LINK_NODE;

那么hash表下面的数据怎么查找呢?

view plaincopy to clipboardprint LINK_NODE* hash_find(LINK_NODE* array[], int mod, int data)

{

int index = data % mod;

if(NULL == array[index])

return NULL;

LINK_NODE* pLinkNode = array[index];

while(pLinkNode){

if(data == pLinkNode->data)

return pLinkNode;

pLinkNode = pLinkNode->next;

}

return pLinkNode;

}

LINK_NODE* hash_find(LINK_NODE* array[], int mod, int data)

{

int index = data % mod;

if(NULL == array[index])

return NULL;

LINK_NODE* pLinkNode = array[index];

while(pLinkNode){

if(data == pLinkNode->data)

return pLinkNode;

pLinkNode = pLinkNode->next;

}

return pLinkNode;

}分析:

hash表因为不需要排序,只进行简单的归类,在数据查找的时候特别方便。查找时间的大小取决于mod的大小。mod越小,那么hash查找就越接近于普通查找;那么hash越大呢,那么hash一次查找成功的概率就大大增加。

【预告: 下一篇博客介绍排序的内容】

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇面试知识总结(一) 下一篇一步一步写算法(之非递归排序)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: