哈希游戏系统开发程序搭建细节分享

简介: 下面分享关于哈希系统开发的一些代码,包括系统组成、关联以及系统开发过程,有需求或者问题欢迎留言、咨询。#include<stdio.h>#include<iostream>

下面分享关于哈希系统开发的一些代码,包括系统组成、关联以及系统开发过程,有需求或者问题欢迎留言、咨询。

include<stdio.h>

include

include<conio.h>

using namespace std;

define HASH_LEN 50 //哈希表的长度

define M 47 //随机数

intNAME_NO=34; //城市名的个数

typedef struct

{

char*py; //名字的拼音

intk; //拼音所对应的整数

}NAME;

NAME NameList[HASH_LEN]; //全局变量NAME

typedef struct //哈希表

{

char*py; //名字的拼音

intk; //拼音所对应的整数

intsi; //查找长度

}HASH;

HASH HashList[HASH_LEN]; //全局变量HASH

void InitNameList() //姓名(结构体数组)初始化

{

char*f;

intr,s0,i;

NameList[0].py="harbin";

NameList[1].py="shijiazhuang";

NameList[2].py="lanzhou";

NameList[3].py="kunming";

NameList[4].py="chengdu";

NameList[5].py="changchun";

NameList[6].py="shenyang";

NameList[7].py="xining";

NameList[8].py="xian";

NameList[9].py="zhengzhou";

NameList[10].py="jinan";

NameList[11].py="taiyuan";

NameList[12].py="hefei";

NameList[13].py="wuhan";

NameList[14].py="changsha";

NameList[15].py="nanjing";

NameList[16].py="guiyang";

NameList[17].py="nanning";

NameList[18].py="hangzhou";

NameList[19].py="nanchang";

NameList[20].py="guangzhou";

NameList[21].py="fuzhou";

NameList[22].py="taipei";

NameList[23].py="haikou";

NameList[24].py="huhhot";

NameList[25].py="yinchuan";

NameList[26].py="urumqi";

NameList[27].py="lahsa";

NameList[28].py="macau";

NameList[29].py="beijing";

NameList[30].py="shanghai";

NameList[31].py="hongkong";

NameList[32].py="tianjin";

NameList[33].py="chongqing";

for (i=0;i<NAME_NO;i++)

{

s0=0;

f=NameList[i].py;

for (r=0;*(f+r)!='\0';r++)

/ 方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字/

s0=*(f+r)+s0;

NameList[i].k=s0;

}

}

void CreateHashList() //建立哈希表

