Write your own hash function* that uses the 6 digit grid reference as a key. Using this function and the hill details already generated, add the hill details to another array, this time of 63 elements. This will be your hash table.Test that a user can search the hash table by asking the user to enter a grid reference. The program should either output details of the hill at that grid reference or output that there is no hill at that grid reference.
This is my program so far -
Code:
#include <iostream>
using namespace std;
struct Node{ //a structure that can be
int data; //thought of as a simple class
Node *link; //All fields are public
int height;
int gridReference;
int distance;
bool climbed;
};
class LinkedList{
public:
Node *head; //pointer to the first node
Node *last; //pointer to the last node
int count; //number of nodes
LinkedList(); //default constructor
//first = NULL
//last = NULL
//count = 0
~LinkedList(); //destructor - deletes all nodes
//from the linked list
void insertFirstNode(int newinfo); // inserts a node
//at the start of the list
void insertLastNode(int newinfo); // inserts a node
//at the end of the list
void insertHills(int height, int distance, bool climbed, int gridReference);
int getNodeCount(); //returns the number of nodes
Node* getFirst(); //returns the pointer to the
//the first node - the value of "head"
void displayData();
void initializeHashTable(void);
};
#include "linkedlist.h"
LinkedList::LinkedList(){
head = NULL;
last = NULL;
count = 0;
}
LinkedList::~LinkedList(){
Node *temp = head->link;
while(temp) {
head->link = temp->link;
delete temp;
temp = head->link;
}
delete head;
cout<<"linked list deleted"<<endl;
}
void LinkedList::insertFirstNode(int newInfo){
Node *newNode;
newNode = new Node;
newNode->data = newInfo;
newNode->link = head;
head = newNode;
count++;
if(last == NULL){
last = newNode;
}
}
void LinkedList::insertLastNode(int newInfo){
Node *newNode;
newNode = new Node;
newNode->data = newInfo;
newNode->link = NULL;
count++;
if(head == NULL){
head = newNode;
last = newNode;
}
else{
last->link = newNode;
last = newNode;
}
}
int LinkedList::getNodeCount(){
return count;
}
Node* LinkedList::getFirst(){
return head;
}
void LinkedList::insertHills(int height, int distance, bool climbed, int gridReference){
Node* current= head;
Node* previous= NULL;
Node* hills= new Node();
count++;
hills->height= height;
hills->distance= distance;
hills->climbed= climbed;
hills->gridReference= gridReference;
hills->link= NULL;
if(count==1)
{
head= hills;
last= hills;
return;
}
do{
if(current->height<hills->height)
{
hills->link= current;
if(current== head)
{
head= hills;
return;
}
else
{
previous->link= hills;
return;
}
if(current==last)
{
current->link=hills;
last= hills;
return;
}
}
previous=current;
current= current->link;
}
while(current!=NULL);
}
void LinkedList::displayData(){
int noOfNodes= getNodeCount();
Node *current;
current= head;
cout << "Number of Nodes = " << noOfNodes << endl;
for(int i=0; i<noOfNodes && current != NULL; i++){
cout<<"Hill Number: "<<count--<<endl;
cout<<"Height: "<<current->height<<endl;
cout<<"Distance from Home: "<<current->distance<<endl;
cout<<"Climbed: "<<current->climbed<<endl;
cout<<"Grid Reference: "<<current->gridReference<<endl;
cout<<"**************"<<endl;
current= current->link;
}
}
#include <cstdlib>
#include <iostream>
#include "linkedlist.h"
int main(){
LinkedList l;
unsigned hash ( int );
for(int i=1; i<41; i++){
int randHeight= (rand()%1400)+3000;// generates random number for height of hill
int randDistance= (rand()%280)+20;// generates random number for distance of hill
int randGridReference= (rand()%100000)+400000;// generates random number for gridreference of hill
int randClimbedNumber= (rand()%10)+1;// generates random number to tell user if hill is climbed
bool randClimbed;
if(randClimbedNumber>5)//This takes the random number generated from randClimbedNumber and determines if it has been climbed or not
{
randClimbed= true;
}
else
{
randClimbed= false;
}
l.insertHills(randHeight, randDistance, randClimbed, randGridReference);
}
l.displayData();
cout<<endl;
l.displayData();
return 0;
}
