The task is to create a hash table with random keys and remove from it entries with keys from the range min<key<max .
Function delete by keys. It turns out he goes through the index. And let's say in the index there are keys that fit the conditions, it should delete them.
//ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Node *delet(int data, int min, int max) { Node *p; p = hashTable[myhash(data)]; while (p && !compEQ(p->data, data)) { p = p->next; if ((min < p->data) && (p->data < max)) delete(p); } return p; } Mistake
"Hesh.exe" (Win32). ΠΠ°Π³ΡΡΠΆΠ΅Π½ΠΎ "C:\Users\Ewrei\Documents\Visual Studio 2015\Projects\Hesh\Debug\Hesh.exe". Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ. "Hesh.exe" (Win32). ΠΠ°Π³ΡΡΠΆΠ΅Π½ΠΎ "C:\Windows\SysWOW64\ntdll.dll". ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΡ PDB-ΡΠ°ΠΉΠ». "Hesh.exe" (Win32). ΠΠ°Π³ΡΡΠΆΠ΅Π½ΠΎ "C:\Windows\SysWOW64\kernel32.dll". ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΡ PDB-ΡΠ°ΠΉΠ». "Hesh.exe" (Win32). ΠΡΠ³ΡΡΠΆΠ΅Π½ΠΎ "C:\Windows\SysWOW64\kernel32.dll" "Hesh.exe" (Win32). ΠΠ°Π³ΡΡΠΆΠ΅Π½ΠΎ "C:\Windows\SysWOW64\kernel32.dll". ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΡ PDB-ΡΠ°ΠΉΠ». "Hesh.exe" (Win32). ΠΠ°Π³ΡΡΠΆΠ΅Π½ΠΎ "C:\Windows\SysWOW64\KernelBase.dll". ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΡ PDB-ΡΠ°ΠΉΠ». "Hesh.exe" (Win32). ΠΠ°Π³ΡΡΠΆΠ΅Π½ΠΎ "C:\Windows\SysWOW64\vcruntime140d.dll". ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΡ PDB-ΡΠ°ΠΉΠ». "Hesh.exe" (Win32). ΠΠ°Π³ΡΡΠΆΠ΅Π½ΠΎ "C:\Windows\SysWOW64\msvcp140d.dll". ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΡ PDB-ΡΠ°ΠΉΠ». "Hesh.exe" (Win32). ΠΠ°Π³ΡΡΠΆΠ΅Π½ΠΎ "C:\Windows\SysWOW64\ucrtbased.dll". ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΡΡ PDB-ΡΠ°ΠΉΠ». ΠΡΠ·Π²Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x00142556 Π² Hesh.exe: 0xC0000005: Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ°Π² Π΄ΠΎΡΡΡΠΏΠ° ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0xDDDDDDE1. ΠΡΠ·Π²Π°Π½ΠΎ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. The rest of the code
#include<iostream> #include<cstdlib> #include<string> #include<cstdio> using namespace std; #define compEQ(a,b) (a == b) struct Node { int info; //Π΄Π°Π½Π½ΡΠ΅, Ρ
ΡΠ°Π½ΡΡΠΈΠ΅ΡΡ Π² Π²Π΅ΡΡΠΈΠ½Π΅ int data;// ΠΊΠ»ΡΡ Node *next; // ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ Π²Π΅ΡΡΠΈΠ½Π° }; Node **hashTable; int hashTableSize; int myhash(int data); Node *insertNode(int data, int info); //Π²ΡΡΠ°Π²ΠΊΠ° void deleteNode(int data); //ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Node *findNode(int data); //ΠΏΠΎΠΈΡΠΊ Node *delet(int data, int min, int max); int main() { int i, *a, maxnum; cout << "Enter number of elements: "; cin >> maxnum; cout << "Enter HashTable Size : "; cin >> hashTableSize; a = new int[maxnum]; hashTable = new Node*[hashTableSize]; for (i = 0; i < hashTableSize; i++) hashTable[i] = NULL; // Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° for (i = 0; i < maxnum; i++) a[i] = 1 + rand() % 100; // Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ
Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° for (i = 0; i < maxnum; i++) { insertNode(a[i], rand()); } // ΠΏΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΎ Ρ
Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΠ΅ for (i = maxnum - 1; i >= 0; i--) { findNode(a[i]); } for (i = maxnum - 1; i >= 0; i--) { // delet(a[i], 5, 20); } cout << "RESULT: " << endl; // ΠΏΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠΎ Ρ
Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΠ΅ for (i = maxnum - 1; i >= 0; i--) { findNode(a[i]); } cout << endl; // ΠΎΡΠΈΡΡΠΊΠ° Ρ
Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΡ for (i = maxnum - 1; i >= 0; i--) { deleteNode(a[i]); } system("pause"); return 0; } // Ρ
Π΅Ρ-ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠ½Ρ int myhash(int data) { return (data % hashTableSize); } // ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²ΡΡΠ°Π²ΠΊΠΈ Π²Π΅ΡΡΠΈΠ½Ρ Π² ΡΠ°Π±Π»ΠΈΡΡ Node *insertNode(int data, int info) { Node*p, *p0; int bucket; // Π²ΡΡΠ°Π²ΠΊΠ° Π²Π΅ΡΡΠΈΠ½Ρ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠΏΠΈΡΠΊΠ° bucket = myhash(data); if ((p = new Node) == 0) { fprintf(stderr, "ΠΠ΅Ρ
Π²Π°ΡΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ (insertNode)\n"); exit(1); } p0 = hashTable[bucket]; hashTable[bucket] = p; p->next = p0; p->data = data; p->info = info; return p; } //ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠ½Ρ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ void deleteNode(int data) { Node *p0, *p; int bucket; p0 = 0; bucket = myhash(data); p = hashTable[bucket]; while (p && !compEQ(p->data, data)) { p0 = p; p = p->next; } if (!p) return; if (p0) p0->next = p->next; else hashTable[bucket] = p->next; free(p); } // ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° Π²Π΅ΡΡΠΈΠ½Ρ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ data Node *findNode(int data) { Node *p; p = hashTable[myhash(data)]; while (p && !compEQ(p->data, data)) { p = p->next; } cout <<"Index " << myhash(data) << "\tkey: " << p->data << "\tinfo: " << p->info << endl; return p; } //ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Node *delet(int data, int min, int max) { Node *p; p = hashTable[myhash(data)]; while (p && !compEQ(p->data, data)) { p = p->next; if ((min < p->data) && (p->data < max)) delete(p); } return p; }
new, you must delete it withdelete, notfree. Don't mix memory allocation inCstyle and inC++style - retortaC++not anypython. Itβs not like this:min < p->data < max- retorta