第十五题用拉链法实现散列表 POWERBY KTL

原创 2006年06月12日 17:41:00

/*
15.编写对一组关键字,利用链地址法解决冲突,
散列函数为H(k),写出在此散列表中插入、删除元素的算法。
程序输入 参考书本p269 其中除留余数p为6 拉链长度M为6 关键字长度N为6
输入72 35 124 153 84 57
接着要求输入需要查找的关键字,本程序打印出来的是key而不是other,所以只要输出等于输入的关键字
程序就正确了。
*/
#include "stdio.h"
#include "stdlib.h"

#define p 6
#define M 6
#define N 6

typedef  int keytype;
typedef  char datatype;

typedef struct nodetype
{
 keytype key;
 datatype other;
 struct nodetype *pNext;
}chainhash;

chainhash *HTC[M];

int H(keytype k)
{
 return k%p;
}

chainhash *Chnsrch(chainhash *HTC[],keytype k)
{
 chainhash *q;
 q=HTC[H(k)];
 while(q&&(q->key!=k))
  q=q->pNext;
 return q;
}

void Cinsert(chainhash *HTC[],chainhash * s)
{
 int d;
 chainhash *q;
 q=Chnsrch(HTC,s->key);
 if(q)
  printf("ERROR");
 else
 {
  d=H(s->key);
  s->pNext=HTC[d];
  HTC[d]=s;
 }
}

void Init(chainhash * HTC[],int m,keytype key[],int n) //初始化HTC的函数
{
 int i;
 for(i=0;i<m;i++)
 {
  HTC[i]=NULL;
 }
 for(i=0;i<n;i++)
 {
  chainhash *s;
  s=(chainhash *)malloc(sizeof(chainhash));
  s->key=key[i];
  Cinsert(HTC,s);
 }
}

int main()
{
 int i;
 chainhash * d;
 keytype k;
 keytype key[N];
 printf("请输入你的关键字序列:");
 for(i=0;i<N;i++)
 {
  scanf("%d",&key[i]);
 }
 Init(HTC,M,key,N);
 printf("现在的散列表状态为:/n");
 for(i=0;i<M;i++){
  d=HTC[i];
  while(d!=NULL)
  {
   printf("%d ",d->key);
   d=d->pNext;
  }
 }
 printf("/n");
 printf("请输入你要查找的关键字:");
 scanf("%d",&k);
 d=Chnsrch(HTC,k);
 if(d->key==k)
 {
  printf("%d /n",d->key);
 }
 else{
  printf("发生错误。。。/n");
 }
 return 0;
}

 

相关文章推荐

数据结构学习笔记5-散列表(拉链法)

拉链法可以有效的解决散列表中的冲突问题,

应用散列表和外拉链表统计文本中单词个数

应用散列表和外拉链表统计英文单词个数, 其中外拉链表用的

散列表的设计与实现

  • 2013年11月07日 19:07
  • 24KB
  • 下载

散列表之链接法解决冲突

  • 2015年06月14日 10:19
  • 8KB
  • 下载

散列表的C语言实现-分离链接法

一:散列表的定义: 散列表的实现常常叫做散列,散列是一种用于以常数平均时间执行插入,查找,删除的技术,但是,那些需要元素间任何排序信息的操作将不会得到支持,如findmin,findmax等等。散列...

hash散列表的三种实现

  • 2015年04月22日 15:46
  • 535KB
  • 下载

散列表的C语言实现-开放定址法

头文件: #ifndef __HASHTABLE_H #define __HASHTABLE_H /*********************(平方)开放定址散列法***************...

散列表实现电话号码查询系统java

  • 2014年10月23日 14:40
  • 476KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第十五题用拉链法实现散列表 POWERBY KTL
举报原因:
原因补充:

(最多只允许输入30个字)