logo

Hashtabellen koppelen met dubbel gekoppelde lijsten

Voorwaarde - Hashing-introductie Hashtabel met behulp van een enkelvoudig gekoppelde lijst & Implementatie van onze eigen hashtabel met afzonderlijke ketens in Java Het implementeren van een hashtabel met behulp van Chaining through Doubly Linked List is vergelijkbaar met implementeren Hashtabel met behulp van een enkelvoudig gekoppelde lijst . Het enige verschil is dat elk knooppunt van de gekoppelde lijst het adres heeft van zowel het volgende als het vorige knooppunt. Dit versnelt het proces van het toevoegen en verwijderen van elementen aan de lijst, waardoor de tijdscomplexiteit drastisch zal worden verminderd. 

Hoe tekenreeks naar int te converteren

Voorbeeld:

Als we een enkelvoudig gekoppelde lijst hebben:



1->2->3->4

Als we bij 3 zijn en het moet worden verwijderd, dan moet 2 worden gekoppeld aan 4 en vanaf 3 is 2 niet toegankelijk omdat het een afzonderlijk gekoppelde lijst is. De lijst moet dus opnieuw worden doorlopen, d.w.z. O(n), maar als we een dubbel gekoppelde lijst hebben, d.w.z.

1<->2<->3<->4

2 & 4 zijn toegankelijk vanuit 3 en daarom kunnen in O(1) 3 worden verwijderd.

java csv-bestand lezen

Hieronder vindt u de implementatie van de bovenstaande aanpak: 

