Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi Bağlı Liste Ekleme,Silme,Listeleme
#1
Merhaba
Pratikte çok kullandığımız bir yöntem değil fakat özellikle öğrenci ödevleri için bolca gelen sorulardan birini paylaşmak istedim. Bağlı liste (Linked List) dediğimiz yapılarda tek yönlü olarak ekleme,silme,listeleme için bir örnek hazırladım.

unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
 TFrmOrnek = class(TForm)
   memSonuc: TMemo;
   BtnIslem: TButton;
   memSonuc2: TMemo;
   procedure BtnIslemClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 Ogrenci   = ^TOgrenci; // Struct Tanım
 TOgrenci  = record
   No      : Integer;
   Ad      : String;
   Soyad   : String;
   Sonraki : Ogrenci;
 end;

var
 FrmOrnek: TFrmOrnek;
 First : Ogrenci; // Bağlı Listenin İlk Elemanı
implementation

{$R *.dfm}

procedure Ekle(const No:Integer;const Adi,Soyadi:String); //Bağlı listeye eleman ekleme yapar
var AddItem,Temp : Ogrenci;
begin
    New(AddItem);
    AddItem^.No      := No;
    AddItem^.Ad      := Adi;
    AddItem^.Soyad   := Soyadi;
    AddItem^.Sonraki := nil;
    if First = nil then // İlk Eleman Boş İse
       First := AddItem
    else
    begin
         Temp:= First;
         while Temp^.Sonraki <> nil do
         begin
           Temp:=Temp^.Sonraki;
         end;
         Temp^.Sonraki:= AddItem; // Sona eleman eklendi
    end;
end;

function Sil(const No:Integer):Boolean;
var
 Tmp,TmpSil : Ogrenci;
begin
 Result := False;
 if First = nil then // İlk Eleman Boş İse
   Result := False
 else if First^.No = No then // Silinecek İlk Eleman İse
 begin
   TmpSil := First;
   First  := First^.Sonraki;
   Dispose(TmpSil);
   Result := True;
 end
 else // Aradan veya sondan eleman silme
 begin
   Tmp := First;
   while Tmp^.Sonraki <>nil do
   begin
     if Tmp^.Sonraki^.No = No then
     begin
       TmpSil := Tmp^.Sonraki;
       Tmp^.Sonraki := TmpSil^.Sonraki;
       Dispose(TmpSil);
       Result := True;
       Break;
     end;
     Tmp := Tmp^.Sonraki;
   end;
 end;
end;

procedure Listele(memLines:TStrings);
var
 Tmp : Ogrenci;
begin
 if First = nil then Exit;
 memLines.BeginUpdate;
 memLines.Clear;
 Tmp := First;
 while Tmp <> nil do
 begin
   memLines.Add(Format('Numara = %d, Adı = %s, Soyadı = %s',[Tmp^.No,Tmp^.Ad,Tmp^.Soyad]));
   Tmp := Tmp^.Sonraki;
 end;
 memLines.EndUpdate;
end;

procedure TFrmOrnek.BtnIslemClick(Sender: TObject);
begin
 Ekle(1,'Ahmet','TAŞARAN');
 Ekle(2,'Esra','KAYA');
 Ekle(3,'Canan','DEMİRCİ');
 Listele(memSonuc.Lines);
 Sil(2);
 Listele(memSonuc2.Lines);

{
 Sonuc1
 Numara = 1, Adı = Ahmet, Soyadı = TAŞARAN
 Numara = 2, Adı = Esra, Soyadı = KAYA
 Numara = 3, Adı = Canan, Soyadı = DEMİRCİ
}
{
 Sonuc2
 Numara = 1, Adı = Ahmet, Soyadı = TAŞARAN
 Numara = 3, Adı = Canan, Soyadı = DEMİRCİ
}

end;

end.
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#2
Aslında bunu bir (TList<T> gibi) generics tip ile tanımlı bir sınıf yazıp ona uyarlamak mümkün olabilir. Tabi bu öğrenciye verilen ödev açısından pek uygun düşmeyebilir ama generic tip tanımlayarak bu gibi ortak görevleri tek sınıfta tanımlamak ve o sınıfı geliştirmek yeterli olabilmektedir.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi de Program Bir defa Çalışsın woywod 16 8.378 04-02-2022, Saat: 17:38
Son Yorum: QuAdR
  Listbox HorizontalScrollBar Ekleme woywod 0 984 10-01-2022, Saat: 15:24
Son Yorum: woywod
  Örnek Delphi x64 Inline Assemblier Fonksiyonları PROGRAMADOR35 11 7.300 10-08-2021, Saat: 12:46
Son Yorum: maroonka
  Delphi de ADOConnection kullanarak SQL Server' a Bağlanma Procedure nuheroglu 4 4.493 19-05-2021, Saat: 16:44
Son Yorum: midorun87
Thumbs Up [Delphi] Yeni Başlayanlar İçin Güzel Kaynak Halil Han BADEM 3 5.684 27-12-2020, Saat: 23:28
Son Yorum: Hayati



Konuyu Okuyanlar: 1 Ziyaretçi