hashtable.zip

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 2
    下载次数
  • 2013-07-11 19:06
    上传日期
多种散列存储方式的效率分析,包含闭散列,开散列,桶扩充
hashtable.zip
  • hashtable.cpp
    4KB
内容介绍
#include "stdafx.h" #include<iostream> #include<string> #include<stdlib.h> #include<fstream> #define datatype int using namespace std; const int MaxSize=10000; //线性探测再散列 struct celltypeClose { int key; datatype data; }; celltypeClose a[MaxSize]; int x=0,as=0,num=0; void HashFunction(int &in,int &address) { address=in%x; } //拉链法 struct celltypeOpen { int key; datatype data; celltypeOpen *next; }; celltypeOpen b[MaxSize]; int bs=0; //桶扩充法 struct celltypeExtend { int key; datatype data; celltypeExtend *next; }; celltypeExtend c[MaxSize]; int cs=0; void Insert() { int inputtemp,address,address2,temp,j=0; celltypeOpen *p=NULL; celltypeOpen *q=NULL; celltypeExtend *m=NULL; celltypeExtend *n=NULL; for(;;) { cout<<"\n请输入插入元素key值,10010结束:"<<endl; cin>>inputtemp; if(inputtemp==10010) break; HashFunction(inputtemp,address); address2=address; for(;;) { if(a[address2].key==NULL&&a[address2].data==NULL) { num++; as++; a[address2].key=inputtemp; cout<<"闭散列法:存储地址为:"<<address2<<endl; break; } else { address2++; as++; temp=address2; HashFunction(temp,address2); } if(address==address2) { cout<<"\n已经没有存储空间\n"; break; } } p=&b[address]; for(int i=1;;i++) { if(p- rel='nofollow' onclick='return false;'>next==NULL) { bs++; q=new celltypeOpen; p->next=q; q->key=inputtemp; q->next=NULL; cout<<"拉链法:存储地址为拉链"<<address<<"的第"<<i<<"个结点"<<endl; break; } else { p=p- rel='nofollow' onclick='return false;'>next; bs++; } } m=&c[address]; for(int i=1;;i++) { if(m->next==NULL) { cs++; n=new celltypeExtend; m->next=n; n->key=inputtemp; n->next=NULL; cout<<"桶扩充法:存储地址为"<<address<<"的第"<<i<<"个扩充桶结点"<<endl; break; } else { m=m- rel='nofollow' onclick='return false;'>next; cs++; } } } } void Find() { int inputtemp,address,address2,temp; celltypeOpen *p=NULL; celltypeExtend *m=NULL; for(;;) { cout<<"\n请输入查找元素key值,10010结束:"<<endl; cin>>inputtemp; if(inputtemp==10010) break; HashFunction(inputtemp,address); address2=address; for(int i=0;;i++) { if(a[address2].key==inputtemp) { cout<<"存储地址为:"<<address2; cout<<"顺延次数为:"<<i; break; } else { address2++; temp=address2; HashFunction(temp,address2); } if(address==address2) { cout<<"\n查无此元素"; break; } } p=&b[address]; for(int i=0;;i++) { if(p- rel='nofollow' onclick='return false;'>key==inputtemp) { cout<<"存储地址为拉链"<<address<<"的第"<<i<<"个扩充桶"<<endl; break; } else if(p- rel='nofollow' onclick='return false;'>next==NULL) { cout<<"查无此元素"; break; } else p=p->next; } m=&c[address]; for(int i=0;;i++) { if(m->key==inputtemp) { cout<<"桶扩充法:存储地址为"<<address<<"的第"<<i<<"个扩充桶"<<endl; break; } else if(m- rel='nofollow' onclick='return false;'>next==NULL) { cout<<"查无此元素"; break; } else m=m->next; } } } void Account() { cout<<"平均查找次数为:"<<"/n闭散列:"<<as/num<<endl; cout<<"开散列:"<<bs/num<<endl; cout<<"桶扩充:"<<cs/num<<endl; cout<<"装填因子为:"<<(float)num/(float)x<<endl; } void menu(int p) { switch(p) { case 1: Insert(); break; case 2: Find(); break; case 3: Account(); break; case 4: exit(0); default:cout<<"输入错误!";break; } } int main() { cout<<"★★★★★★★★★散列表(命令行版)V1.0★★★★★★★★★"<<endl<<endl; char w='y'; int m,i; cout<<"输入存储空间大小 <="<<MaxSize<<endl; cin rel='nofollow' onclick='return false;'>>x; for(i=0;i<x;i++) { a[i].data=b[i].data=c[i].data=NULL; a[i].key=b[i].key=c[i].key=NULL; b[i].next=NULL; c[i].next=NULL; } do{ cout<<"请输入操作代码"<<endl<<"添加/1 查询/2 性能图像/3 "<<endl<<"退出/4"<<endl; cin>>m; menu(m); }while(w=='y'); return 0; }
评论
    相关推荐
    • 数据库课程设计
      一个数据库课程设计,access管理工具实现,用的是窗体!
    • 数据库课程设计
      数据库课程设计十分完整有需要的请下载啊谢谢
    • 数据库课程设计
      广东工业大学数据库课程设计,可视化界面连接数据库,delphi7
    • 数据库课程设计
      数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述
    • 数据库课程设计
      数据库课程设计》由周爱武、汪海威、肖云编著,遵循数据库课程设计的具体要求,独立于具体的数据库教材,从实际应用系统的需求着手,引导读者逐步完成数据库设计全过程,重点讲解数据库系统的需求分析、概念设计、...
    • 数据库课程设计
      数据库课程设计人事管理系统 数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计...
    • 数据库课程设计
      数据库课程设计,基于visual basic自助银行管理系统,界面很清爽,实用。同学都说好,所以就上传了!!!
    • 数据库课程设计
      数据库课程设计 里面有详细的文档资料 包含数据库一切的图 以及生成的数据库表文件 期末得分为优秀
    • 数据库课程设计
      可以作为数据库课程设计,也可以作为Java的课程设计,内容全面。本资源转载的,非本人原创。用于交流学习,特此申明!
    • 数据库课程设计
      数据库课程设计蓝天大学学生管理系统 2.商店信息管理系统 3.实验室机房收费管理系统 4.图书馆资料检索系统 5.企业库存管理系统 6.仓库管理系统 7.工程项目管理系统 8.教材管理系统 9.企业人事管理系统 10.企业财务...