2014广工数据结构实验报告哈希表.docx

2014广工数据结构实验报告哈希表.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构设计性实验报告 课程名称 数据结构实验■ 题目名称 哈希表 学生学院_ 计算机学院 专业班级 学 号 学生姓名 指导教师 2015 年7 月2 日 1. 题目 采用哈希表为存储结构,实现抽象数据类型 HashTable 。 ADT HAS{ 数据对象 D:D 是具有相同特性的数据元素的集合。 数据关系 R :根据设定的哈希函数和处理冲突的方法将一组关键字映像到一个连续的有 限地址集上,并以关键字在地址集中的“像” 作为记录在表中的存储位置, 这种表称为哈希 表。这一映像过程称为造表或散列,所得存储位置称哈希地址或散列地址。 基本操作: TOC \o "1-5" \h \z InitHash( &H) 操作结果:初始化哈希表 H。 DestoyHash( &H) 初始条件:哈希表 H 已存在。 操作结果:销毁哈希表 H。 CreateHash(&H) 初始条件:哈希表 H 已存在。 操作结果:构造哈希表 H。 SearchHash(H) 初始条件:哈希表已存在。 操作结果:查找哈希表 H 中元素。 InsertHash(&H) 初始条件:哈希表 H 已存在。 操作结果:插入元素到哈希表 DeleteHash( &H, key, & e) 初始条件:哈希表已存在且非空。 操作结果:删除H的第i个元素,并用e返回其值,H的长度减1。 } ADT List 3. 算法设计 #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include<time.h> #define random(x) (rand()%x) #define OK 1 #define SUCCESS 1 #define UNSUCCESS 0 #define DUPLICAPE -1 #define OVERFLOW 0 typedef int KeyType; typedef int Status; typedef struct { KeyType key; int tag; }RecordrdType, RcdType; typedef struct { RcdType *rcd; int size; int count; }HashTable; int InitHash(HashTable *H, int size){ // 初始化哈希表 int i; H->rcd=(RcdType*)malloc(size*sizeof(RcdType)); if(NULL==H ->rcd)return OVERFLOW; for(i=0;i<=size;i++)H ->rcd[i].tag=0; H->size=size; H->count=0; return OK; } int DestoyHash(HashTable *H)// 销毁哈希表 { free(H ->rcd); H->rcd=NULL; H->count=0; H->size=0; return OK; } int SearchHash(HashTable H, KeyType key , int &p,int &c ){ //查找哈希表 c=0; p=key%H.size;// 求得哈希地址 -1==H.rcd[p].tag)){while(H.rcd[p].tag!=0&&(H.rcd[p].key!=key|| p=(p+1)%H.size;c++; -1==H.rcd[p].tag)){ }// 求得下一探测地址 if(H.rcd[p].key==key)return SUCCESS; else return UNSUCCESS; int InsertHash(HashTable *H, RcdType e){// 哈希表的插入 int c=0,j; if(SUCCESS==SearchHash(*H,e.key,j,c)) return -1; else { H ->rcd[j]=e;H ->rcd[j].tag=1;++H ->count; return c; } } int DeleteHash(HashTable *H,KeyType key,RcdType e){ //哈希表的删除 int j,c; if(UNSUCCESS==SearchHash(*H,key,j,c)) return UNSUCCESS; else { e=H->rcd[j]; H->rcd[j].tag= -1; H->count --; return SUCCESS; } } void display(HashTable *H){ printf("\n 哈希表数据 :"); fo

文档评论(0)

497721292 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档