unit us; interface type ref = ^member; member = record key : integer; count : integer; {pocet vyskytu} next : ref; end; Psez = ^sez; sez = record Root, { fiktivni prvni prvek seznamu } Tail :ref; {fiktivni posledni prvek seznamu } end; procedure inic(var P:psez); {vytvari prazdny seznam P } procedure search( X:integer; P:psez); { hleda prvek s klicem X v usporadanem seznamu P najde-li ho zvetsi mu count o 1 nenajde-li ho tam, vlozi ho na spravne misto s hodnotou count 1 } implementation procedure inic(var P:psez); {vytvari prazdny seznam P } begin new(P); with P^do begin new(Root); new(Tail); Root^.next:=Tail; end; end; procedure search( X:integer; P:psez); {hleda prvek s klicem X v usporadanem seznamu P najde-li ho zvetsi mu count o 1 nenajde-li ho tam, vlozi ho na spravne misto s hodnotou count 1} var W1,W2 :ref; {W1 jde o krok pred W2 } begin with P^ do begin W2:=Root; W1:=W2^.next; Tail^.key:=X; {zarazka} while W1^.key < X do begin W2:=W1; W1:=W1^.next; end; { W1^.key >= X} if (W1^.key=x) and (w1<>Tail) then {nasel jsem ho } W1^.count:= W1^.count+1 else begin {neni tam a musim ho vlozit pred W1 } new(W2^.next); with W2^.next^ do begin key:=X; count:=1; next:=W1; end; end; end {of with} end {of search}; end.