连地址处理冲突:将产生冲突的值以链表的形式连起来
好处:不会产生堆积,适合无法确定表长的情况,但是会增加空间消耗(指针需要空间)
方法:采用结构体数组的方式,首先将结构体内每一个元素赋值 -1 NULL,然后采用插入的方式产生链表,同一个函数值得元素在一条链表上
上代码:
#include<iostream>
using namespace std;
typedef struct Ha
{
int data;
struct Ha *next;
}Ha;
void insert(Ha ha[],int k,int num)
{
Ha *p=&ha[k];
while(p->next !=NULL) //始终存在 -1,NULL的节点
{
p=p->next ;
}
p->data =num;
Ha *q=new Ha;
q->data =-1;
q->next =NULL;
p->next=q ; //注意先申请空间,然后再赋给上一节点
}
void serch(Ha ha[],int k,int num)
{
Ha *p=&ha[k];
int sum=0;
while(p!=NULL)
{
sum++;
if(p->data ==num)
break;
p=p->next ;
}
if(p==NULL)cout<<"-1"; //整条链表没有所要找的值
else cout<<k<<","<<sum;
}
int main()
{
int n;
cin>>n;
Ha ha[n];
for(int i=0;i<n;i++)
{
ha[i].data =-1;
ha[i].next =NULL;
}
int m;
cin>>m;
while(m--)
{
int num;
cin>>num;
insert(ha,num%n,num);
}
int x;
cin>>x;
serch(ha,x%n,x);
return 0;
}