Delphi Can

Orjinalini görmek için tıklayınız: Delphi Çift Yönlü Bağlı Liste Ekleme,Silme,Listeleme,Arama
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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...

 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;