第十五题用拉链法实现散列表 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;
}

 

HASH表的实现(拉链法) - C/C++

本文的一些基本概念参考了一部分百度百科,当然只保留了最有价值的部分,代码部分完全是自己实现! 简介 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据...
  • liaoshengshi
  • liaoshengshi
  • 2015-08-05 19:34:47
  • 1745

基于拉链法的散列表

#include //基于拉链法的散列表 //散列表通常一个难点就是出现键冲突后,如果进行冲突解决, //基于拉链法的散列表给每个键分配一个链表,当出现键冲突时, //将冲突键的条目项都挂接到一个...
  • liujianfeng1984
  • liujianfeng1984
  • 2015-08-13 07:03:19
  • 1878

拉链法实现哈希表

/* *哈希表 拉链法 */ #include #include #define MinTableSize 10 typedef int ElemType; typedef un...
  • shijiemoxing
  • shijiemoxing
  • 2011-08-16 19:00:14
  • 4991

哈希表查找 — 拉链法

散列表(也叫哈希表),是根据关键字值而直接进行访问的数据结构。 本文采用除留余数法构造散列函数。 本文采用拉链法处理冲突。 根据原始数组建立一个哈希表,哈希表为一个链表(一定要区分数组和链表),且要求...
  • learn_sunzhuli
  • learn_sunzhuli
  • 2015-07-26 17:33:06
  • 2932

基于拉链法的散列表(c++版)

HashTable.h#pragma once #include #include template class HashTable { private: class List {...
  • RGBMarco
  • RGBMarco
  • 2017-08-12 15:03:32
  • 88

拉链法哈希表的设计与实现

  • 2014年07月08日 15:58
  • 25KB
  • 下载

第7天:散列HASH(四)冲突解决办法之外部拉链法

tobe
  • ddlqhd
  • ddlqhd
  • 2013-12-31 20:20:06
  • 735

哈希表(闭散列、拉链法--哈希桶)

哈希表,也称散列表,是一种通过key值来直接访问在内存中的存储的数据结构。它通过一个关键值的函数(被称为散列函数)将所需的数据映射到表中的位置来访问数据。...
  • xxpresent
  • xxpresent
  • 2017-02-20 11:03:57
  • 1335

HashTable哈希表拉链法实现(C语言)

//哈希表的实现 //邱于涵QQ1031893464 //2017年5月3日14:43:48 #include #include #include typedef struct node{ c...
  • u012997311
  • u012997311
  • 2017-05-03 14:45:40
  • 583

哈希表的【构造方法】【冲突处理方法】及【哈希拉链法的简单代码实现】

由于哈希表的查找高效性,在平时的算法中用的也是比较多。例如:字符串、单词个数的统计,只出现一次字符或者数字的统计,两个集合相同元素的查找等等,还有插入删除的高效(链地址法)都可以用哈希表来解决。所以这...
  • gogoky
  • gogoky
  • 2014-09-08 11:04:10
  • 1818
收藏助手
不良信息举报
您举报文章:第十五题用拉链法实现散列表 POWERBY KTL
举报原因:
原因补充:

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