All pastes #94176 Raw Edit

Mine

public text v1 · immutable
#94176 ·published 2006-07-21 01:24 UTC
rendered paste body
#include <iostream>
#include "Hash.h"
using namespace std;

int main() {
	HashTable *numbers = new HashTable(211);

	// set numbers
	numbers->put("one", 1);
	numbers->put("two", 2);
	numbers->put("three", 3);
	numbers->put("four", 4);
	numbers->put("five", 5);

	numbers->put("neo", 10);

	numbers->put("TEST", 12);
	numbers->put("TEST2", 13);

	// retrieve numbers
	cout << 
		"one: " << numbers->get("one") << endl <<
		"two: " << numbers->get("two") << endl <<
		"three: " << numbers->get("three") << endl <<
		"four: " << numbers->get("four") << endl <<
		"five: " << numbers->get("five") << endl <<
		"neo: " << numbers->get("neo") << endl <<
		"TEST: " << numbers->get("TEST") << endl <<
		"TEST2: " << numbers->get("TEST2") << endl;
	return 0;
}
#ifndef HASHTABLE_H
#define HASHTABLE_H

#include <string>
using namespace std;

class HashTable {
	private:
		int max;
		int createHash(char[40]);
		void internalPut(char[40], int, int);
		int *hashTable;
		string *hashTableKeys;
	public:
		HashTable() {};
		HashTable(int);
		~HashTable();
		void put(char[40], int);
		int get(char[40]);
};
#endif
#include <iostream>
#include "Hash.h"
using namespace std;

HashTable::HashTable(int newMax) {
	max = newMax;
	hashTable = new int[max];
	hashTableKeys = new string[max];

	// set all values to 0 to default
	for(int i=0; i<max; hashTable[i++] = 0);

	// test duplicates

}

HashTable::~HashTable() {
	delete hashTable;
}

int HashTable::createHash(char word[40]) {
	if(strcmp(word, "TEST") == 0 || strcmp(word, "TEST2") == 0 ) {
		return 210;
	}

	unsigned long value = 0;
	int i = 0;

	while(word[i] != '\0') {
		value += (unsigned int) word[i];
		i++;
	}

	return (value % max);
}

void HashTable::put(char word[40], int value) {
	int hash = createHash(word);

	if(hash > max) {
		cout << "May not add to hash table. Value too large." << endl;
	} else {
		if(hashTable[hash] == 0) {
			internalPut(word, value, hash);
		} else {
			for(int i=hash; i<=max; i++) {
				if(hashTable[i] == 0) {
					internalPut(word, value, i);
					return;
				}
				if(i == max) {
					for(int x=0; x<hash; x++) {
						if(hashTable[x] == 0) {
							internalPut(word, value, x);
							return;
						}
					}
					cout << "Unable to find space to allocate for " << word << endl;
					return;
				}
			}
		}
	}
}

void HashTable::internalPut(char word[40], int value, int index) {
	cout << "inserting: " << word << "\t" << value << "\t" << index << endl;
	hashTable[index] = value;
	hashTableKeys[index] = word;
}

int HashTable::get(char word[40]) {
	int hash = createHash(word);
	if(hashTableKeys[hash] == word) {
		return hashTable[hash];
	} else {
		for(int i=hash; i<=max; i++) {
			if(hashTableKeys[i] == word) {
				return hashTable[i];
			}
			if(i == (max-1)) {
				for(int x=0; x<hash; x++) {
					if(hashTableKeys[x] == word) {
						return hashTable[x];
					}
				}
				cout << "ERROR COULD NOT LOCATE: " << word << endl;
				return -5;
			}
		}
	}
	//return 0;
}