hashtable的最主要问题就是碰撞冲突的解决,常用的方法一般是开放地址法和链表法,这里主要用的是开放地址法。
- // HashTable.cpp : 定义控制台应用程序的入口点。
- //开放地址法,简单hashtable
- #include "stdafx.h"
- #include <iostream>
- #include <hash_map>
- using namespace std;
- const int HashSize=13;
- class HashTable
- {
- private:
- int *hashtable;
- public:
- //int *hashtable;
- HashTable(){
- hashtable=new int[HashSize];
- if(hashtable==NULL){
- cerr<<"hashtable init failed"<<endl;
- exit(0);
- }
- for(int i=0 ; i<HashSize ; i++)
- hashtable[i]=-1;
- }
- ~HashTable(){
- delete []hashtable;
- }
- unsigned HashValue(unsigned value){
- int key;
- key=(unsigned)(value % HashSize);
- if(hashtable[key]!=-1)
- return HashValue(key+1);
- return key;
- }
- void HashInsert(unsigned value){
- int key=HashValue(value);
- hashtable[key]=value;
- }
- int HashFind(unsigned value){
- int key=(unsigned)(value % HashSize);
- int i=0;
- while(hashtable[key]!=-1 && i++<HashSize){
- if(hashtable[key]==value)
- return key;
- else
- key=(key+1)%HashSize;
- }
- return -1;
- }
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- int array[HashSize]={19,14,23,1,68,20,84,27,55,11,10,79};
- HashTable h;
- for(int i=0 ; i<HashSize-1 ; i++){
- h.HashInsert(array[i]);
- }
- for(int k=0 ; k<HashSize-1 ; k++){
- cout<<array[k]<<":"<<h.HashFind(array[k])<<endl;
- }
- return 0;
- }
使用hashtable对文件中的字符统计
阅读(2550) | 评论(0) | 转发(1) |