分离链接法实现:
一、完整代码:
//词频统计——哈利波特
//使用分离链接法
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
#include<math.h>
/*--------分离链接法的结构声明----------*/
#define KeyLength 15//关键词字符串的最大长度
#define MaxWordLen 80//所以单词的最大长度
typedef char ElementType[KeyLength+1];//关键词类型用字符串
typedef int Index;//散列地址类型
/*-----------单链表定义-------------*/
typedef struct LNode *PtrToLNode;
struct LNode{
ElementType Data;
PtrToLNode Next;
int Count;//记录单词出现的次数
};
typedef PtrToLNode Position;
typedef PtrToLNode List;
/*-------------散列表定义-----------------*/
typedef struct TblNode *HashTable;
struct TblNode{
int TableSize;//表的最大长度
List Heads; //指向链表头结点的数组
};
int Prime(int N)
{
//返回小于等于N的最大素数
int i,p;
if(N>=1&&N<=3)p=N;
else p=(N%2)?N:N-1;//取奇数
while(p<=N&&p>4){
for(i=(int)sqrt(p);i>2;i--)
if(!(p%i))break;//p不是素数
if(i==2)break;//p是素数
else p-=2;
}
return p;
}
/*-------------创建-----------------*/
HashTable CreateTable(int TableSize)
{
HashTable H;
int i;
H=(HashTable)malloc(sizeof(struct TblNode)) ;
//保证散列表最大长度是素数
H->