program listas;
type mut = ^elem;
elem = record
szam:Integer;
kov:mut;
end;
var lista:mut;
x,miutan,szam:Integer;
{1}
procedure beirvegere(var elso:mut;mit:Integer);
var p,uj:mut;
begin
new(uj);
uj^.szam:=mit;
uj^.kov:=nil;
if elso=nil then elso:=uj
else
begin
p:=elso;
while p^.kov<>nil do p:=p^.kov;
p^.kov:=uj;
end;
end;
{2}
procedure beirelejere(var elso:mut;mit:Integer);
var uj:mut;
begin
new(uj);
uj^.szam:=mit;
uj^.kov:=elso;
elso:=uj;
end;
{3}
procedure kiir(elso:mut);
var p:mut;
begin
if elso=nil then WriteLn('A lista ures')
else
begin
Write('A lista:');
p:=elso;
while p<>nil do
begin
Write(p^.szam,' ');
p:=p^.kov;
end;
WriteLn;
end;
end;
{4}
procedure torolelejerol(var elso:mut);
var p:mut;
begin
if elso<>nil then
begin
p:=elso;
elso:=elso^.kov;
dispose(p);
end;
end;
{5}
procedure torolvegerol(var elso:mut);
var p,q:mut;
begin
if elso<>nil then
if elso^.kov<>nil then
begin
p:=elso;
while p^.kov^.kov<>nil do p:=p^.kov;
q:=p^.kov;
p^.kov:=nil;
dispose(q);
end
else
begin
dispose(elso);
elso:=nil;
end
end;
{6}
procedure beszurutan(var elso:mut;mit,miutan:Integer);
var p,uj:mut;
lehet:boolean;
begin
lehet:=false;
p:=elso;
while (p<>nil) do
begin
if p^.szam=miutan then
begin
new(uj);
uj^.szam:=mit;
uj^.kov:=p^.kov;
p^.kov:=uj;
lehet:=true;
p:=p^.kov^.kov;
end else p:=p^.kov;
end;
if not lehet then WriteLn('Nem lehetseges!');
end;
{7}
procedure beszurele(var elso:mut;mit,miele:Integer);
var p,uj:mut;
lehet:boolean;
begin
lehet:=false;
p:=elso;
while p<>nil do
begin
if p^.szam=miele then
begin
new(uj);
uj^:=p^;
p^.szam:=mit;
p^.kov:=uj;
lehet:=true;
p:=p^.kov^.kov;
end else p:=p^.kov;
end;
if not lehet then WriteLn('Nem lehet!');
end;
{8}
procedure beszurk(var elso:mut;mit,k:Integer);
var uj,p:mut;
lehet:boolean;
db:Integer;
begin
lehet:=false;
db:=1;
p:=elso;
while p<>nil do
begin
if db=k then
begin
new(uj);
uj^:=p^;
p^.szam:=mit;
p^.kov:=uj;
lehet:=true;
end;
p:=p^.kov;
Inc(db);
end;
if(p=nil) and (k=db) then
begin
beirvegere(lista,mit);
lehet:=true;
end;
if not lehet then WriteLn('Nem lehet.');
end;
{9}
procedure torolelemet(var elso:mut;mit:Integer);
var p,q:mut;
begin
while elso^.szam=mit do
begin
torolelejerol(elso);
end;
p:=elso;
while p<>nil do
begin
if p^.kov^.szam=mit then
begin
q:=p^.kov;
p^.kov:=p^.kov^.kov;
dispose(q);
end;
p:=p^.kov;
end;
end;
begin
lista:=nil;
repeat
WriteLn;
WriteLn('1. Beir a vegere');
WriteLn('2. Beir az elejere');
WriteLn('3. Kiir');
WriteLn('4.Torol az elejerol');
WriteLn('5.Torol a vegerol');
WriteLn('6.Beszuras minden adott elem utan');
WriteLn('7.Beszuras minden adott elem ele');
WriteLn('8.Elem beszurasa k. helyre');
WriteLn('9.Adott elem minden elofordulasanak torlese');
WriteLn('10.Rendez (shell-sort)');
WriteLn('11.Rendez (bubble sort)');
WriteLn('12.Felszabaditas');
WriteLn('0. Kilepes');
Write('A valasztas:');
ReadLn(x);
WriteLn;
case x of
1: begin
Write('Elem:');
ReadLn(szam);
beirvegere(lista,szam);
end;
2: begin
Write('Elem:');
ReadLn(szam);
beirelejere(lista,szam);
end;
3: kiir(lista);
4: torolelejerol(lista);
5: torolvegerol(lista);
6: begin
Write('Elem:');
ReadLn(szam);
Write('Mi utan:');
ReadLn(miutan);
beszurutan(lista,szam,miutan);
end;
7: begin
Write('Elem:');
ReadLn(szam);
Write('Mi ele:');
ReadLn(miutan);
beszurele(lista,szam,miutan);
end;
8: begin
Write('Elem:');
ReadLn(szam);
Write('Hova:');
ReadLn(miutan);
beszurk(lista,szam,miutan);
end;
9: begin
Write('Elem:');
ReadLn(szam);
torolelemet(lista,szam);
end;
end;
until x=0;
end.