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 Tempnil 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;
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 Tempnil 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;