#define size 100
//位址鏈個數,足夠大
class simhash
public:
simhash()
~simhash()
} delete map;
//清除陣列
}void insert(
int key,
int value)
node*p=map[hash(key)];
//確定位址鏈索引
node*q=
new node(key,value);
//建立節點
while(p&&p->next)p=p->next;
//索引到位址鏈末端
if(p)p->next=q;
//新增節點
else map[hash(key)]=q;
//位址鏈的第乙個節點
}void remove(
int key)
q=p;
p=p->next; }
}node* find(
int key)
return p; }
};首先,我們需要乙個node**型別的指標map記錄位址鏈陣列的位址,至於陣列大小,我們給乙個較大的值(這裡設定為100),為了簡化問題,不需要考慮插入時表滿等情況。在建構函式和析構函式內對map記憶體分配和撤銷。另外,節點的記憶體是動態增加的,因此析構時需要單獨處理每個位址鍊錶。
對於資料結構,最關鍵的便是插入、刪除、檢索操作,為此定義操作insert、remove、find。
檢索操作實現時,首先通過hash函式定位位址鍊錶的索引,然後在位址鍊錶上檢索鍵是否存在即可。
插入操作實現時,首先會檢索鍵是否存在,如果存在則僅僅更新對應節點的資料即可,否則建立新的節點,插入到鍊錶的結尾。對於空鍊錶需要做特殊處理。
刪除操作實現時,需要使用兩個指標記錄節點的位置資訊,當遇到滿足鍵的節點時,就將該節點從鍊錶內刪除即可。如果刪除鍊錶的第乙個節點,需要做特殊處理。
如果考慮雜湊表的鍵值型別、特殊鍵型別的hash對映(字串型別鍵如何對映為數值)、特殊鍵型別的比較處理(怎麼比較兩個自定義型別鍵是否相等)、索引運算過載這些問題的話,hash_map的實現就變得複雜了。不過這些在stl內實現的比較完整,若你感興趣可以多做了解。這裡我給出自己的乙個考慮以上問題的簡單hash_map實現。
struct str_hash
};
struct str_cmp
return !*str1&&!*str2; }
};template<
class k,
class t>
class hashnode
k key;
t data;
hashnode*next;
};template<
class k,
class t,
class h,
class c>
class hashmap
h h;
c c;
hashnode* _find(k key)
} return null; }
public:
size_t size;
//hash表容量
size_t count;
//元素個數
hashmap(size_t sz=
6):size(
6),div(
2),count(
0)map=
new hashnode*[div];
for(size_t i=
0;ifor(size_t i=
0;iwhile(
true)
else
break; }
}delete map; }
void insert(k key,t data)
} delete oldmap; }
hashnode*p=_find(key);
//已經存在,替換資料
if(p)p->data=data;
else
}void remove(k key)
} delete oldmap; }
size_t pos=hash(key);
//獲取桶號
for(hashnode*p=map[pos],*q=null;p;p=p->next)
q=p; }
}t&
get(k key)
t& operator(k key)
bool find(k key)
};
int main()
Java 資料結構 HashMap
hashmap 特點 1.map 無序不可重複 2.hash 通過map的key的hashcode的一次hash來決定儲存位置,通過key的 與equals方法來確定是否重複 原始碼分析 public v put k key,v value 如果 i 索引處的 entry 為 null,表明此處還沒...
hashMap的資料結構
在jdk8中,hashmap是用了陣列和鍊錶以及紅黑樹這三種資料結構 首先,在hashmap類中,都有乙個table陣列,我們在儲存資料時,對這個資料的hash值進行一系列的計算 計算出它在table中的位置 下標 並將它存放進去 然而,我們在hashmap是什麼 中提到,不同的物件的hash值可能...
關於HashMap的資料結構
一hashmap的資料結構 jdk1.8以前是陣列 鍊錶 jdk1.8以後是陣列 鍊錶 紅黑色 二資料結構的物理結構 是指資料的邏輯結構在計算機中的儲存形式 資料元素的儲存結構形式有如下兩種 兩種結構,各有優點和缺點,可以相互結合的運用 hashmap正好兩種資料結構都用到了 三陣列 hashmap...