数据结构哈希表,急对以下关键字序列建立哈希表{16,29,45,37,58,55,49,26,50,24,36,38},要求填充率为80%,用二次探测再散列法处理冲突:请给出哈希函数,画出此哈希表,并计算在等概率情况下查找成功

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/10 13:36:17
数据结构哈希表,急对以下关键字序列建立哈希表{16,29,45,37,58,55,49,26,50,24,36,38},要求填充率为80%,用二次探测再散列法处理冲突:请给出哈希函数,画出此哈希表,并计算在等概率情况下查找成功

数据结构哈希表,急对以下关键字序列建立哈希表{16,29,45,37,58,55,49,26,50,24,36,38},要求填充率为80%,用二次探测再散列法处理冲突:请给出哈希函数,画出此哈希表,并计算在等概率情况下查找成功
数据结构哈希表,急
对以下关键字序列建立哈希表{16,29,45,37,58,55,49,26,50,24,36,38},要求填充率为80%,用二次探测再散列法处理冲突:请给出哈希函数,画出此哈希表,并计算在等概率情况下查找成功的平均查找长度

数据结构哈希表,急对以下关键字序列建立哈希表{16,29,45,37,58,55,49,26,50,24,36,38},要求填充率为80%,用二次探测再散列法处理冲突:请给出哈希函数,画出此哈希表,并计算在等概率情况下查找成功
#include
#include
#include
#define MAXSIZE 20
#define MAX_SIZE 20 //人名的最大长度
#define HASHSIZE 60 //定义表长
#define SUCCESS 1
#define UNSUCCESS -1
typedef int Status; //为现有类型添加一个同义字
typedef char NA[MAX_SIZE]; // typedef 掩饰数组类型
typedef struct //记录
{
NA name;
NA xuehao; //关键字
NA tel;
}Stu; //查找表中记录类型
typedef struct //建立哈希表
{
Stu *elem[HASHSIZE]; //数据元素存储基址
int cou; //当前数据元素个数
int siz; //当前容量
}HashTable;
Status eq(NA x,NA y)
{
if(strcmp(x,y)==0)
return SUCCESS;
else return UNSUCCESS;
}
Status NUM_BER; //记录的个数 全局变量
Status NUM_BER1;
void Create(Stu* a) //创建新的通讯录
{
system("CLS"); //调用DOS命令CLS能够清屏
int i;
FILE *fp1,*fp2;
if((fp1=fopen("record.txt","r"))!=NULL) //打开文件
{
 fclose(fp1); //关闭文件
}
else
{
fp2=fopen("record.txt","w"); //如果不存在,就创建一个record.txt
fclose(fp2);
}
printf("\n输入要添加的个数:\n");
scanf("%d",&NUM_BER);
for(i=0;icou);
}
void SearchHash(HashTable* H,int c) //在通讯录里查找姓名关键字,c用来记录冲突次数,若查找成功,显示信息
{
int p,pp;NA NAME;
system("cls");
printf("\n请输入要查找记录的姓名:\n");
scanf("%s",NAME);
p=Hash(NAME);
pp=p;
while((H->elem[pp]!=NULL)&&(eq(NAME,H->elem[pp]->name)==-1))
pp=collision(p,c);
if(H->elem[pp]!=NULL&&eq(NAME,H->elem[pp]->name)==1)
{
printf("\n查找成功!\n查找过程冲突次数为%d.以下是您需要要查找的信息:\n\n",c);
printf("姓名:%s\n学号:%s\n电话号码:%s\n",H->elem[pp]->name,H->elem[pp]->xuehao,H->elem[pp]->tel);
}
else printf("\n此人不存在,查找不成功!\n");
}
void Modify(HashTable* H,int c) //在通讯录里修改某人信息
{
int p,pp;NA NAME;
system("cls");
printf("\n请输入要修改记录的姓名:\n");
scanf("%s",NAME);
p=Hash(NAME);
pp=p;
while((H->elem[pp]!=NULL)&&(eq(NAME,H->elem[pp]->tel)==-1))
pp=collision(p,c);
if(H->elem[pp]!=NULL&&eq(NAME,H->elem[pp]->tel)==1)
{
printf("\n以下是您需要修改的信息:");
printf("姓名:%s\n学号:%s\n电话号码:%s\n",H->elem[pp]->name,H->elem[pp]->xuehao,H->elem[pp]->tel);
(H->elem)[pp]->tel[0]='\0';
printf("请输入修改后记录的姓名:\n");
scanf("%s",H->elem[pp]->name);
printf("请输入修改后记录的学号:\n");
scanf("%s",H->elem[pp]->xuehao);
printf("请输入修改后记录的电话号码:\n");
scanf("%s",H->elem[pp]->tel);
printf("修改成功!");
}
else
printf("\n此人不存在,修改不成功!\n");
}
void Delete(HashTable* H,int c) //在通讯录里查找姓名关键字,若查找成功,显示信息然后删除
{
int m,p,pp;NA str;
m=0;
system("cls");
printf("\n请输入要删除记录的姓名:\n");
m++;
scanf("%s",str);
p=Hash(str);
pp=p;
while((H->elem[pp]!=NULL)&&(eq(str,H->elem[pp]->name)==-1))
pp=collision(p,c);
if(H->elem[pp]!=NULL&&eq(str,H->elem[pp]->name)==1)
{
printf("\n以下是您需要要删除的信息:\n\n",c);
printf("姓名:%s\n学号:%s\n电话号码:%s\n",H->elem[pp]->name,H->elem[pp]->xuehao,H->elem[pp]->tel);
(H->elem)[pp]->name[0]='\0';
printf("删除成功!");
}
else
printf("\n此人不存在,删除不成功!\n");
}
void Save(HashTable * H) //将记录保存到指定文件
{
system("CLS");
int i;
FILE* fp;
if((fp=fopen("record.txt","w"))!=NULL)
{
fprintf(fp,"\n");
for(i=0;ielem)[i]!='\0')
{
fprintf(fp,"学生姓名:%s\n",H->elem[i]->name);
fprintf(fp,"学生学号:%s\n",H->elem[i]->xuehao);
fprintf(fp,"学生电话号码:%s\n",H->elem[i]->tel);
 fprintf(fp,"");
printf("\n请输入一个任务选项>>>");
printf("\n");
scanf("%d",&num);
switch(num)
{
case 1:Create(a) ;break;
case 2:getin(a); break;
case 3:output(a); break;
case 4:CreateHash(H,a); break;
case 5:c=0;SearchHash(H,c); break;
case 6:c=0;Delete(H,c); break;
case 7:c=0;Modify(H,c); break;
case 8:Save(H); break;
case 9:return 0; break;
default:
printf("输入错误,请重新输入!");
printf("\n");
}
}
system("pause");
return 0;
}

