Hash tables: introduction and chaining