哈希表的插入删除等操作

上传人:碎****木 文档编号:220861092 上传时间:2021-12-09 格式:DOCX 页数:2 大小:19.76KB
返回 下载 相关 举报
哈希表的插入删除等操作_第1页
第1页 / 共2页
哈希表的插入删除等操作_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《哈希表的插入删除等操作》由会员分享,可在线阅读,更多相关《哈希表的插入删除等操作(2页珍藏版)》请在金锄头文库上搜索。

1、哈希表的插入删除等操作#include #include #include #include #define MAXSIZE 12 /哈希表的最大容量,与所承受的哈希函数有关enum BOOLFalse,True;enum HAVEORNOTNULLKEY,HAVEKEY,DELKEY;/哈希表元素的三种状态,没有记录、有记录、有过记录但已被删除 typedef struct/定义哈希表的构造 int elemMAXSIZE;/数据元素体HAVEORNOT elemflagMAXSIZE; /元素状态标志,没有记录、有记录、有过记录但已被删除int count; /哈希表中当前元素的个数 Ha

2、shTable; typedef structint keynum;/记录的数据域,只有关键字一项 Record; void InitialHash(HashTable&); /初始化哈希表void PrintHash(HashTable); / 显 示 哈 希 表 中 的 所 有 元素 BOOL SearchHash(HashTable,int,int&); / 在 哈 希 表 中 查 找 元素 BOOL InsertHash(HashTable&,Record); / 在 哈 希 表 中 插 入 元素 BOOL DeleteHash(HashTable&,Record); /在哈希表 中删

3、除元素 int Hash(int); /哈希 函数 void main()HashTable H; /声明哈希表 H char ch,j=”y”; int position; Record R; BOOL temp;/-程序说明printf(“本程序会叫你如何对哈希表进展操作。n“);printf(“ 你 可 以 显 示 所 有 元 素 , 查 找 元 素 , n插 入 元 素 和 删 除 元 素 。n“); /- InitialHash(H); while(j!=”n”)printf(“1. 显 示 n“); printf(“2. 查 找 n“); printf(“3. 插 入 n“); p

4、rintf(“4. 删 除n“); printf(“5.退出n“);scanf(“ %c“,&ch); /输入操作选项 switch(ch)case ”1”:if(H.count) PrintHash(H); /哈希表不空else printf(“哈希表为空!n“); break;case ”2”:if(!H.count) printf(“哈希表为空 !n“); /哈希表空 else printf(“输入待查记录的关 键 字 :“); scanf(“%d“,&R.keynum); / 输 入 待 查 记 录 的 关 键字 temp=SearchHash(H,R.keynum,position)

5、;/temp=True:记录查找成功;temp=False:没有找到待查记录 if(temp) printf(“要查找的元素在第%d 个n“,position); else printf(“元素不存在!n“); break;case ”3”:if(H.count=MAXSIZE) / 哈 希 表 已 满 printf(“ 哈 希 表 已满!n“); break; printf(“输入要插入的记录 :“); scanf(“%d“,&R.keynum); /输入要插入的记录 temp=InsertHash(H,R);/temp=True:记录插入成功;temp=False:已存在关键字一样的记录

6、if(temp) printf(“插入成功!n“); else printf(“插入失败!.已存在关键字一样的记录!n“); break;case ”4”:printf(“输入要删除记录的关键字 :“); scanf(“%d“,&R.keynum); /输入要删除记录的关键字 temp=DeleteHash(H,R);/temp=True:记录删除成功; temp=False:待删记录不存在 if(temp) printf(“记录删除成功!n“); else printf(“待删记录不存在!n“); break;default: j=”n”; printf(“程序完毕!nPress any k

7、ey to shut off the window!n“); getchar();getchar(); void InitialHash(HashTable &H) /哈希表初始化 int i;H.count=0;for(i=0;iMAXSIZE;i+) H.elemflagi=NULLKEY; void PrintHash(HashTable H)/显示哈希表全部元素及其所在位置int i;for(i=0;iMAXSIZE;i+) /显示哈希表中记录所在位置if(H.elemflagi=HAVEKEY) / 只 显 示 标 志 为 HAVEKEY( 存 放 有 记 录 ) 的 元素print

8、f(“%-4d“,i); printf(“n“);for(i=0;i=MAXSIZE) p=p%MAXSIZE; /循环搜寻if(p=p1) return False; /整个表已搜寻完,没有找到待查元素 if(k=H.elemp&H.elemflagp=HAVEKEY) /查找成功,p 指示待查元素位置 return True; else return False; /查找不成功 BOOL InsertHash(HashTable &H,Record e)/查找不成功时插入元素 e 到开放定址哈希表H 中,并返回 True,否那么返回 False int p; if(SearchHash(H

9、,e.keynum,p) /表中已有与 e 有一样关键字的元素 return False; elseH.elemflagp=HAVEKEY; / 设 置 标 志 为 HAVEKEY , 表 示 该 位 置 已 有 记录 H.elemp=e.keynum;/插入记录H.count+;/哈希表当前长度加一return True; BOOL DeleteHash(HashTable &H,Record e)/在查找成功时删除待删元素e,并返回 True,否那么返回 False int p;if(!SearchHash(H,e.keynum,p) /表中不存在待删元素 return False; elseH.elemflagp=DELKEY; /设置标志为 DELKEY,说明该元素已被删除 H.count-;/哈希表当前长度减一 return True; int Hash(int kn)/哈希函数:H(key)=key MOD 11 return (kn%11);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号