高手赐教:用散列表法编写电话号码查询系统(c语言)

a97077717 2012-12-13 02:15:34
(1) 设每个记录有下列数据项:电话号码、用户名、地址;
(2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;
(3) 采用双散列法解决冲突;
(4) 查找并显示给定电话号码的记录;
(5) 查找并显示给定用户名的记录。

哪位师兄 师姐看见的话 求救命啊。
...全文
415 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctreewang 2012-12-14
  • 打赏
  • 举报
回复
首先写个得到散列code的函数,百度很多 对两个字符串散列, 晚上很多例子的。。。。看一下你就懂了 http://blog.sina.com.cn/s/blog_70176ec00100m24v.html
科比布莱恩特 2012-12-14
  • 打赏
  • 举报
回复
引用 楼主 a97077717 的回复:
(1) 设每个记录有下列数据项:电话号码、用户名、地址; (2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表; (3) 采用双散列法解决冲突; (4) 查找并显示给定电话号码的记录; (5) 查找并显示给定用户名的记录。 哪位师兄 师姐看见的话 求救命啊。
不行散列表行吗?
newtee 2012-12-14
  • 打赏
  • 举报
回复
参考:
#include<stdio.h>
#include<string.h>
#define N 50
#define P1 47
#define LEN 20 
char tbl[N][LEN];
int H1(char *key)
{
	long k,d=0;
	int c;
	while(*key)
      d=d+*key++;
    k=d;
	k=((k*k)%10000-(k*k)%100)/100;
	return k%P1;
}
/*int H1(char *key)
{
	int temp[10];
	long k,d=0,e;
	int c,f,g;
	while(*key)
	  d=d+*key++;
    d=d*d;
	e=d;
	for(c=0;e!=0;c++)
	{
        e=e/10;
	}
    g=c;
    for(f=c;f>=0;f--)
	{
		temp[--g]=d%10;
		d/=10;
	}
	k=temp[c/2]*10+temp[c/2+1];
	return k%P1;

}*/
int Search(char *key_word )
{   
    int pos,c=5;
    pos=H1(key_word);
    if (strcmp(tbl[pos],key_word)==0)
        return  pos;
    while(tbl[pos][0]!='\0'&& strcmp(tbl[pos],key_word) ) 
        pos=(pos+c)%N;     
    if(tbl[pos][0]=='\0')
        return  -1;
    else  return  pos;
}
char *k_word[]={"Wangdepeng","caozuan","zhangji","baiyi","wangwang","xiaohun","xiaojun","wangan","lida","nijiang",
                "Wanghao","wangxiaoha","lijian","neicun","chenghao","lixiaoyang","lihui","lidada","wangxiaoxiao","caomimi",
				"Nidada","woshishui","pengpeng","xiaoyiyi","depeng","fadiande","zhuguanjun","baoshanwei","baowei","kouwei"};
void main()
{
	int count[N],i,pos,c,n;
	char k_name[LEN];
	char m;
	for(i=0;i<N;i++)
	{
		count[i]=0;
		tbl[i][0]='\0';
	}
	n=sizeof(k_word)/sizeof(k_word[i]);
    for(i=0;i<n;i++)
	{
		pos=H1(k_word[i]);
        c=5;
		while(tbl[pos][0]!='\0'&&strcmp(tbl[pos],k_word[i]))
		{
			count[pos]++;
			pos=(pos+c)%N;
		}
		strcpy(tbl[pos],k_word[i]);
	}
	for(i=c=0;i<N;i++)
	   if(tbl[i][0]!='\0')
	   	printf("%10s%c",tbl[i],++c%5==0? '\n':'\t');
	    printf("\n\n");
	for(i=c=0;i<N;i++)
		if(tbl[i][0]!='\0')
		printf("%4d%c",count[i],++c%5==0? '\n':'\t');
	    printf("\n\n");
	for(i=c=0;i<N;i++)
    if(tbl[i][0]!='\0')
     c+=count[i]+1;
    printf("ASL=%.2f\n\n",(float)c/n);  
    printf("Please input a keyword:");  
	for(;;)
	{
	gets(k_name);
    pos=Search(k_name);
    if(pos!=-1)  printf(" found at %d\n",pos);
    else   printf("not found ! \n");
	}
    m=getchar();
        
}



源码直接下载地址: https://pan.quark.cn/s/32a64cc0d812 LKH 算在中文中的表述为 LKH 算,它是一种用于处理 TSP(旅行商问题)与 VRP(车辆配送问题)等组合优化挑战的启发式算,并且该算是 Lin-Kernighan 启发式方的进一步发展。该算的开发与执行过程具有相当的挑战性,然而,它被认为是获取对称旅行商问题最优或接近最优答案的最有效途径之一。LKH 算的升级版本通过运用灵敏度分析来引导并约束搜索过程,从而使得该算能够在可接受的时间内为大规模问题找出最优解。通过计算实验的验证,证明该方具备高效性,能够在不足一秒的时间范围内寻得典型100座城市问题的最优方案,而对于典型的1000座城市问题,也能在不到一分钟的时间框内找到最优解。旅行商问题(TSP)是组合优化领域中研究最为深入的课题之一,该问题可以通过成本矩阵 C 的特性来进行分类。此问题可划分为对称性情形与非对称性情形,同时依据三角不等式的成立与否,可进一步区分为度量性情形与非度量性情形。TSP 的显著地位源于其广泛的实际应用,其中许多应用看似与旅行路径无直接关联。众多现实场景能够以 TSP 的形式来模拟,例如计算机内部布线、车辆路径规划、晶体结构分析、机器人导航控制、印刷电路板打孔定位以及时间表的制定等。TSP 作为一种典型的组合优化课题,其研究对于解决该学科范畴内的其他课题往往具有指导意义。事实上,组合优化领域的诸多突破均可追溯至对 TSP 问题的深入探索。计算方中广为人知的 branch and bound 技术最初便是在 TSP 的研究背景下被引入的。攻克 TSP 所面临的智力难题亦起到了推动作用,该问题的表述看似简单,却极难求解。当考虑到可能...
内容概要:本文研究了基于深度Q网络(DQN)与非正交多址接入(NOMA)技术相结合的无人机上行链路干扰管理方,并提供了完整的Python代码实现。通过构建DQN强化学习模型,动态优化无人机在复杂无线环境中的资源分配策略,有效缓解多用户接入带来的同频干扰问题,提升上行链路的通信效率与系统容量。研究充分融合了DQN在决策优化方面的自主学习能力与NOMA在频谱效率提升上的技术优势,重点探讨了在高动态、强干扰的无人机通信场景下,如何实现高效的干扰协调与功率控制。仿真实验验证了该方在不同用户密度和信道条件下的鲁棒性与优越性,显著降低了误码率并提高了系统吞吐量。; 适合人群:具备一定Python编程能力和机器学习基础,熟悉强化学习或无线通信领域的研究生、科研人员及相关领域工程师。; 使用场景及目标:①研究无人机通信系统中的动态干扰管理和资源调度问题;②学习DQN在通信网络优化中的建模、训练与部署流程;③复现并改进基于NOMA的多用户接入干扰抑制方案,推动智能通信算的实际应用; 阅读建议:此资源结合理论分析与代码实践,建议读者在掌握强化学习基本原理和无线通信基础知识的前提下,结合所提供的Python代码进行仿真实验,深入理解DQN与NOMA融合机制,并尝试调整网络结构、奖励函数及通信参数以进一步优化系统性能。

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