C++
// C++ implementation of Hashtable // using doubly linked list #include    using namespace std; const int tablesize = 25; // declaration of node struct hash_node {  int val key;  hash_node* next;  hash_node* prev; }; // hashmap's declaration class HashMap { public:  hash_node **hashtable **top;  // constructor  HashMap()  {  // create a empty hashtable  hashtable = new hash_node*[tablesize];  top = new hash_node*[tablesize];  for (int i = 0; i < tablesize; i++) {  hashtable[i] = NULL;  top[i] = NULL;  }  }  // destructor  ~HashMap()  {  delete[] hashtable;  }  // hash function definition  int HashFunc(int key)  {  return key % tablesize;  }  // searching method  void find(int key)  {  // Applying hashFunc to find  // index for given key  int hash_val = HashFunc(key);  bool flag = false;  hash_node* entry = hashtable[hash_val];  // if hashtable at that index has some  // values stored  if (entry != NULL) {  while (entry != NULL) {  if (entry->key == key) {  flag = true;  }  if (flag) {  cout << 'Element found at key '  << key << ': ';  cout << entry->val << endl;  }  entry = entry->next;  }  }  if (!flag)  cout << 'No Element found at key '  << key << endl;  }  // removing an element  void remove(int key)  {  // Applying hashFunc to find  // index for given key  int hash_val = HashFunc(key);  hash_node* entry = hashtable[hash_val];  if (entry->key != key || entry == NULL) {  cout << 'Couldn't find any element at this key '  << key << endl;  return;  }  // if some values are present at that key &  // traversing the list and removing all values  while (entry != NULL) {  if (entry->next == NULL) {  if (entry->prev == NULL) {  hashtable[hash_val] = NULL;  top[hash_val] = NULL;  delete entry;  break;  }  else {  top[hash_val] = entry->prev;  top[hash_val]->next = NULL;  delete entry;  entry = top[hash_val];  }  }  entry = entry->next;  }  cout << 'Element was successfully removed at the key '  << key << endl;  }  // inserting method  void add(int key int value)  {  // Applying hashFunc to find  // index for given key  int hash_val = HashFunc(key);  hash_node* entry = hashtable[hash_val];  // if key has no value stored  if (entry == NULL) {  // creating new node  entry = new hash_node;  entry->val = value;  entry->key = key;  entry->next = NULL;  entry->prev = NULL;  hashtable[hash_val] = entry;  top[hash_val] = entry;  }  // if some values are present  else {  // traversing till the end of  // the list  while (entry != NULL)  entry = entry->next;  // creating the new node  entry = new hash_node;  entry->val = value;  entry->key = key;  entry->next = NULL;  entry->prev = top[hash_val];  top[hash_val]->next = entry;  top[hash_val] = entry;  }  cout << 'Value ' << value << ' was successfully'  ' added at key ' << key << endl;  } }; // Driver Code int main() {  HashMap hash;  hash.add(4 5);  hash.find(4);  hash.remove(4);  return 0; } 
Java
// Java implementation of Hashtable // using doubly linked list class GFG {  static final int tablesize = 25;  // declaration of node  static class hash_node {  int val key;  hash_node next;  hash_node prev;  }  // hashmap's declaration  static class HashMap {  hash_node hashtable[] top[];  // constructor  HashMap()  {  // create a empty hashtable  hashtable = new hash_node[tablesize];  top = new hash_node[tablesize];  for (int i = 0; i < tablesize; i++) {  hashtable[i] = null;  top[i] = null;  }  }  // hash function definition  int HashFunc(int key) { return key % tablesize; }  // searching method  void find(int key)  {  // Applying hashFunc to find  // index for given key  int hash_val = HashFunc(key);  boolean flag = false;  hash_node entry = hashtable[hash_val];  // if hashtable at that index has some  // values stored  if (entry != null) {  while (entry != null) {  if (entry.key == key) {  flag = true;  }  if (flag) {  System.out.println(  'Element found at key ' + key  + ': ' + entry.val);  }  entry = entry.next;  }  }  if (!flag)  System.out.println(  'No Element found at key ' + key);  }  // removing an element  void remove(int key)  {  // Applying hashFunc to find  // index for given key  int hash_val = HashFunc(key);  hash_node entry = hashtable[hash_val];  if (entry.key != key || entry == null) {  System.out.println(  'Couldn't find any element at this key '  + key);  return;  }  // if some values are present at that key &  // traversing the list and removing all values  while (entry != null) {  if (entry.next == null) {  if (entry.prev == null) {  hashtable[hash_val] = null;  top[hash_val] = null;  break;  }  else {  top[hash_val] = entry.prev;  top[hash_val].next = null;  entry = top[hash_val];  }  }  entry = entry.next;  }  System.out.println(  'Element was successfully removed at the key '  + key);  }  // inserting method  void add(int key int value)  {  // Applying hashFunc to find  // index for given key  int hash_val = HashFunc(key);  hash_node entry = hashtable[hash_val];  // if key has no value stored  if (entry == null) {  // creating new node  entry = new hash_node();  entry.val = value;  entry.key = key;  entry.next = null;  entry.prev = null;  hashtable[hash_val] = entry;  top[hash_val] = entry;  }  // if some values are present  else {  // traversing till the end of  // the list  while (entry != null)  entry = entry.next;  // creating the new node  entry = new hash_node();  entry.val = value;  entry.key = key;  entry.next = null;  entry.prev = top[hash_val];  top[hash_val].next = entry;  top[hash_val] = entry;  }  System.out.println(  'Value ' + value  + ' was successfully added at key ' + key);  }  }  // Driver Code  public static void main(String[] args)  {  HashMap hash = new HashMap();  hash.add(4 5);  hash.find(4);  hash.remove(4);  } } // This code is contributed by Lovely Jain 
Python3
# Python implementation of Hashtable # using doubly linked list # declaration of node class hash_node: def __init__(self val key): self.val = val self.key = key self.next = None self.prev = None # hashmap's declaration class HashMap: def __init__(self): # create an empty hashtable self.tablesize = 25 self.hashtable = [None] * self.tablesize self.top = [None] * self.tablesize # hash function definition def HashFunc(self key): return key % self.tablesize # searching method def find(self key): # Applying hashFunc to find # index for given key hash_val = self.HashFunc(key) flag = False entry = self.hashtable[hash_val] # if hashtable at that index has some # values stored if entry is not None: while entry is not None: if entry.key == key: flag = True if flag: print('Element found at key' key ':' entry.val) entry = entry.next if not flag: print('No Element found at key' key) # removing an element def remove(self key): # Applying hashFunc to find # index for given key hash_val = self.HashFunc(key) entry = self.hashtable[hash_val] if entry is None or entry.key != key: print('Couldn't find any element at this key' key) return # if some values are present at that key & # traversing the list and removing all values while entry is not None: if entry.next is None: if entry.prev is None: self.hashtable[hash_val] = None self.top[hash_val] = None del entry break else: self.top[hash_val] = entry.prev self.top[hash_val].next = None del entry entry = self.top[hash_val] entry = entry.next print('Element was successfully removed at the key' key) # inserting method def add(self key value): # Applying hashFunc to find # index for given key hash_val = self.HashFunc(key) entry = self.hashtable[hash_val] # if key has no value stored if entry is None: # creating new node entry = hash_node(value key) self.hashtable[hash_val] = entry self.top[hash_val] = entry # if some values are present else: # traversing till the end of # the list while entry.next is not None: entry = entry.next # creating the new node new_entry = hash_node(value key) new_entry.prev = entry entry.next = new_entry self.top[hash_val] = new_entry print('Value' value 'was successfully added at key' key) # Driver Code if __name__ == '__main__': hash_map = HashMap() hash_map.add(4 5) hash_map.find(4) hash_map.remove(4) 
C++
// Java implementation of Hashtable using doubly linked list class GFG {  static final int tablesize = 25;  // declaration of node  static class hash_node {  int val key;  hash_node next;  hash_node prev;  }  // hashmap's declaration  static class HashMap {  hash_node hashtable[] top[];  // constructor  HashMap(){  // create a empty hashtable  hashtable = new hash_node[tablesize];  top = new hash_node[tablesize];  for (int i = 0; i < tablesize; i++) {  hashtable[i] = null;  top[i] = null;  }  }  // hash function definition  int HashFunc(int key) { return key % tablesize; }  // searching method  void find(int key)  {  // Applying hashFunc to find index for given key  int hash_val = HashFunc(key); boolean flag = false;  hash_node entry = hashtable[hash_val];  // if hashtable at that index has some values stored  if (entry != null) {  while (entry != null) {  if (entry.key == key) flag = true;  if (flag) {  System.out.println('Element found at key ' + key+ ': ' + entry.val);  }  entry = entry.next;  }  }  if (!flag)  System.out.println('No Element found at key ' + key);  }  // removing an element  void remove(int key)  {  // Applying hashFunc to find index for given key  int hash_val = HashFunc(key);  hash_node entry = hashtable[hash_val];  if (entry.key != key || entry == null) {  System.out.println('Couldn't find any element at this key '+ key);  return;  }  // if some values are present at that key & traversing the list and removing all values  while (entry != null) {  if (entry.next == null) {  if (entry.prev == null) {  hashtable[hash_val] = null;  top[hash_val] = null;  break;  }  else {  top[hash_val] = entry.prev;  top[hash_val].next = null;  entry = top[hash_val];  }  }  entry = entry.next;  }  System.out.println(  'Element was successfully removed at the key '  + key);  }  // inserting method  void add(int key int value)  {  // Applying hashFunc to find index for given key  int hash_val = HashFunc(key);  hash_node entry = hashtable[hash_val];  // if key has no value stored  if (entry == null) {  // creating new node  entry = new hash_node();  entry.val = value;  entry.key = key;  entry.next = null;  entry.prev = null;  hashtable[hash_val] = entry;  top[hash_val] = entry;  }  // if some values are present  else {  // traversing till the end of  // the list  while (entry != null)  entry = entry.next;  // creating the new node  entry = new hash_node();  entry.val = value;  entry.key = key;  entry.next = null;  entry.prev = top[hash_val];  top[hash_val].next = entry;  top[hash_val] = entry;  }  System.out.println(  'Value ' + value  + ' was successfully added at key ' + key);  }  }  // Driver Code  public static void main(String[] args)  {  HashMap hash = new HashMap();  hash.add(4 5);  hash.find(4);  hash.remove(4);  } } // This code is contributed by Lovely Jain 
JavaScript
// JavaScript implementation of Hashtable using doubly linked list const tablesize = 25; // declaration of node class hash_node { constructor(key val) { this.key = key; this.val = val; this.next = null; this.prev = null; } } // hashmap's declaration class HashMap { constructor() { // create a empty hashtable this.hashtable = new Array(tablesize).fill(null); this.top = new Array(tablesize).fill(null); } // hash function definition HashFunc(key) { return key % tablesize; } // searching method find(key) { // Applying hashFunc to find index for given key const hash_val = this.HashFunc(key); let flag = false; let entry = this.hashtable[hash_val]; // if hashtable at that index has some values stored if (entry !== null) {  while (entry !== null) {  if (entry.key === key) flag = true;  if (flag) {  console.log(`Element found at key ${key}: ${entry.val}`);  }  entry = entry.next;  } } if (!flag) console.log(`No Element found at key ${key}`); } // removing an element remove(key) { // Applying hashFunc to find index for given key const hash_val = this.HashFunc(key); let entry = this.hashtable[hash_val]; if (entry.key !== key || entry === null) {  console.log(`Couldn't find any element at this key ${key}`);  return; } // if some values are present at that key & traversing the list and removing all values while (entry !== null) {  if (entry.next === null) {  if (entry.prev === null) {  this.hashtable[hash_val] = null;  this.top[hash_val] = null;  break;  } else {  this.top[hash_val] = entry.prev;  this.top[hash_val].next = null;  entry = this.top[hash_val];  }  }  entry = entry.next; } console.log(`Element was successfully removed at the key ${key}`); } // inserting method add(key value) { // Applying hashFunc to find index for given key const hash_val = this.HashFunc(key); let entry = this.hashtable[hash_val]; // if key has no value stored if (entry === null) {  // creating new node  entry = new hash_node(key value);  this.hashtable[hash_val] = entry;  this.top[hash_val] = entry; } // if some values are present else {  // traversing till the end of the list  while (entry !== null) entry = entry.next;  // creating the new node  entry = new hash_node(key value);  entry.prev = this.top[hash_val];  this.top[hash_val].next = entry;  this.top[hash_val] = entry; } console.log(`Value ${value} was successfully added at key ${key}`); } } // Driver Code const hash = new HashMap(); hash.add(4 5); hash.find(4); hash.remove(4); 

Uitvoer
Value 5 was successfully added at key 4 Element found at key 4: 5 Element was successfully removed at the key 4
Quiz maken