Hi, I'm trying to build a trivial hash function using division method with divisor as table size (e.g. key % size ) with separate chaining using doubly linked list. I have gone over the code over and over and cannot see why my logic to create an array of pointers to type hockey_player doesn't work. I have checked around, do I have to use a struct as container to hold my nodes? I don't see why my way doesn't work.
Code:
#include <iostream>
using namespace std;
struct hockey_player
{
hockey_player* next;
hockey_player* back;
int num;//NB: this is key (jersey number)
string name;
string team;
};
bool is_duplicate(hockey_league* bucket, int cur_bucket, int size, int num_, string name_, string team_)
{
if ( bucket->front == NULL )//if list is empty, of course not duplicate
return false;
for ( hockey_player* cur = bucket->front; cur != NULL; cur = cur->next )/**Else traverse bucket to find if itm to insert is a duplicate or not*/
if ( cur->num == num_ && cur->name == name_ && cur->team == team_ )
return true;
return false;
}
int main()
{
hockey_player* p_1_front = NULL;//pointer to the items in each bucket (ie. the address in each array index to a list)
hockey_player* p_2_front = NULL;
hockey_player* p_3_front = NULL;
hockey_player* p_4_front = NULL;
hockey_player* p_5_front = NULL;
hockey_player* p_6_front = NULL;
hockey_player* p_7_front = NULL;
hockey_player* p_8_front = NULL;
hockey_player* p_9_front = NULL;
hockey_player* p_10_front = NULL;
hockey_player* p_11_front = NULL;
hockey_player* p_12_front = NULL;
hockey_player* p_13_front = NULL;
hockey_player* p_14_front = NULL;
hockey_player* p_15_front = NULL;
hockey_league* bucket[15] = {p_1_front, p_2_front, p_3_front, p_4_front, p_5_front, p_6_front, p_7_front, p_8_front, p_9_front, p_10_front,
p_11_front, p_12_front, p_13_front, p_14_front, p_15_front};
int size_ = 15;
hockey_player* newGuy = new hockey_player;
newGuy->num = 99;
newGuy->name = "Wayne Gretzky";
newGuy->team = "EDM";
newGuy->next = NULL;
newGuy->back = NULL;
int i = newGuy->num % size_;
cout << i << endl;
bucket[i]->front = newGuy;
return 0;
}
I was trying to use a container to hold a front pointer in each bucket (index) to a list, but is it really necessary.
I mean:
Code:
struct hockey_league
{
hockey_player* front;//to keep track of our list
};
Anyways, I just need help for why my bool is_duplicate function that seems so trivial doesn't work.