21-10-2018, Saat: 13:05
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.
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..

