赞
踩
小甲鱼数据结构课程的改良版:
//散列表(哈希表)的创建、初始化、插入与查找 #include<stdlib.h> #include<iostream> using namespace std; #define HASHSIZE 13 #define NULLKEY -32456 //哈希表初始化的值 //定义哈希表结构 typedef struct { int *elem; //数据元素的基址,动态分配数组 int count; //当前数据元素的个数 }HashTable; //哈希表初始化 int InitHashTable(HashTable *H) { H->count = HASHSIZE; H->elem = (int *)malloc(HASHSIZE * sizeof(int)); if (!H->elem) { return -1; } for (int i = 0; i < HASHSIZE; i++) { H->elem[i] = NULLKEY; } return 0; } //采用的散列函数——除留余数法 int HashFunction(int key, int p) { return(key % p); //p <= HASHSIZE,质数 } //插入关键字到哈希表 void InsertHashTable(HashTable *H, int key) { int addr; addr = HashFunction(key, HASHSIZE); //int faddr; //faddr = addr; //int i = 1; while (H->elem[addr] != NULLKEY) { addr = HashFunction((addr + 1), HASHSIZE); //处理散列冲突的方法:开放定址法—线性探索 //相当于 /* addr = HashFunction((faddr + i), HASHSIZE); i++; */ } H->elem[addr] = key; } //哈希表查找关键字的地址 int SearchHashTable(HashTable *H, int key) { int addr = HashFunction(key, HASHSIZE); while (H->elem[addr] != key) { if (H->elem[addr] == NULLKEY) { cout << "查找失败" << endl; return -1; } addr = HashFunction((addr + 1), HASHSIZE); if (addr == HashFunction(key, HASHSIZE)) { cout << "查找失败" << endl; return -1; } } return addr; } int main() { return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。