Advertisement
machalda

Hash Table

Jan 16th, 2012
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.21 KB | None | 0 0
  1. unit SimpleHashTable;
  2.  
  3. interface
  4. const max=200;
  5. type index=1..max;
  6. element=string;
  7. zaznam=^ukzaznam;
  8. ukzaznam= record
  9.   data:element;
  10.   dalsi:zaznam;
  11.   pocet:word;
  12. end;
  13.  
  14. pole=array[index] of zaznam;
  15. var i:index;
  16.  
  17. procedure init(var p:pole);
  18. function klic(slovo:element):index;
  19. procedure pridej(var p:pole;slovo:element);
  20. function hledej(var p:pole;slovo:element):word;
  21. procedure zobraz(var p:pole);
  22.  
  23. implementation
  24.  
  25. procedure init(var p:pole);
  26. begin
  27.     for i:=1 to max do p[i]:=nil;
  28. end;
  29.  
  30. function klic(slovo:element):index;
  31. begin
  32.     if slovo='' then klic:=1
  33.     else
  34.     begin
  35.         klic:=( (ord(slovo[1])+ord(slovo[2])) mod max) +1
  36.     end;
  37. end;
  38.  
  39. procedure pridej(var p:pole;slovo:element);
  40. var i:index; pom,novy:zaznam; nalezeno:boolean;
  41. begin
  42.     i:=klic(slovo);
  43.     pom:=p[i];
  44.     nalezeno:=false;
  45.     while (pom<>nil) and not nalezeno do
  46.     begin
  47.         if slovo=pom^.data then
  48.         begin
  49.             nalezeno:=true;
  50.             pom^.pocet:=pom^.pocet+1;
  51.         end;
  52.         pom:=pom^.dalsi;
  53.     end;
  54.  
  55. if not nalezeno then
  56. begin
  57.     new(novy);
  58.     novy^.data:=slovo;
  59.     novy^.pocet:=1;
  60.     novy^.dalsi:=p[i];
  61.     p[i]:=novy;
  62. end
  63.  
  64. end;
  65.  
  66. function hledej(var p:pole;slovo:element):word;
  67. var i:index; pom:zaznam;
  68. pocet:word;
  69. begin
  70.     i:=klic(slovo);
  71.     pom:=p[i];
  72.     pocet:=0;
  73.     while (pom<>nil) and (pocet<>0) do
  74.     begin
  75.         if pom^.data=slovo then pocet:=pom^.pocet;
  76.         pom:=pom^.dalsi;
  77.     end;
  78.     hledej:=pocet;
  79. end;
  80.  
  81. procedure zobraz(var p:pole);
  82. var i:index; pom:zaznam;
  83. begin
  84.     for i:=1 to max do
  85.     begin
  86.         writeln('----------------------');
  87.         writeln('Hash: ',i);
  88.         writeln('----------------------');
  89.         pom:=p[i];
  90.             while pom<>nil do
  91.             begin
  92.                 writeln (pom^.data,' - ', pom^.pocet );
  93.                 pom:=pom^.dalsi;
  94.             end;
  95.     end;
  96. end;
  97.  
  98. end.
  99.  
  100.  
  101. /////////////////////////////////////////////////////////////////////////////////////////////////
  102.  
  103.  
  104. program Hash;
  105. uses SimpleHashTable;
  106.  
  107. var mojePole:pole;
  108. var pom:string;
  109. begin
  110.      init(mojePole);
  111.      while pom<>'konec' do
  112.      begin
  113.           write('Zadej retezec k ulozeni: ');
  114.           readln(pom);
  115.           pridej(mojePole, pom);
  116.      end;
  117.      zobraz(mojePole);
  118.      write('Co chces najit: ');
  119.      read(pom);
  120.      writeln(hledej(mojePole, pom));
  121.      readln;
  122.      readln;
  123. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement