function принадлежит (t: T): boolean; | var i: integer; begin | i := h (t); | while used [i] and (val [i] <> t) do begin | | i := (i + 1) mod n; | end; {not used [i] or (val [i] = t)} | belong := used [i] and (val [i] = t); end; procedure добавить (t: T); | var i: integer; begin | i := h (t); | while used [i] and (val [i] <> t) do begin | | i := (i + 1) mod n; | end; {not used [i] or (val [i] = t)} | if not used [i] then begin | | used [i] := true; | | val [i] := t; | end; end; procedure исключить (t: T); | var i, gap: integer; begin | i := h (t); | while used [i] and (val [i] <> t) do begin | | i := (i + 1) mod n; | end; {not used [i] or (val [i] = t)} | if used [i] and (val [i] = t) then begin | | used [i] := false; | | gap := i; | | i := (i + 1) mod n; | | while used [i] do begin | | | if i = h (val[i]) then begin | | | | i := (i + 1) mod n; | | | end else if dist(h(val[i]),i) < dist(gap,i) then begin | | | | i := (i + 1) mod n; | | | end else begin | | | | used [gap] := true; | | | | val [gap] := val [i]; | | | | used [i] := false; | | | | gap := i; | | | | i := i + 1; | | | end; | | end; | end; end; Здесь dist (a, b) - измеренное по часовой стрелке (слева направо) расстояние от a до b, т.е. dist (a,b) = (b - a + n) mod n. (Мы прибавили n, так как функция mod правильно работает только при положительном делимом.)