⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 实验七查找.cpp

📁 哈希表的建立、查找。设有若干个学生的考试成绩
💻 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 + -