{

inti;

for (i=0; i<HASH_LEN;i++)

{

HashList[i].py="";

HashList[i].k=0;

HashList[i].si=0;

}

for (i=0;i<HASH_LEN;i++)

{

intsum=0;

intadr=(NameList[i].k)%M; //哈希函数

intd=adr;

if(HashList[adr].si==0) //如果不冲突

{

HashList[adr].k=NameList[i].k;

HashList[adr].py=NameList[i].py;

HashList[adr].si=1;

}

else //冲突

{

do

{

d=(d+NameList[i].k%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1; //查找次数加1

}while (HashList[d].k!=0);

HashList[d].k=NameList[i].k;

HashList[d].py=NameList[i].py;

HashList[d].si=sum+1;

}

}

}

intFindList() //查找

{

charname[20]={0};

ints0=0,r,sum=1,adr,d;

printf("\n请输入城市名称:");

scanf("%s",name);

for (r=0;r<20;r++) //求出姓名的拼音所对应的整数(关键字)

s0+=name[r];

adr=s0%M; //使用哈希函数

d=adr;

if(HashList[adr].k==s0) //分3种情况进行判断

{

printf("\n名称:%s 关键字:%d 查找长度为: 1",HashList[d].py,s0);

cout<<endl;

return 0;

}

else if (HashList[adr].k==0)

{

printf("无此记录!");

cout<<endl;

return 1;

}

else

{

intg=0;

do

{

d=(d+s0%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1;

if (HashList[d].k==0)

{

printf("无此记录! ");

cout<<endl;

g=1;

return 1;

}

if (HashList[d].k==s0)

{

printf("\n名称:%s 关键字:%d 查找长度为:%d",HashList[d].py,s0,sum);

cout<<endl;

g=1;

return 0;

}

}while(g==0);

}

}

void Display() // 显示哈希表

{

inti;

floataverage=0;

for(i=0; i<HASH_LEN; i++)

{

if(HashList[i].k%M==0)

HashList[i].py="";

}

printf("\n\n地址\t关键字\t\t搜索长度\tH(key)\t 名称\n"); //显示的格式

for(i=0; i<HASH_LEN; i++)

{

printf("%d ",i);

printf("\t%d ",HashList[i].k);

printf("\t\t%d ",HashList[i].si);

printf("\t\t%d ",HashList[i].k%M);

printf("\t %s ",HashList[i].py);

//cout<<" "<<HashList[i].py<<endl;

printf("\n");

//cout<<i<<" "<<HashList[i].k<<" "<<HashList[i].si<<" "<<HashList[i].k%M<<" "<<HashList[i].py<<endl;

}

for (i=0;i<HASH_LEN;i++)

average+=HashList[i].si;

average/=NAME_NO;

printf("\n\n平均查找长度:ASL(%d)=%f \n\n",NAME_NO,average);

}

void DeleteList()

{

charname[20]={0};

ints0=0,r,sum=1,adr,d;

printf("\n请输入城市名称:");

scanf("%s",name);

for (r=0;r<20;r++) //求出姓名的拼音所对应的整数(关键字)

s0+=name[r];

adr=s0%M; //使用哈希函数

d=adr;

if(HashList[adr].k==s0) //分3种情况进行判断

{

printf("\n名称:%s 关键字:%d 查找长度为: 1",HashList[d].py,s0);

cout<<endl;

cout<<"删除成功!"<<endl;

s0=0;

HashList[d].py=""; //名字的拼音

HashList[d].k=0; //拼音所对应的整数

HashList[d].si=0;

}

else if (HashList[adr].k==0)

printf("无此记录!无法执行删除操作!");

else

{

intg=0;

do

{

d=(d+s0%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1;

if (HashList[d].k==0)

{

printf("无此记录!无法执行删除操作!");

g=1;

}

if (HashList[d].k==s0)

{

printf("\n名称:%s 关键字:%d 查找长度为:%d",HashList[d].py,s0,sum);

cout<<endl;

cout<<"已删除成功!"<<endl;

s0=0;

HashList[d].py=""; //名字的拼音

HashList[d].k=0; //拼音所对应的整数

HashList[d].si=0;

//Display();

g=1;

}

}while(g==0);

}

}

void EnterList()

{

/*char name[20]={0};

int s0=0,r,sum=1,adr,d,h;

printf("\n请输入姓名的拼音:");

scanf("%s",name);

for (r=0;r<20;r++) //求出姓名的拼音所对应的整数(关键字)

s0+=name[r];*/

charst[20];

char*xin;

xin=st;

ints0=0,r,sum=1,adr,d,h;

printf("\n请输入城市名称的拼音:");

cin>>xin;

//cout<<xin<<endl;

for (r=0;*(xin+r)!='\0';r++)

{

/ 方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字/

s0=(int)(*(xin+r))+s0;

}

//cout<<s0<<endl;

adr=s0%M; //使用哈希函数

d=adr;

if(HashList[adr].k==s0) //分3种情况进行判断

{

printf("\n名称:%s 关键字:%d 查找长度为: 1",HashList[d].py,s0);

cout<<endl;

cout<<"已存在于表中,无需插入!"<<endl;

}

else if (HashList[d].k==0)

{

printf("插入成功!");

HashList[d].py=xin;

HashList[d].k=s0;

HashList[d].si=1;

h=1;

cout<<endl;

}

else

{

intg=0,h=0;

do

{

d=(d+s0%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1;

if (HashList[d].k==0)

{

printf("插入成功!");

HashList[d].py=xin;

HashList[d].k=s0;

HashList[d].si=sum;

h=1;

cout<<endl;

g=1;

}

if (HashList[d].k==s0)

{

printf("\n名称:%s 关键字:%d 查找长度为:%d",HashList[d].py,s0,sum);

cout<<endl;

cout<<"已存在于表中,无需插入!"<<endl;

g=1;

}

}while(g==0);

}

if(h==0)

return;

else

{

NAME_NO++;

NameList[NAME_NO-1].py=xin;

intsum=0;

intadr=(NameList[NAME_NO-1].k)%M; //哈希函数

intd=adr;

if(HashList[adr].si==0) //如果不冲突

{

HashList[adr].k=NameList[NAME_NO-1].k;

HashList[adr].py=NameList[NAME_NO-1].py;

HashList[adr].si=1;

}

else //冲突

{

do

{

d=(d+NameList[NAME_NO-1].k%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1; //查找次数加1

}while (HashList[d].k!=0);

HashList[d].k=NameList[NAME_NO-1].k;

HashList[d].py=NameList[NAME_NO-1].py;

HashList[d].si=sum+1;

}

}

}

void main()

{

charch1;

printf("\n 哈希表\n");

printf(" -------------------------------------------\n");

printf(" | D. 显示哈希表 |\n");

printf(" | F. 查找 |\n");

printf(" | S. 删除 |\n");

printf(" | E. 插入 |\n");

printf(" | Q. 退出 |\n");

printf(" -------------------------------------------\n");

InitNameList();

CreateHashList ();

while(1)

{

printf("\n Option-:");

fflush(stdin);

ch1=getchar();

if (ch1=='D'||ch1=='d')

Display();

else if (ch1=='F'||ch1=='f')

FindList();

else if (ch1=='S'||ch1=='s')

DeleteList();

else if (ch1=='E'||ch1=='e')

EnterList();

else if (ch1=='Q'||ch1=='q')

return;

else

{

printf("\n请输入正确的选择!");

}

}

}

相关文章
|
缓存 JSON tengine
CDN 预热功能| 学习笔记
快速学习 CDN 预热功能。
|
监控 搜索推荐 数据安全/隐私保护
深入探索iOS 14的隐私保护功能
本文将深入探讨iOS 14操作系统中的隐私保护功能,包括新的隐私指示器、应用程序跟踪透明度以及增强的隐私设置。我们将分析这些功能如何提高用户对个人数据的控制权,并讨论它们对应用开发者和广告行业的影响。
423 28
|
11月前
|
人工智能 算法 搜索推荐
云端问道11期方案教学-创建专属AI助手-阿里云百炼产品能力分享
阿里云百炼产品能力分享旨在帮助用户深入了解百炼的核心功能,并快速将大模型与系统结合。主要内容包括:1. 百炼的产品定位和能力简介,涵盖模型推理、应用搭建等;2. 知识检索RAG智能体的应用能力和优势,介绍其高效构建知识库的步骤及常见问题;3. 最佳落地案例实践,如宠物行业AI助手和产业分析类互联网企业的Copilot机器人。通过这些内容,用户可以全面掌握百炼在实际业务中的应用方法和效果。
376 0
|
Java Unix Linux
开源项目推荐:IM开源即时通讯软件收集,请重点关注Telegram/野火/flamingo
开源项目推荐:IM开源即时通讯软件收集,请重点关注Telegram/野火/flamingo
4794 0
|
机器学习/深度学习 人工智能 安全
智能之网:探索AI在物联网中的应用与挑战
随着科技的飞速发展,人工智能(AI)已经渗透到我们生活的方方面面,特别是在物联网(IoT)领域的应用日益广泛。本文将探讨AI技术如何在物联网中发挥作用,提升设备智能化水平,优化数据管理,以及在实现这一过程中遇到的技术、安全和伦理等挑战。通过分析具体案例,我们将揭示AI和物联网结合带来的创新机遇及其对未来社会可能产生的影响。
|
人工智能 JSON 机器人
[译][AI OpenAI-doc] 延迟优化
本指南涵盖了一系列核心原则,您可以应用这些原则来改善在各种LLM相关用例中的延迟。这些技术来自于与广泛的客户和开发人员在生产应用程序上的合作,因此无论您正在构建什么——从细粒度的工作流程到端到端的聊天机器人,都应该适用!
[译][AI OpenAI-doc] 延迟优化
|
C++ Python
量化交易系统开发详细步骤/需求功能/策略逻辑/源码指南
Developing a quantitative trading system involves multiple steps, and the following is a possible development process
|
关系型数据库 Serverless 分布式数据库
高峰无忧,探索PolarDB PG版Serverless的弹性魅力
在数字经济时代,数据库成为企业命脉,面对爆炸式增长的数据,企业面临管理挑战。云原生和Serverless技术革新数据库领域,PolarDB PG Serverless作为阿里云的云原生数据库解决方案,融合Serverless与PostgreSQL,实现自动弹性扩展,按需计费,降低运维成本。它通过计算与存储分离技术,提供高可用性、灾备策略和简化运维。PolarDB PG Serverless智能应变业务峰值,实时监控与调整资源,确保性能稳定。通过免费体验,用户可观察其弹性性能和价格力,感受技术优势。
软链接,创建软链接,可以将文件和文件夹链接到其他位置,使用ln -s 被链接的文件或文件夹 建立软链接的地方,ls可以查看全部文件,pwd可以查看当前文件地址,~代表home目录,ls -l可以查链接
软链接,创建软链接,可以将文件和文件夹链接到其他位置,使用ln -s 被链接的文件或文件夹 建立软链接的地方,ls可以查看全部文件,pwd可以查看当前文件地址,~代表home目录,ls -l可以查链接
|
人工智能 物联网 vr&ar
未来智能家居技术的发展趋势与应用前景
随着科技的不断进步,智能家居技术正以惊人的速度改变着我们的生活方式。本文将探讨未来智能家居技术的发展趋势,以及其在日常生活中的应用前景,为读者带来对未来生活的一瞥。