• 大小: 9KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-22
  • 语言: C/C++
  • 标签: 数据结构  

资源简介

30个中国人姓名拼音,设计Hash表,平均查找长度不超过2,用除留余数法构造,用线性探测再散列,二次探测再散列和链地址法处理冲突。完成建表和查表操作。本人的课程设计作业

资源截图

代码片段和文件信息

#include
#include
#include
#include
#define HASH_LENGTH 50               //哈希表的长度         
#define M 47                         //随机数
#define NAME_NO 30                   //人名的个数        
typedef struct      
{   char *py;    //名字的拼音
    int k;       //拼音所对应的整数
}NAME;
NAME NameList[HASH_LENGTH];    //全局变量NAME       
typedef struct    //哈希表
{   char *py;   //名字的拼音
    int k;      //拼音所对应的整数
    int si;     //查找长度
}HASH;
HASH HashList1[HASH_LENGTH]HashList2[HASH_LENGTH];        //全局变量HASH
typedef struct node{
char *py;
int  k;
int  si;
struct node *next;
}NODE*Nodeptr;
NODE HashList3[HASH_LENGTH];
void InitNameList() //姓名(结构体数组)初始化          
{   char *f;
    int rs0i;
    NameList[0].py=“chenhong“;
    NameList[1].py=“fanghuaxia“;
    NameList[2].py=“geyuhao“;
    NameList[3].py=“houjie“;
    NameList[4].py=“jinxiangcheng“;
    NameList[5].py=“liuxiaozhen“;
    NameList[6].py=“panning“;
    NameList[7].py=“songjunrong“;
    NameList[8].py=“tangwenchao“;
    NameList[9].py=“wanglinna“;
    NameList[10].py=“xijianxin“;
    NameList[11].py=“yangpei“;
    NameList[12].py=“wujingqiu“;
    NameList[13].py=“zhoufanya“;
    NameList[14].py=“zhuyong“;
    NameList[15].py=“biyunpeng“;
    NameList[16].py=“hanfen“;
    NameList[17].py=“guojing“;
    NameList[18].py=“xiaorui“;
    NameList[19].py=“peiruoxuan“;
    NameList[20].py=“wenruiyan“;
    NameList[21].py=“luxun“; 
    NameList[22].py=“jiangfang“;
    NameList[23].py=“fujunning“;
    NameList[24].py=“youyao“;
    NameList[25].py=“linshu“;
    NameList[26].py=“majinlian“;
    NameList[27].py=“milaoshu“;
    NameList[28].py=“dengchao“;
    NameList[29].py=“sunshan“;
    for(i=0;i {   s0=0;
        f=NameList[i].py;
        for(r=0;*(f+r)!=‘\0‘;r++) 
/* 将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字*/
            s0=*(f+r)+s0;
        NameList[i].k=s0;

}
void CreateHashList() //建立哈希表   
{ int i;
    for(i=0; i {   HashList1[i].py=““;
        HashList1[i].k=0;
        HashList1[i].si=0;
HashList2[i].py=““;
        HashList2[i].k=0;
        HashList2[i].si=0;
HashList3[i].py=““;
        HashList3[i].k=0;
        HashList3[i].si=0;
HashList3[i].next=NULL;
}
    for(i=0;i {   int sum=0;
        int adr=(NameList[i].k)%M;  //哈希函数
        int d=adr;
//表1--线形探测再散列法处理冲突
        if(HashList1[adr].si==0)     //如果不冲突
{  HashList1[adr].k=NameList[i].k;
           HashList1[adr].py=NameList[i].py;
           HashList1[adr].si=1;
   }
       else   //冲突  
   { do
  {   d=(d+1)%HASH_LENGTH;     
              sum=sum+1;                    //查找次数加1    
  }while (HashList1[d].k!=0);
         HashList1[d].k=NameList[i].k;
         HashList1[d].py=NameList[i].py;
         HashList1[d].si=sum+1;
   }
   d=adr;
   sum=0;
   //表2--二次探测再散列法处理冲突
       if(HashList2[adr].si==0)     //如果不冲突
{  HashList2[adr].k=Na

评论

共有 条评论