Pagini recente » Cod sursa (job #2119955) | Cod sursa (job #2061004) | Cod sursa (job #1155096) | Cod sursa (job #2393939) | Cod sursa (job #299388)
Cod sursa(job #299388)
// Arhiva educationala - Hashuri
// H(key) = key mod 65535 = key AND 65535
const
MARE = 65535;
type
adresa = ^nod;
nod = record inf : longint; adr : adresa; end;
var
n, op, key, i : longint;
h : array[0..MARE] of adresa;
f, g : text;
function query (key : longint) : longint;
var q : adresa;
begin
q := h [key AND MARE];
while (q <> nil) and (q^.inf <> key) do
q := q^.adr;
if (q <> nil) then
query := 1
else
query := 0;
end;
procedure insert (key : longint);
var q : adresa;
begin
if (query (key) = 0) then
begin
new (q);
q^.inf := key;
q^.adr := h [key AND MARE];
h [key AND MARE] := q;
end;
end;
procedure delete (key : longint);
var q, t : adresa;
begin
q := h [key and MARE];
if (q = nil) then exit;
if (q^.inf = key) then
begin
h [key AND MARE] := q^.adr;
dispose (q);
exit;
end;
while (q <> nil) and (q^.adr <> nil) do
begin
if (q^.adr^.inf = key) then
begin
t := q^.adr;
q^.adr := q^.adr^.adr;
dispose (t);
exit;
end;
q := q^.adr;
end;
end;
begin
assign (f, 'hashuri.in'); assign (g, 'hashuri.out');
reset (f); rewrite (g);
readln (f, n);
for i := 1 to n do
begin
readln (f, op, key);
case op of
1 : insert (key);
2 : delete (key);
3 : writeln(g, query (key));
end;
end;
close (f); close (g);
end.