fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. using namespace std;
  6.  
  7. int modulo=91; //od tego zalezy ile będzie pozycji w tablicy, proponowałbym liczbe pierwszą w okolicach np. ilosc wyrazow / 2 albo /3
  8.  
  9. struct Node
  10. {
  11. char* val;
  12. Node* next;
  13. };
  14.  
  15. int hash(const char* slowo);
  16. void add(char* klucz, Node*& lista);
  17. void search(char* klucz, Node* lista);
  18.  
  19. int main()
  20. {
  21. char* buf=new char[150]; //zakładam ze dłuższego slowa nie będzie :P
  22. int ile;
  23. cout<<"Ile elementow?"<<endl;
  24. cin>>ile;
  25.  
  26. Node** tablica = new Node*[modulo]; //nasza tablica z hashująca
  27. for (int i=0;i<modulo;i++)
  28. tablica[i]=NULL;
  29.  
  30. for (int i=0;i<ile;i++)
  31. {
  32. cin>>buf; //wczytywanie wyrazów do tablicy
  33. char* str = new char[150];
  34. strcpy(str,buf);
  35. add(str, tablica[hash(str)]); //dodawanie kolejnych wyrazów do tablicy
  36. }
  37.  
  38. for (int i=0;i<modulo;i++) //wypisanie tablicy
  39. {
  40. Node* rob=tablica[i];
  41. cout<<"Tablica["<<i<<"] =";
  42. while(rob)
  43. {
  44. cout<<" "<<rob->val;
  45. rob=rob->next;
  46. }
  47. cout<<endl;
  48. }
  49.  
  50. cout<<"Czego szukac?"<<endl;
  51. cin>>buf;
  52. search(buf, tablica[hash(buf)]);
  53.  
  54. cin.sync();
  55. cin.get();
  56. return EXIT_SUCCESS;
  57. }
  58. //////////////////////////////////////////////////////////
  59. int hash(const char* slowo)
  60. {
  61. int ret=0;
  62. int n=strlen(slowo); //dlugosć słowa
  63.  
  64. while(n>=sizeof(int)) //dopóki są kawałki po 4 bajty
  65. {
  66. ret^=*(int*)slowo; //xor na 4 bajtach
  67. n-=sizeof(int); //"skracamy słowo"
  68. slowo+=sizeof(int); //przesuwamy sie dalej
  69. }
  70.  
  71. int rem=0; //to co nam zostało, tzn 1,2 lub 3 bajty
  72. while(n--)
  73. {
  74. rem<<=8; //przesuwamy się o 1 bajt
  75. rem^=*slowo++; //xor
  76. }
  77. ret^=rem;
  78. return ret%modulo;
  79. }
  80. //////////////////////////////////////////////////////////
  81. void add(char* klucz, Node*& lista)
  82. {
  83. Node* tmp = new Node;
  84. tmp->val = klucz;
  85. tmp->next = lista;
  86. lista=tmp;
  87. }
  88. /////////////////////////////////////////////////////////////
  89. void search(char* klucz, Node* lista)
  90. {
  91. int ile = 1;
  92. if (!lista)
  93. cout<<"Brak, lista dla danego hasha pusta"<<endl;
  94. else
  95. {
  96. while((lista) && (strcmp(lista->val,klucz)))
  97. {
  98. lista=lista->next;
  99. ile++;
  100. }
  101. if (lista && !strcmp(lista->val,klucz))
  102. cout<<klucz<<" znalezione po "<<ile<<" porownaniach"<<endl;
  103. }
  104. }
Success #stdin #stdout 0.01s 2864KB
stdin
4
Ala
Ola
Ela
Ula
Ala
stdout
Ile elementow?
Tablica[0] =
Tablica[1] =
Tablica[2] = Ela
Tablica[3] =
Tablica[4] =
Tablica[5] =
Tablica[6] =
Tablica[7] =
Tablica[8] =
Tablica[9] =
Tablica[10] =
Tablica[11] =
Tablica[12] =
Tablica[13] =
Tablica[14] =
Tablica[15] =
Tablica[16] =
Tablica[17] =
Tablica[18] =
Tablica[19] =
Tablica[20] =
Tablica[21] =
Tablica[22] =
Tablica[23] =
Tablica[24] =
Tablica[25] =
Tablica[26] =
Tablica[27] =
Tablica[28] =
Tablica[29] = Ala
Tablica[30] =
Tablica[31] =
Tablica[32] =
Tablica[33] =
Tablica[34] =
Tablica[35] =
Tablica[36] =
Tablica[37] =
Tablica[38] =
Tablica[39] =
Tablica[40] =
Tablica[41] =
Tablica[42] =
Tablica[43] =
Tablica[44] =
Tablica[45] =
Tablica[46] =
Tablica[47] =
Tablica[48] =
Tablica[49] =
Tablica[50] =
Tablica[51] =
Tablica[52] =
Tablica[53] =
Tablica[54] =
Tablica[55] =
Tablica[56] =
Tablica[57] =
Tablica[58] =
Tablica[59] =
Tablica[60] =
Tablica[61] =
Tablica[62] =
Tablica[63] =
Tablica[64] =
Tablica[65] =
Tablica[66] =
Tablica[67] =
Tablica[68] =
Tablica[69] =
Tablica[70] =
Tablica[71] = Ola
Tablica[72] =
Tablica[73] =
Tablica[74] =
Tablica[75] =
Tablica[76] = Ula
Tablica[77] =
Tablica[78] =
Tablica[79] =
Tablica[80] =
Tablica[81] =
Tablica[82] =
Tablica[83] =
Tablica[84] =
Tablica[85] =
Tablica[86] =
Tablica[87] =
Tablica[88] =
Tablica[89] =
Tablica[90] =
Czego szukac?
Ala znalezione po 1 porownaniach