fork download
  1. #include <iostream>
  2. #include <fstream>
  3. #include <stdlib.h>
  4.  
  5. #define compEQ(a,b) (a == b)
  6.  
  7. typedef int T;
  8. typedef int hashTableIndex;
  9.  
  10. using namespace std;
  11.  
  12. typedef struct Node_
  13. {
  14. T data;
  15. struct Node_ *next;
  16. } Node;
  17.  
  18. Node* hashTable[128];
  19. int hashTableSize = 128;
  20.  
  21. hashTableIndex myhash(T data);
  22. Node *insertNode(T data);
  23. void deleteNode(T data);
  24. Node *findNode (T data);
  25.  
  26. hashTableIndex myhash(T data)
  27. {
  28. return (data % hashTableSize);
  29. }
  30.  
  31. Node *insertNode(T data)
  32. {
  33. Node *p, *p0;
  34. hashTableIndex bucket;
  35. bucket = myhash(data);
  36.  
  37. if ((p = new Node) == 0)
  38. {
  39. cout<<"no mem"<<endl;
  40. exit(1);
  41. }
  42.  
  43. p0 = hashTable[bucket];
  44. hashTable[bucket] = p;
  45.  
  46. p->next = p0;
  47. p->data = data;
  48.  
  49. return p;
  50. }
  51.  
  52. void deleteNode(T data)
  53. {
  54. Node *p0, *p;
  55. hashTableIndex bucket;
  56.  
  57. p0 = 0;
  58. bucket = myhash(data);
  59. p = hashTable[bucket];
  60.  
  61. while (p && !compEQ(p->data, data))
  62. {
  63. p0 = p;
  64. p = p->next;
  65. }
  66.  
  67. if (!p)
  68. return;
  69.  
  70. if (p0)
  71. p0->next = p->next;
  72. else
  73. hashTable[bucket] = p->next;
  74.  
  75. free(p);
  76. }
  77.  
  78.  
  79. Node *findNode (T data)
  80. {
  81. Node *p;
  82. p = hashTable[myhash(data)];
  83.  
  84. while (p && !compEQ(p->data, data))
  85. p = p->next;
  86.  
  87. return p;
  88. }
  89.  
  90.  
  91. int main()
  92. {
  93. for (int i = 10; i < 20; i++)
  94. {
  95. insertNode(i);
  96. }
  97.  
  98. for (int i = 0; i < 30; i++)
  99. {
  100. std::cout << ((findNode(i) != NULL) ? "+" : "-");
  101. }
  102. }
  103.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
----------++++++++++----------