大一C语言编程题?车票根据题意两两站点连线生成,金额和数量分别用随机数。数据存储:站点,车票,用户分别为3个结构体,用于对应数据库。
购买流程:检查输入数值有效性->检查车票库存-
给出哈希表用链接地址法处理冲突
c语言哈希表链地址法问题
结构体的成员x_和y_保存的是什么?
你的
intp=Hash(cell);
找到所项后,因为该项中要有一个链保存一系列元素,所以该链应为一指向hash元素的指针。
判断条件因为该项是否为NULL,若为NULL(地址不冲突),否则冲突,执行的是链表的插入操作,插入到前后首位随你意愿(一般插前边)。
哈希表链地址法中的冲突表是什么?
把数据中的其他的0替换为不可能在数据中出现的数,如-1,99999等,当有哈希地址得到数据时再做一次判断认为9999,-1均为0即可哈希查找的解决冲突
影响哈希查找效率的一个重要因素是哈希函数本身。当两个不同的数据元素的哈希值相同时,就会发生冲突。为减少发生冲突的可能性,哈希函数应该将数据尽可能分散地映射到哈希表的每一个表项中。解决冲突的方法有以下两种:
(1) 开放地址法
如果两个数据元素的哈希值相同,则在哈希表中为后插入的数据元素另外选择一个表项。
当程序查找哈希表时,如果没有在第一个对应的哈希表项中找到符合查找要求的数据元素,程序就会继续往后查找,直到找到一个符合查找要求的数据元素,或者遇到一个空的表项。
(2) 链地址法
将哈希值相同的数据元素存放在一个链表中,在查找哈希表的过程中,当查找到这个链表时,必须采用线性查找方法。
例3. 6是一个简单的哈希查找算法程序,你可以将它和本章结尾的有关代码一起编译连接成一个可执行程序。
例3.6一个简单的哈希查找算法程序
1: #include
2: #include
3: #include list.h
4: #include hash.h
5:
6: #define HASH_SIZE 1024
7:
8: static listnode_t *hashTable[HASH_SIZE];
9:
10: void insert(const char * s)
11: {
12: listnode_t *ele = newNode((void * ) s)
13: unsigned int h = hash(s) % HASH_SIZE;
14:
15: ele->next = hashTable[h]
16: hashTable[h] = ele;
17: }
18:
19: void print (void)
20: {
21: int h;
22:
23: for (h = 0; h < HASH_SIZE; h++)
24: {
25: listnode_t * lp = hashTalbe[h];
26:
27: if(lp == NULL)
28: continue;
29: printf([%d] , h);
30: while (lp)
31: {
32: printf(\t'%s' , lp->u.str)
33: lp = ip->next;
34: }
35: putchar ('\n');
36: }
37: }
38:
39: const char *search(const char *s)
40: {
39: unsigned int h = hash(s) % HASH_SIZE;
42: listnode_t * lp = hashTable[h];
43:
44: while (lp)
45: {
46: if (! strcmp (s, lp->u.str))
47: return lp->u.str;
48: lp = lp->next;
49: }
50: return NULL;
51: }
请参见:
3. 4 哪一种查找方法最方便?
3.5 哪一种查找方法最快?
3.8 怎样查找链表中的数据?
_____________________________________________
以下是一个简单示例:
#include
#include
using namespace std;
#define m 5 //人数
#define n 10 //哈希表长度
#define q 7 //随机数
struct name{
char *py;
int k;
};
name namelist[n];
struct hash{
char *py;
int k;
int s;
};
hash hashlist[n];
void listname()
{
char *f;
int s0,r,i;
namelist[0].py=as;
namelist[1].py=sa;
namelist[2].py=d;
namelist[3].py=f;
namelist[4].py=g;
for(i=0;i
s0=0;
f=namelist[i].py;
for(r=0;*(f+r)!='\0';r++)
s0+=*(f+r);
namelist[i].k=s0;
}
}
void creathash()
{
int i;
for(i=0;i
hashlist[i].py=;
hashlist[i].k=0;
hashlist[i].s=0;
}
for(i=0;i
int sum=0;
int adr=(namelist[i].k)%q;
int d=adr;
if(hashlist[adr].s==0)
{
hashlist[adr].py=namelist[i].py;
hashlist[adr].k=namelist[i].k;
hashlist[adr].s=1;
}
else
{
while(hashlist[d].k!=0)
{
d=(d+namelist[i].k%5+1)%q;
sum+=1;
}
hashlist[d].py=namelist[i].py;
hashlist[d].k=namelist[i].k;
hashlist[d].s=sum+1;
}
}
}
void find()
{
string nam;
int s0=0,r,sum=1,adr,d;
cout<<请输入姓名的拼音:<
for(r=0;r<20;r++)
s0+=nam[r];
adr=s0%q;
d=adr;
if(hashlist[adr].k==s0)
cout<<姓名:<
cout<<无此记录!<
{
int g=0;
while(g==0)
{
d=(d+s0%5+1)%q;
sum+=1;
if(hashlist[d].k==0)
{
cout<<无此记录!<
}
if(hashlist[d].k==s0)
{
cout<<姓名:<
}
}
}
}
void display()
{
int i;
float av=0;
for(i=0;i
cout<<姓名:<
for(i=0;i<7;i++)
{
av+=hashlist[i].s;
}
av/=m;
cout<<平均查找长度:=<
int main()
{
char x;
listname();
creathash();
cout<
if(x=='d'){display(); cout<
}
return 0;
}
用链表法的基本原理如何解决哈希冲突
向哈希表中添加一个节点B时,如果哈希表中已经存在一个具有相同哈希值的节点A,则将新节点B添加到以A为头节点的链表中。一组关键字序列为(27,17,9,19,16,43,53,8,63),用哈希函数H(key)=key MOD 8和链地
27 mod 8 = 3, 17 mod 8 = 1, 9 mod 8 = 1, 19 mod 8 = 3, 16 mod 8 = 0, 43 mod 8 = 3, 53 mod 8 = 5, 8 mod 8 = 0, 63 mod 8 = 7,于是链地址法解决冲突的哈希表为:
后面的冲突的关键字一般插入在链表的表头
相关文章
-
大一C语言在线编程题详细阅读
-
JAVA编程问题,图形用户界面编程详细阅读
Java图形用户界面编程我给你写,已经测试,你看合不合你的意思 package dongzi.pattern; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.ev
-
初学宏程序求一个简单的西门子变量详细阅读
求西门子宏程序,编程实例众所周知,西门子系统的一大亮点就是包含丰富的手动测量功能及各种各样的测量循环。但本期给大家介绍一下如何简单的编写一个西门子测量宏程序,用于测试
-
机器人教育和编程教育有哪些不同?详细阅读
编程教育和机器人教育有什么不一样?机器人编程的语言与计算机编程的语言略有不同。像青少年儿童机器人编程这块,乐高EV3的编程是模块化编程,非常适合零基础的孩子入门。VEX机器
-
VB编程与应用(电大)29讲详细阅读
谁有 VB编程与应用(电大)29讲视频教程下载,有其它的视频下载也可以VB编程与应用(电大)29讲为什么我下载的宁波电大的vb教程的视频有些打不开啊这个问题我也遇到过,其实只要
-
使用JAVA编程new File("xxx.xxx").详细阅读
java File f=new file(path,File.text);是什么意思由API查得 File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
- 详细阅读
-
编程猫社区怎么快速上首页啊详细阅读
编程猫社区入口该怎么进入点击编程猫官网进入社区即可。
打开电脑浏览器,搜索编程猫,打开编程猫官网.官方网站上有如图所示两种选项,可以选择创作或者三维代码岛.点击代码岛2.0 -
这样的连接筋用ug怎么编程才能留出详细阅读
用UG怎么编程加工这种筋,用哪个命令呢?先把该编程软件的常用命令,函数记好 要熟练掌握、熟练运用, 补充:UG有专门的模块,可以仿真刀路,然后到处程序, 补充:用UG这个编程目的就是自动
-
编程和系统发展史详细阅读
计算机系统的发展历史下面我们结合计算机的发展历史来回顾一下操作系统的发展历程。
1、第一代计算机(1945-1955):真空管和插件板
40年代中期,美国哈佛大学、普林斯顿高等研究院