📄 实验七查找.cpp
字号:
#include<stdio.h>
#include<string.h>
#define HM 20
#define M 19
#define FREE 0
#define SUCESS 1
#define UNSUCESS 0
typedef int keytype;
// 爱悠游 www.aiyoy.com bbs.aiyoy.com
//有问题? 来 爱悠游计算机技术讨论区:http://www.aiyoy.com/bbs/forumdisplay.php?fid=39
typedef struct
{
keytype key; //学号
char name[10];
char score[10];
}hashtable;
int h(keytype key)
{
return(key%M);
}
int HashSearch(hashtable ht[],keytype key)
{ //程序填空①
int i=0,pos;
do
{
pos=(h(key)+i)%M;
if(ht[pos].key==key) return pos;
if(ht[pos].key==UNSUCESS) return pos;
}while (++i<HM);
return -1;
}
int HashInsert(hashtable ht[],keytype key)
{ //程序填空②
int sign;
sign=HashSearch(ht,key);
if(sign==-1)
{
printf("表满错误,终止程序执行");
}
else
{
if(ht[sign].key==key)
printf("重复的关键字");
else
{
ht[sign].key=key;
printf("\n请输入该学生名字:");
scanf("%s",&ht[sign].name);
printf("\n请输入该学生成绩:");
scanf("%s",&ht[sign].score);
return 1;
}
}
return 0;
}
void HashCreat(hashtable ht[])
{
int i,n;
keytype key1;
printf("请输入元素个数(要小于表长%d):\n",HM);
scanf("%d",&n);
for(i=0;i<n;)
{
printf("请输入学号、姓名、成绩:\n");
scanf("%d",&key1);
if(HashInsert(ht,key1))
i++;
}
printf("哈希表如下:\n");
for(i=0;i<HM;i++)
{
printf("%d\t%d\t%s\t%s\n",i,ht[i].key,ht[i].name,ht[i].score);
}
}
void main()
{
hashtable ht[HM];
keytype key=0;
char choice;
int i;
for(i=0;i<HM;i++)
{
ht[i].key=0;
strcpy(ht[i].name,"null");
strcpy(ht[i].score,"null");
}
printf("建立哈希表:\n");
HashCreat(ht);
do{
printf("请输入要查找的元素关键字的值:\n");
scanf("%d",&key);
i=HashSearch(ht,key);
if(ht[i].key==key)
{
printf("表中存在关键字为%d的元素:\n\t%d\t%s\t%s\n",key,key,ht[i].name,ht[i].score);
printf("该元素的位置为:%d\n",i);
}
else
printf("没有查找到!\n");
printf("继续或退出(C/Q):\n");//注意区分大小写
scanf("%s",&choice);
}
while(choice=='C');
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -