赞
踩
程序代码:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define ElemType int #define HASHSIZE 11 #define NUM 9 #define NULLKEY -54321 typedef struct { ElemType elem[HASHSIZE]; int count; }HashTable; void InitHashTble(HashTable* H) { H->count = HASHSIZE; for (int i = 0; i < HASHSIZE; i++) { H->elem[i] = NULLKEY; } } int HashFunction(ElemType key, int p) { return(key % p); } void InsertHashTable(HashTable* H, ElemType key) { int address; address = HashFunction(key, HASHSIZE); while (H->elem[address] != NULLKEY) { address = HashFunction((address + 1), HASHSIZE); } H->elem[address] = key; } int SearchHashTable(HashTable* H, int key) { int address; address = HashFunction(key, HASHSIZE); if (H->elem[address] == NULLKEY) { return -1; } else { while (H->elem[address] != key) { address = HashFunction(address + 1, HASHSIZE); if (H->elem[address] == NULLKEY) { return -1; } } return address; } } int main() { HashTable* H=(HashTable*)malloc(sizeof(HashTable)); InitHashTble(H); int key; printf("请依次输入需要存储的%d个整数\n", NUM); for (int i = 0; i < NUM; i++) { printf("第%d个整数为:\n", i + 1); scanf("%d", &key); InsertHashTable(H, key); } printf("\n请输入你要查找的整数:\n"); scanf("%d", &key); int t = SearchHashTable(H, key); if (t == -1) { printf("查找失败!不存在该整数\n"); } else { printf("该整数存储在第%d个位置\n", t); } return 0; } |
运行截图:
本次的实验要求弄清楚最关键的两个模块,即插入和查找,首先要有哈希函数生成映射地址、有哈希表保存元素,然后要有自己设定的解决冲突的办法,这个程序是采用向下挪动一个办法,直到找到为空的地方保存。在查找中也是,先要通过哈希函数生成映射地址,通过这个地址参看哈希表中时候有元素,考虑到会有冲突的产生,那么必须要通过循环查找,要么找到元素,要么直到为空跳出查找。这也是这个程序的难点所在。总体来说,哈希表对于提高储存和查找效率方面有很大的提升。实验难度不是很大。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。