已知表长为25的哈希表,用除留取余法,按公式H(key)=key MOD p 建立哈希表,则p应取( )为宜。 10

一已知表长为25的哈希表,用除留取余法,按公式H(key)=keyMODp建立哈希表,则p应取()为宜。二一个待散列的线性表为k={18,25,63,50,42,32,9... 一 已知表长为25的哈希表,用除留取余法,按公式H(key)=key MOD p 建立哈希表,则p应取( )为宜。 二 一个待散列的线性表为k={18,25,63,50,42,32,9},散列函数为H(k)=k MOD 9,与18发生冲突的元素有( )个。 三 m阶B-树中的m是指( )。 求高手解答这三个问题 十分感谢 展开
 我来答
博学小赵爱生活
高能答主

2020-06-17 · 专注于食品生活科技行业
博学小赵爱生活
采纳数:456 获赞数:111887

向TA提问 私信TA
展开全部

23,除留取余法,若哈希表长为M,则取余因子P为小于,或等于表长(最好接近M)的最小质数或不包含小于20质因子的合数。

取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b,其中a和b为常数(这种散列函数叫做自身函数)。若其中H(key)中已经有值了,就往下一个找,直到H(key)中没有值了,就放进去。

扩展资料:

#include <iostream>

using namespace std

//哈希函数的构造方法:除留取余法

//处理冲突机制:链地址法

typedef struct _NODE

{

int key;

struct _NODE* next;

}_NODE;

typedef struct Hash_Table

{

_NODE* pChainHash[13];

}Hash_Table;

//初始化哈希表

Hash_Table* InitHashTable()

{

Hash_Table* pHashTable = new Hash_Table;

memset( pHashTable, 0, sizeof(Hash_Table) );

return pHashTable;

}

//在哈希表中查找数据

_NODE* FindDataInHash( Hash_Table* pHashTable, int key )

{

if ( !pHashTable )

return NULL;

_NODE* pNode = NULL;

if ( !(pNode = pHashTable->pChainHash[ key % 13 ] ) )

return NULL;

while ( pNode )

{

if ( pNode->key == key )

return pNode;

pNode = pNode->next;

}

return NULL;

}

//在哈希表中插入数据

bool InsertDataToHash( Hash_Table* pHashTable, int key )

{

if ( !pHashTable )

return false;

if ( NULL != FindDataInHash( pHashTable, key ) )

return false;//数据已在里面

_NODE* pNewNode = new _NODE;

memset( pNewNode, 0, sizeof( _NODE ) );

pNewNode->key = key;

_NODE* pNode = NULL;

pNode = pHashTable->pChainHash[ key % 13 ];

if ( !pNode ) 

{

pHashTable->pChainHash[ key % 13 ] = pNewNode;

}

else

{

while( pNode->next )

{

pNode = pNode->next;

 }

pNode->next = pNewNode;

}

return true;

}


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式