数据结构哈希表,急对以下关键字序列建立哈希表{16,29,45,37,58,55,49,26,50,24,36,38},要求填充率为80%,用二次探测再散列法处理冲突:请给出哈希函数,画出此哈希表,并计算在等概率情况下查找成功 数据结构哈希表,急对以下关键字序列建立哈希表{16,29,45,37,58,55,49,26,50,24,36,38},要求填充率为80%,用二次探测再散列法处理冲突:请给出哈希函数,画出此哈希表,并计算在等概率情况下查找成功 数据结构 哈希表建立 数据结构排序的一个问题有N个关键字的序列,对其排序的最少交换次数是多少?我不是要时间复杂度,就是具体的次数, 【数据结构】请写出以下AOV网的拓扑排序序列 用一组{14,15,30,28,5,10}关键字序列,写出初始建堆过程图示,再根据初始堆写出堆排序过程图示.数据结构中的堆排序,急啊! 急……哈希表的构造问题!已知关键字序列为:{75,33,52,41,12,88,66,27},哈希表长为10,哈希函数H(key)=key % 7,解决冲突用线性探测法,构造哈希表并给出查找每个关键字的比较次数以及哈希表等概率条 数据结构问题:设一组初始记录关键字序列为(15,17,18,22,35,51,60),要求计算出成功查找时的平均查 数据结构与算法 由小到大写出以下时间复杂度的序列: 已知关键字序列{33,67,24,48,51,62,73},试构造平衡二叉树.急 求数据结构算法?求“假设有 1000个关键字为小于10000的整数的记录序列,请编写一种排序算法,要求以尽可能少的比较次数和移动次”的数据结构算法 数据结构 堆排序设一组记录关键字序列为(80,70,33,65,24,56,48),则用筛选法建成的初始堆为请写出每一步的具体步骤 数据结构B树的生成问题对于给定序列B树的生成图像唯一吗?比如:给定一组关键字{20,30,50,52,60,68,70}创建一棵3阶B树 数据结构堆排序下列关键字序列中,( )是堆.A.16,72,31,23,94,53 B.16,23,53,31,94,72C.16,53,23,94,31,72 D.94,23,31,72,16,53 已知关键字序列为{45,28,67,33,29,50},二叉排序树初始为空,要求:(A) 画出按正向(从关键字45开始)顺序插入结点建立的二叉排序树.(B) 画出按反向(从关键字50开始)顺序插入结点建立的 1.已知哈希函数为除余法(对7取余),关键字序列(49,10,16,79,13,20,76),分别画出利用线性探测法(表长为7)、链地址法处理冲突的哈希表 数据结构 为关键字序列{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}构造链地址法的散列表我不是太清楚散列表的长度是否该为26!然后首字母相同的朝后填!就是类似此种!只是换成了关键字,我不清 数据结构 填空题目 二叉排序树的平均查找长度设一组初始记录关键字序列为(20,12,42,31,18,14,28),则根据这些记录关键字构造的二叉排序树的平均查找长度 具体过程是怎么样的不会啊