Unit ListUnik; {1995.03.06. ListUnik.pas} Interface { String elemekbl ll listk kezelse: } Type ElemTip = String; Mut = ^ListaElem; ListaElem= Record szoveg : ElemTip; kov,elo: Mut End; Lista = Record fej,akt : Mut; hiba : Boolean; End; Permut =^Perelem; Perelem = record szoveg: Elemtip; kov: permut; tars: mut; end; Perlista = record fej,akt: permut; hiba:boolean; end; Const UresLista: Lista=(fej:Nil;akt:Nil; hiba:False); Procedure ListaUres{legyen}(Var l:Lista); Procedure PListaUres{legyen}(Var l:perLista); Function ListaUresE{?}(l:Lista): Boolean; Function pListaUresE{?}(l:perLista): Boolean; Procedure ListaElejere{pozicional}(Var l:Lista); Procedure pListaElejere{pozicional}(Var l:perLista); Procedure Listaba{illeszt}(Var l:Lista; elem: ElemTip); Procedure pListaba{illeszt}(Var l:perLista; elem: ElemTip); Procedure ListabaEle{illeszt}(Var l:Lista; elem: ElemTip); Procedure Listabol{kivesz}(Var l:Lista); Procedure ListaKovre{pozicional}(Var l:Lista); Procedure pListaKovre{pozicional}(Var l:perLista); Procedure ListaElozore{pozicional}(Var l:Lista); Function ListaAktElem(Var l:Lista): ElemTip; Function pListaAktElem(Var l:perLista): ElemTip; Function ListaUtolsoE{?}(Var l:Lista): Boolean; Function ListaElsoE{?}(Var l:Lista): Boolean; Function ListaHibaE{?}(Var l:Lista): Boolean; Implementation Procedure Felszabadit(Var mit: Mut); Begin If mit<>Nil then Begin Felszabadit(mit^.kov); Dispose(mit); mit:=Nil End End; Procedure PFelszabadit(Var mit: perMut); Begin If mit<>Nil then Begin PFelszabadit(mit^.kov); Dispose(mit); mit:=Nil End End; Procedure ListaUres(Var l:Lista); Begin If l.fej<>Nil then Felszabadit(l.fej); l.akt:=Nil; End; Procedure PListaUres(Var l:perLista); Begin If l.fej<>Nil then PFelszabadit(l.fej); l.akt:=Nil; End; Function ListaUresE{?}(l:Lista):Boolean; Begin ListaUresE:=(l.fej=Nil) End; Function PListaUresE{?}(l:perLista):Boolean; Begin PListaUresE:=(l.fej=Nil) End; Procedure ListaElejere{pozicional}(Var l:Lista); Begin If l.fej=Nil then l.hiba:=True; l.akt:=l.fej End; Procedure PListaElejere{pozicional}(Var l:perLista); Begin If l.fej=Nil then l.hiba:=True; l.akt:=l.fej End; Procedure Listaba{illeszt}(Var l:Lista; elem: ElemTip); Var uj : Mut; Begin New(uj); If l.fej=Nil then Begin uj^.szoveg:=elem; uj^.kov:=Nil; uj^.elo:=Nil; l.fej:=uj; l.akt:=l.fej End else If l.akt=Nil then {lelptnk a listrl: beszrs a vgre} Begin l.akt:=l.fej; While l.akt^.kov^.kov<>Nil do l.akt:=l.akt^.kov; uj^.szoveg:=elem; uj^.kov:=l.akt^.kov; l.akt^.kov:=uj; l.akt:=uj End Else Begin { uj^.szoveg:=elem; uj^.kov:=l.akt^.kov; l.akt^.kov:=uj; l.akt:=uj} uj^.szoveg:=elem; uj^.kov:=l.akt^.kov; uj^.elo:=l.akt; l.akt^.kov:=uj; { If l.akt^.kov<>Nil then l.akt^.kov^.elo:=uj;} l.akt:=uj; End; End; Procedure pListaba{illeszt}(Var l:perLista; elem: Elemtip); Var uj : perMut; Begin New(uj); If l.fej=Nil then Begin uj^.szoveg:=elem; uj^.kov:=Nil; l.fej:=uj; l.akt:=l.fej End else If l.akt=Nil then {lelptnk a listrl: beszrs a vgre} Begin l.akt:=l.fej; While l.akt^.kov^.kov<>Nil do l.akt:=l.akt^.kov; uj^.szoveg:=elem; uj^.kov:=l.akt^.kov; l.akt^.kov:=uj; l.akt:=uj End Else Begin { uj^.szoveg:=elem; uj^.kov:=l.akt^.kov; l.akt^.kov:=uj; l.akt:=uj} uj^.szoveg:=elem; uj^.kov:=l.akt^.kov; {uj^.elo:=l.akt;} l.akt^.kov:=uj; { If l.akt^.kov<>Nil then l.akt^.kov^.elo:=uj;} l.akt:=uj; End; End; Procedure ListabaEle{illeszt}(Var l:Lista; elem: ElemTip); Var uj : Mut; Begin New(uj); If l.fej=Nil then {resbe} Begin uj^.szoveg:=elem; uj^.kov:=Nil; uj^.elo:=Nil; l.fej:=uj; l.akt:=l.fej End else If l.akt=l.fej then {1. el} Begin uj^.szoveg:=elem; uj^.kov:=l.fej; uj^.elo:=Nil; l.akt^.elo:=uj; l.fej:=uj; l.akt:=l.fej End Else Begin uj^.szoveg:=elem; uj^.kov:=l.akt; uj^.elo:=l.akt^.elo; {az akt nem az 1.} l.akt^.elo^.kov:=uj; l.akt^.elo:=uj; l.akt:=uj End; End; Procedure Listabol{kivesz}(Var l:Lista); Var ki : Mut; Begin If (l.fej<>Nil) and (l.akt<>Nil) then Begin ki:=l.akt; l.akt:=l.fej; If l.akt=ki then {az 1. elem a kihagyand} Begin Dispose(l.fej); l.fej:=l.akt^.kov; l.akt:=l.fej; End Else Begin While l.akt^.kov<>ki do l.akt:=l.akt^.kov; l.akt^.kov:=ki^.kov; Dispose(ki); End; End Else l.hiba:=True; {EndIf}; End; Procedure ListaKovre{pozicional}(Var l:Lista); Begin If l.akt<>Nil then l.akt:=l.akt^.kov else l.hiba:=True; End; Procedure pListaKovre{pozicional}(Var l:perLista); Begin If l.akt<>Nil then l.akt:=l.akt^.kov else l.hiba:=True; End; Procedure ListaElozore{pozicional}(Var l:Lista); Begin If l.akt<>Nil then l.akt:=l.akt^.elo else l.hiba:=True; End; Function ListaAktElem(Var l:Lista): ElemTip; Begin If l.akt<>Nil then ListaAktElem:=l.akt^.szoveg else l.hiba:=True; End; Function pListaAktElem(Var l:perLista): ElemTip; Begin If l.akt<>Nil then pListaAktElem:=l.akt^.szoveg else l.hiba:=True; End; Function ListaUtolsoE{?}(Var l:Lista): Boolean; Begin If l.fej=Nil then l.hiba:=True; ListaUtolsoE:=(l.akt^.kov=Nil) End; Function ListaElsoE{?}(Var l:Lista): Boolean; Begin If l.fej=Nil then l.hiba:=True; ListaElsoE:=(l.akt^.elo=l.fej) End; Function ListaHibaE{?}(Var l:Lista): Boolean; Begin ListaHibaE:=l.hiba; l.hiba:=False; End; Begin {fej:=Nil; akt:=Nil; hiba:=False} End.