26-11-2018, Saat: 22:05
Bir önceki konu başlığında tek yönlü bağlı liste ile işlemler yapmıştık.
Bu sefer çift yönlü bağlı liste üzerinde çalışacağız...
Bu sefer çift yönlü bağlı liste üzerinde çalışacağız...
Ogrenci = ^TOgrenci;
TOgrenci = record
Numara : Integer;
Ad : String;
Soyad : String;
Onceki : Ogrenci;
Sonraki : Ogrenci;
end;
var
Form1: TForm1;
First,Last,Temp : Ogrenci;
implementation
{$R *.dfm}
procedure AddItem(xNo:Integer;xAd,xSoyad:string);
Var Item : Ogrenci;
begin
New(Item);
Item^.Ad := xAd;
Item^.Soyad := xSoyad;
Item^.Numara := xNo;
if First = nil then
begin
First := Item;
Last := Item;
Last^.Onceki := nil;
Last^.Sonraki := nil;
end
else
begin
Last^.Sonraki := Item;
Item.Onceki := Last;
Last := Item;
Last^.Sonraki := nil;
end;
end;
procedure List(mem:TMemo);
begin
mem.Lines.Clear;
Temp := First;
while Temp <> nil do
begin
mem.Lines.Add(Format('%d %s %s',[Temp^.Numara,Temp^.Ad,Temp^.Soyad]));
Temp := Temp^.Sonraki;
end;
end;
function Search(No:Integer):Ogrenci;
begin
Temp := First;
while Temp<>nil do
begin
if Temp^.Numara = No then
begin
Result := Temp;
Break;
end;
Temp := Temp^.Sonraki;
end;
end;
procedure Delete(No:Integer);
Var DeleteTemp : Ogrenci;
begin
if First = nil then Exit;
if First^.Numara = No then
begin
DeleteTemp := First;
First := First^.Sonraki;
First^.Onceki := nil;
Dispose(DeleteTemp);
end
else
begin
Temp := First;
while Temp^.Sonraki <> nil do
begin
if Temp^.Sonraki^.Numara = No then
begin
DeleteTemp := Temp^.Sonraki;
if DeleteTemp = Last then
begin
Last := Temp;
Last^.Sonraki := nil;
end
else
begin
Temp^.Sonraki := DeleteTemp^.Sonraki;
DeleteTemp^.Sonraki^.Onceki := Temp;
end;
Dispose(DeleteTemp);
Break;
end;
Temp := Temp^.Sonraki;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
AddItem(171,'Mehmet','YILMAZ');
AddItem(172,'Ali','KÜÇÜK');
AddItem(173,'Merve','ŞEN');
List(Memo1);
Delete(172);
AddItem(174,'Halil','İBRAHİM');
List(Memo1);
{
SONUÇ
171 Mehmet YILMAZ
173 Merve ŞEN
174 Halil İBRAHİM
}
end;