#include<iostream>
#include<cstring>
using namespace std;
#define TABLE_SIZE 19
typedef struct Node
{
int key;
char value;
}Node,*Nodeptr;
typedef struct
{
int length;
Nodeptr elements;//存一个一个节点
}Hashlist,*Listptr;
Listptr initList(int* parakey, char* paravalue, int paralength)
{
int i,pos;
Listptr resultptr = new Hashlist;
resultptr->elements = new Node[TABLE_SIZE];
resultptr->length = paralength;
for (i = 0; i < TABLE_SIZE; i++)
{
resultptr->elements[i].key = -1;
resultptr->elements[i].value = 'x';
}//先填充来便于接下来的判断
for (i = 0; i < paralength; i++)
{
pos = parakey[i] % TABLE_SIZE;
while (resultptr->elements[pos].key != -1)
{
pos = (pos + 1) % TABLE_SIZE;
}
resultptr->elements[pos].key = parakey[i];
resultptr->elements[pos].value = paravalue[i];
}
return resultptr;
}
char hashsearch(Listptr paraPtr, int parakey)
{
int pos = parakey % TABLE_SIZE,i;
while (paraPtr->elements[pos].key !=-1)//如果遇到了-1,代表原来这个key值的表中就没,
//否则无限+1,一定会遇到的
{
if (paraPtr->elements[pos].key == parakey)
{
return paraPtr->elements[pos].value;
}
pos = (pos + 1) % TABLE_SIZE;
}//遇到-1,证明表中无这个
return 'x';
}
void hashsearchtest()
{
int tempkeys[]= { 16, 33, 38, 69, 57, 95, 86 };
char tempvalues[] = { 'h', 'e', 'l', 'o', 'w', 'r', 'd' };
Listptr p = initList(tempkeys, tempvalues, 7);
cout << hashsearch(p, 33);
}
int main() {
hashsearchtest();
return 1;
}
作业哈希表
最新推荐文章于 2024-07-20 11:22:21 发布