MASS幸运哈希游戏系统开发丨冲突解决方法(代码分析)

简介: 3.2 链地址法链地址法就是将相应位置上冲突的所有关键词存储在同一个单链表中。设关键字序列为 47 , 7 , 29 , 11 , 16 , 92 , 22 , 8 , 3 , 50 , 37 , 89 , 94 , 21 47, 7, 29, 11, 16, 92, 22, 8, 3, 50, 37, 89, 94, 2147,7,29,11,16,92,22,8,3,50,37,89,94,21,散列函数取为h ( k e y ) = k e y m o d    11 h(key) = key \mod 11h(key)=keymod11,用分离链接法处理冲突。

3.2 链地址法

链地址法就是将相应位置上冲突的所有关键词存储在同一个单链表中。

设关键字序列为 47 , 7 , 29 , 11 , 16 , 92 , 22 , 8 , 3 , 50 , 37 , 89 , 94 , 21 47, 7, 29, 11, 16, 92, 22, 8, 3, 50, 37, 89, 94, 2147,7,29,11,16,92,22,8,3,50,37,89,94,21,散列函数取为h ( k e y ) = k e y m o d    11 h(key) = key \mod 11h(key)=keymod11,用分离链接法处理冲突。

表中有9个结点只需1次查找,5个结点需要2次查找,所以查找成功的平均查找次数为:

A S L s = ( 9 + 5 ∗ 2 ) / 14 ≈ 1.36

参考代码:

include

include

include

include

include <malloc.h>

using namespace std;

define MAXTABLESIZE 10000 //允许开辟的最大散列表长度

define KEYLENGTH 100 //关键字的最大长度

typedef int ElementType;

struct LNode

{

ElementType data;
LNode *next;
};

typedef LNode *PtrToNode;

typedef PtrToNode LinkList;

struct TblNode

{

int tablesize; //表的最大长度
LinkList heads; //存放散列单元数据的数组
};

typedef struct TblNode *HashTable;

/返回大于n且不超过MAXTABLESIZE的最小素数/

int NextPrime(int n)

{

int p = (n % 2) ? n + 2 : n + 1; //从大于n的下一个奇数开始
int i;
while (p <= MAXTABLESIZE)
{

for (i = (int)sqrt(p); i > 2; i--)


{


    if ((p % i) == 0)


        break;


}


if (i == 2)

    break; //说明是素数,结束


else


    p += 2;

}

return p;

}

/创建新的哈希表/

HashTable CreateTable(int table_size)

{

HashTable h = (HashTable)malloc(sizeof(TblNode));

h->tablesize = NextPrime(table_size);

h->heads = (LinkList)malloc(h->tablesize * sizeof(LNode));

//初始化表头结点

for (int i = 0; i < h->tablesize; i++)

{

h->heads[i].next = NULL;

}

return h;

}

/查找数据的初始位置/

int Hash(ElementType key, int n)

{

//这里只针对大小写

return key % 11;

}

/查找元素位置/

LinkList Find(HashTable h, ElementType key)

{

int pos;

pos = Hash(key, h->tablesize); //初始散列位置

LinkList p = h->heads[pos].next; //从链表的第一个节点开始

while (p && key != p->data)

{

p = p->next;

}

return p;

}

/插入新的元素/

bool Insert(HashTable h, ElementType key)

{

LinkList p = Find(h, key); //先查找key是否存在

if (!p)

{

//关键词未找到,可以插入


LinkList new_cell = (LinkList)malloc(sizeof(LNode));


new_cell->data = key;


int pos = Hash(key, h->tablesize);


new_cell->next = h->heads[pos].next;


h->heads[pos].next = new_cell;

return true;

}

else

{

cout << "键值已存在!" << endl;


return false;

}

}

/销毁链表/

void DestroyTable(HashTable h)

{

int i;

LinkList p, tmp;

//释放每个节点

for (i = 0; i < h->tablesize; i++)

{

p = h->heads[i].next;


while (p)


{


    tmp = p->next;


    free(p);

复制

    p = tmp;


}

}

free(h->heads);

free(h);

}

int main(int argc, char const *argv[])

{

int a[] = {47, 7, 29,29, 11, 16, 92, 22, 8, 3, 50, 37, 89, 94, 21};
int n = 15;
HashTable h = CreateTable(n);
for (int i = 0; i < n; i++)
{

Insert(h, a[i]); //插入元素

}
for (int i = 0; i < h->tablesize; i++)
{

LinkList p = h->heads[i].next;
while (p)
{
    cout << p->data << " "; //打印哈希表元素
    p = p->next;
}
cout << endl;

}
return 0;
}

相关文章
|
1月前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
本文介绍了Python中图的表示方法及遍历策略。图可通过邻接表或邻接矩阵表示,前者节省空间适合稀疏图,后者便于检查连接但占用更多空间。文章详细展示了邻接表和邻接矩阵的实现,并讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的遍历方法,帮助读者掌握图的基本操作和应用技巧。
36 4
|
安全 测试技术
不会写测试用例咋办?牢记这5点,你也能写出高逼格案例
不会写测试用例咋办?牢记这5点,你也能写出高逼格案例
153 1
|
存储 算法 C语言
《信任的进化》游戏简易版逻辑算法的实现(C语言)
《信任的进化》游戏简易版逻辑算法的实现(C语言)
|
数据可视化 Oracle 搜索推荐
程序员最终会被自己开发的轮子所淘汰吗?
程序员最终会被自己开发的轮子所淘汰吗?
121 0
|
算法 C语言 Python
01【C语言 & 趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。
01【C语言 & 趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。
01【C语言 & 趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。
|
iOS开发 MacOS
iOS 的这个功能你肯定听过,但用对它能极大提升效率
iOS 的这个功能你肯定听过,但用对它能极大提升效率
105 0
|
存储 C#
对于‘用C#编写一个员工工资计算’问题的代码编写风格和结构设计考虑的比较【发现自己还是太弱,大家可以在评论区中提出我代码中的不足】
对于‘用C#编写一个员工工资计算’问题的代码编写风格和结构设计考虑的比较【发现自己还是太弱,大家可以在评论区中提出我代码中的不足】
127 0
对于‘用C#编写一个员工工资计算’问题的代码编写风格和结构设计考虑的比较【发现自己还是太弱,大家可以在评论区中提出我代码中的不足】
|
人工智能 算法
哈希游戏系统开发详细方案丨哈希竞猜游戏开发技术逻辑(源码部署)
哈希游戏系统开发详细方案丨哈希竞猜游戏开发技术逻辑(源码部署)
148 0
|
机器学习/深度学习 Python
哈希游戏系统开发程序搭建细节分享
下面分享关于哈希系统开发的一些代码,包括系统组成、关联以及系统开发过程,有需求或者问题欢迎留言、咨询。 #include<stdio.h> #include<iostream>