1 MASS竞猜幸运哈希游戏系统开发中冲突的解决方法-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MASS竞猜幸运哈希游戏系统开发中冲突的解决方法

開發丨KFZ433 来源:開發丨KFZ433 作者:開發丨KFZ433 2022-06-29 16:51 次阅读

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,用分离链接法处理冲突。

pYYBAGK8EYuAM8EkAAO9Y8tZolU243.png

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

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

参考代码:

#include

#include

#include

#include

#include

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;

}

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68519
  • 哈希函数
    +关注

    关注

    0

    文章

    43

    浏览量

    9446
收藏 人收藏

    评论

    相关推荐

    mac的常见问题解决方法

    Mac常见问题解决方法 1. 系统启动缓慢 问题描述: 启动Mac时,系统启动缓慢,甚至出现卡顿现象。 解决方法: 检查启动项目: 打开系统
    的头像 发表于 12-19 15:02 136次阅读

    诊断系统开发咨询服务

    随着汽车电控系统复杂度及消费者对于汽车售后服务水平要求的提升,诊断系统开发在整车开发的重要度日益突出。经过多年的实践,经纬恒润积累了丰富的经验,业务涵盖诊断协议及功能定义、诊断测试、
    的头像 发表于 12-18 16:30 324次阅读
    诊断<b class='flag-5'>系统开发</b>咨询服务

    Ubuntu系统常见问题及解决方法

    Ubuntu是一个基于Linux的开源操作系统,以其稳定性和易用性而受到许多用户的喜爱。然而,在使用过程,用户可能会遇到各种问题。以下是一些Ubuntu系统中常见的问题及其解决方法
    的头像 发表于 12-12 14:32 235次阅读

    常见伺服系统故障及解决方法

    伺服系统在自动化领域中扮演着重要角色,但其运行过程可能会遇到各种故障。以下是一些常见的伺服系统故障及其解决方法: 一、电机无法启动 故障现象 :电机无法启动,无法响应控制命令。 可能
    的头像 发表于 12-10 10:21 287次阅读

    嵌入式系统开发的测试方法 嵌入式系统开发与AI结合应用

    嵌入式系统开发的测试方法 嵌入式系统开发是一个复杂的过程,涉及到硬件和软件的紧密结合。测试是确保系统可靠性和性能的关键步骤。以下是一些常用
    的头像 发表于 12-09 10:22 306次阅读

    嵌入式系统开发与硬件的关系 嵌入式系统开发常见问题解决

    嵌入式系统开发与硬件的关系 嵌入式系统是专为特定应用设计的计算机系统,它们通常嵌入在所控制的设备。这些系统的关键特点是它们与硬件的紧密集成
    的头像 发表于 12-09 09:38 232次阅读

    常见晶振故障及解决方法 晶振在物联网的应用

    常见晶振故障及解决方法 晶振(Crystal Oscillator)是一种利用石英晶体的压电效应来产生稳定振荡频率的电子元件,广泛应用于各种电子设备,包括物联网(IoT)设备。晶振的稳定性和准确性
    的头像 发表于 12-09 09:34 241次阅读

    以太网组网常见故障及解决方法

    相互通信。 解决方法: 检查网线是否损坏,使用网线测试仪进行测试。 确保网线插头(RJ45)插入到位,没有松动。 更换网线或接口,排除物理损坏的可能性。 检查交换机和路由器的端口状态,确保它们正常工作。 2. IP地址冲突 故障现象: 网络
    的头像 发表于 11-08 09:13 593次阅读

    常见GPU问题及解决方法

    各种问题。以下是一些常见的GPU问题及其解决方法: GPU驱动程序过时或不兼容 问题描述:GPU驱动程序是GPU与操作系统之间的桥梁,负责将操作系统的指令转换为GPU可以理解的指令。如果驱动程序过时或不兼容,可能会导致GPU性能
    的头像 发表于 10-27 14:12 1213次阅读

    ChatGPT 在游戏开发的创新应用

    游戏开发领域,人工智能技术的应用正变得越来越广泛。ChatGPT,作为一种先进的自然语言处理(NLP)模型,为游戏开发带来了许多创新的应用。 1. 动态对话
    的头像 发表于 10-25 18:05 617次阅读

    IP地址冲突解决方法图示

    ! 那么,什么是 IP 地址冲突呢?其实很简单,就是在同一个网络,有两个或多个设备被分配了相同的 IP 地址,那么在来两方同时使用的时候,就像真假猕猴一样,必然是要打架的。 那如果遇到 IP 地址冲突,我们该如何做呢?其实也很
    的头像 发表于 07-26 11:51 431次阅读

    CMM三坐标测量机MASS多测头系统

    在精密测量领域,技术的每一次革新都代表着对更高精度、更广应用领域的追求。蔡司代理三本精密仪器小编介绍蔡司三坐标测量仪MASS多测头系统,无疑是这一追求下的杰出代表。该系统凭借其独特的设计理念和先进
    的头像 发表于 07-08 17:16 375次阅读
    CMM三坐标测量机<b class='flag-5'>MASS</b>多测头<b class='flag-5'>系统</b>

    接地网阻值偏大的原因及解决方法

     地网接地电阻测试仪是保障电气设备安全运行的重要组成部分,但在实际使用,我们可能会遇到接地网阻值偏大的情况。接下来,鸿蒙小小编介绍造成这种情况的原因,并提供一些解决方法。   1、接地体积不足
    发表于 06-17 09:19

    液压系统由哪几部分组成 液压系统常见故障及解决方法

    负责完成系统的工作任务,油箱用于储存液压液,管路则连接各个部件。 液压系统常见的故障及解决方法如下: 泄漏问题:液压系统的泄漏可以是液压油
    的头像 发表于 02-03 10:28 1168次阅读

    康谋方案 | 加速自动驾驶系统开发的技术解决方案

    过程。 ADTF 能在 Windows、Linux 和 ARM 环境运行配置。它可以实时同步处理多个传感器数据流。集成的测试环境,使得在开发平台中编程的驾驶员辅助和安全功能可以很容易地可视化并进行虚拟测试。 ADTF作为自动驾驶系统开
    的头像 发表于 01-19 15:57 409次阅读
    康谋方案 | 加速自动驾驶<b class='flag-5'>系统开发</b>的技术解决方案