yzb版散列表

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<iostream>
#include<conio.h>
#include <iomanip.h>//引入iomanip以便能够使用cout,cin等函数

#define keyArrSize 11//关键字数组的长度
#define NULLKEY -1//表示数组中没有数据,可存放数据的标识

typedef struct {
	int length;//哈希表的长度
	int *address;//哈希表中存储数组地址
	int *key;//关键字数组存储地址
	int p;//为除数,p<=length
}HT;

void init(HT &a,int len,int p){//对哈希表进行初始化
   a.length=len;
   a.p=p;
   a.address=new int[a.length];
   a.key=new int[keyArrSize];
   int i;
   for(i=0;i<a.length;i++){
     a.address[i]=NULLKEY;
   }
   for(i=0;i<keyArrSize;i++){
		a.key[i]=NULLKEY;
   }
}
//创建关键字数组
void CreateKeyArr(HT &a){
/*	srand((unsigned int)time(NULL));
	int i;
	for(i=0;i<keyArrSize;i++){
		a.key[i]=rand()%100+1;//生产1-100的数到关键字数组中
	}
*/ int i;
	int b[]={16,46,32,40,70,27,42,36,24,49,64};
	for(i=0;i<keyArrSize;i++){
		a.key[i]=b[i];//生产1-100的数到关键字数组中
	}
}
//核心代码 创建哈希表
void createHT(HT &a){
	int i,t;
	for(i=0;i<keyArrSize;i++){
      t=*(a.key+i)%a.p;
	  while(a.address[t]>=0){//如果哈希表中的元素大于或等于0,则表示数组元素冲突
		  t++;
		  t=t%a.length;
	  }
	  //冲突结束,将数据存入表中
	  a.address[t]=a.key[i];
	}

}
//显示哈希表中的数据

void out(HT a)           //输出哈希表
{  int k=0;  //double s=0.0;
   system("cls");   cout<<"关键字值:";
   for(k=0;k<keyArrSize;k++) cout<<setw(5)<<a.key[k];           // 输出关键字序列(元素值)
   cout<<endl<<endl;
   
   cout<<"哈希函数:";
   cout<<"  H(key)= key % "<< a.p<<"     " ;           // 输出哈希函数(公式)本身
   cout<<"  哈希表长度:"<< a.length <<endl;           // 输出哈希表的总容量(大小)
   cout<<"序号值:";
   for(k=0;k<a.length;k++) cout<<setw(5)<<k;           // 输出哈希表各元素的序号 
   cout<<endl;
   cout<<"关键字:";
   for(k=0;k<a.length;k++) cout<<setw(5)<<a.address[k];  // 输出哈希表元素的数据(关键字的地址值)   
 
                    // 输出哈希表元素的数据   
   cout<<endl;    

}
void main(){
HT ht;
init(ht,15,13);
CreateKeyArr(ht);
out(ht);
createHT(ht);
out(ht);




}

制作不易,还请大家多多打赏,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客-杀生丸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值