// HSearch.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#define MAXSIZE 5 //#define 后面不加;他妹的我竟然忘了
using namespace std;
typedef struct HashNode
{
int data;
HashNode *next;
} *HashList;//散列链表的每个结点的数据结构
inline int f(int i)// f(i)是满足 f(i)<MAXSIZE 的任意可行合理的函数
{
return (i%(MAXSIZE));
}
template < int n >
void HashInsert(int (&A)[n], HashList HashA[])
{
HashNode *p, *q;
for (int j=0;j<(MAXSIZE);++j)
{
HashA[j]=NULL;
}
for (int i = 0; i < n; i++)
{
p = new HashNode;
p->data = A[i];
p->next=NULL;
int j = f(A[i]);
if (HashA[j] == NULL)
HashA[j] = p;
else
{
q = HashA[j];
while ((q->next) != NULL)
q = q->next;
q->next = p;
}
}
}
template <int n>
int HashSearch(int (&A)[n],HashList HashA[], int b)
{
HashNode *p;
HashInsert(A, HashA);
p = HashA[f(b)];
while (p->next!= NULL)
{
if (p->data == b)
return (1);
else
p = p->next;
}
return 0;
}
int main()
{
HashList HashA[MAXSIZE];
int a[10] = { 9 ,3 ,4 ,6,12,15,6,7,9,4};
int result=HashSearch(a, HashA,9);
cout<<(result?"success":"failure")<<endl;
return 0;
}