How it works
Insert a key into a separate-chaining hash table, prepending to the bucket selected by the hash.
Implementation
function hashInsertOp(state, value) { const bucketHead = state.bucketHead; const nodeKey = state.nodeKey; const nodeNext = state.nodeNext; const numBuckets = state.numBuckets; const bucket = value % numBuckets; probeSlot(bucket); let current = bucketHead[bucket]; while (current !== -1) { compareKeys(current, value); if (nodeKey[current] === value) { reportFound(current); return; } current = nodeNext[current]; } const id = nodeKey.length; nodeKey[id] = value; nodeNext[id] = bucketHead[bucket]; bucketHead[bucket] = id; insertNode(id, value, bucket); finish(id); }
def hashInsertOp(state, value): bucketHead = state.bucketHead nodeKey = state.nodeKey nodeNext = state.nodeNext numBuckets = state.numBuckets bucket = (value % numBuckets) probeSlot(bucket) current = bucketHead[bucket] while (current != -1): compareKeys(current, value) if (nodeKey[current] == value): reportFound(current) return current = nodeNext[current] id = nodeKey.length nodeKey[id] = value nodeNext[id] = bucketHead[bucket] bucketHead[bucket] = id insertNode(id, value, bucket) finish(id)
#include <vector> #include <algorithm> void hashInsertOp(int state, int value) { auto bucketHead = state.bucketHead; auto nodeKey = state.nodeKey; auto nodeNext = state.nodeNext; auto numBuckets = state.numBuckets; auto bucket = (value % numBuckets); probeSlot(bucket); auto current = bucketHead[bucket]; while((current != -1)) { compareKeys(current, value); if((nodeKey[current] == value)) { reportFound(current); return; } current = nodeNext[current]; } auto id = nodeKey.length; nodeKey[id] = value; nodeNext[id] = bucketHead[bucket]; bucketHead[bucket] = id; insertNode(id, value, bucket); finish(id); }
public void hashInsertOp(int state, int value) { var bucketHead = state.bucketHead; var nodeKey = state.nodeKey; var nodeNext = state.nodeNext; var numBuckets = state.numBuckets; var bucket = (value % numBuckets); probeSlot(bucket); var current = bucketHead[bucket]; while((current != -1)) { compareKeys(current, value); if((nodeKey[current] == value)) { reportFound(current); return; } current = nodeNext[current]; } var id = nodeKey.length; nodeKey[id] = value; nodeNext[id] = bucketHead[bucket]; bucketHead[bucket] = id; insertNode(id, value, bucket); finish(id); }
#include <stdio.h> void hashInsertOp(int state, int value) { var bucketHead = state.bucketHead; var nodeKey = state.nodeKey; var nodeNext = state.nodeNext; var numBuckets = state.numBuckets; var bucket = (value % numBuckets); probeSlot(bucket); var current = bucketHead[bucket]; while((current != -1)) { compareKeys(current, value); if((nodeKey[current] == value)) { reportFound(current); return; } current = nodeNext[current]; } var id = nodeKey.length; nodeKey[id] = value; nodeNext[id] = bucketHead[bucket]; bucketHead[bucket] = id; insertNode(id, value, bucket); finish(id); }