线性探测再散列 c语言,DS哈希查找--线性探测再散列

#include#include#include

using namespacestd;const int MaxLen = 20;classMap {private:boolvist[MaxLen];intmatrix[MaxLen][MaxLen];intvexnum;void BFS(intv);public:void setmatrix(int vnum, intmx[MaxLen][MaxLen]);voidBFSTraverse();

};void Map::setmatrix(int vnum, intmx[MaxLen][MaxLen]){inti, j;

vexnum=vnum;for (i = 0; i < MaxLen; i++)for (j = 0; j < MaxLen; j++)

matrix[i][j]= 0;for (i = 0; i < vexnum; i++)for (j = 0; j < vexnum; j++)

matrix[i][j]=mx[i][j];

}voidMap::BFSTraverse(){

BFS(0);

}void Map::BFS(intv){intw, u;inti, k;int *adjvex = new int[vexnum];

queueQ;for (i = 0; i < vexnum; i++)

vist[i]= false;for (v = 0; v < vexnum; ++v)

{if (!vist[v])

{

vist[v]= true;

cout<< v << " ";

Q.push(v);while (!Q.empty())

{

u=Q.front();

Q.pop();

k= 0;for (i = 0; i < vexnum; i++)

{if (matrix[u][i] == 1)

adjvex[k++] =i;

}

i= 0;for (w = adjvex[i]; w >= 0; w = adjvex[i++])if (!vist[w])

{

vist[w]= true;

cout<< w << " ";

Q.push(w);

}

}

}

}

}intmain(){int t,key=11;

cin>>t;while(t--)

{intm, n;

cin>> m >>n;int *a = new int[m];int *flag = new int[m];//用来标记这个位置有没有值

inti;for (i = 0; i < m; i++)

flag[i]= -1;for (i = 0; i < n; i++)

{intyu,x;

cin>>x;

yu= x %key;if (flag[yu] == -1)

{

a[yu]=x;

flag[yu]= 1;

}else{while (1)

{if (flag[yu] == -1)//找到一个空位置

{

a[yu]=x;

flag[yu]= 1;break;

}

yu++;

yu= yu %m;

}

}

}for (i = 0; i < m - 1; i++)

{if (flag[i] == -1)

cout<< "NULL" << " ";elsecout<< a[i] << " ";

}if (flag[i] == -1)

cout<< "NULL" <

cin>>k;while (k--)

{int x,count = 0, loc;

cin>>x;int yu = x % 11;int find = 0;while (true)

{if (flag[yu] == -1)

{

count++;break;

}if (a[yu] ==x)

{

count++;

loc=yu;

find= 1;break;

}

count++;

yu++;

yu= yu %m;

}if(find)

cout<< find << " " << count << " " << loc+1 <

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值