Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
İkili Arama Ağacı (Binary Search Tree)
#1
İkili Arama Ağacı nedir? bakınız.

Delphi Sample

Meraklıları için kod ;

  type
 Node    = ^TNode;
 TNode   = record
 eleman  : Integer;
 Sol,Sag : Node;
 end;

{
          50
       /     \
      30      70
     /  \    /  \
   20   40  60   80
}

var
 Form1: TForm1;

implementation

{$R *.dfm}

function NewNode(AEleman:Integer):Node;
begin
 New(Result);
 Result^.eleman := AEleman;
 Result^.Sol    := nil;
 Result^.Sag    := nil;
end;

function InsertNode(ANode:Node;AEleman:Integer):Node;
begin
 if ANode = nil then
   Result := NewNode(AEleman)
 else
 begin
   if AEleman <= ANode^.eleman then
     ANode^.Sol := InsertNode(ANode^.Sol,AEleman)
   else
     ANode^.Sag := InsertNode(ANode^.Sag,AEleman);
   Result := ANode;
 end;
end;

function En_Kucuk(ARoot:Node):Node;
begin
 if ARoot^.Sol = nil then
   Result := ARoot
 else
   result := En_Kucuk(ARoot^.Sol);
end;

function En_Buyuk(ARoot:Node):Node;
begin
 if ARoot^.Sag = nil then
   Result := ARoot
 else
   result := En_Buyuk(ARoot^.Sag);
end;

procedure InOrderList(ARoot:Node;AMem:TMemo); // Sol,Kök,Sağ
begin
 if ARoot <> nil then
 begin
   InOrderList(ARoot^.Sol,AMem);
   AMem.Lines.Add(ARoot.eleman.ToString);
   InOrderList(ARoot^.Sag,AMem);
 end;
end;

procedure PreOrderList(ARoot:Node;AMem:TMemo); // Kök,Sol,Sağ
begin
 if ARoot <> nil then
 begin
   AMem.Lines.Add(ARoot.eleman.ToString);
   PreOrderList(ARoot^.Sol,AMem);
   PreOrderList(ARoot^.Sag,AMem);
 end;
end;

procedure PostOrderList(ARoot:Node;AMem:TMemo); // Sol,Sağ,Kök
begin
 if ARoot <> nil then
 begin
   PostOrderList(ARoot^.Sol,AMem);
   PostOrderList(ARoot^.Sag,AMem);
   AMem.Lines.Add(ARoot.eleman.ToString);
 end;
end;

function Search(ARoot:Node;Aranan:Integer):Node;
begin
 if ARoot = nil then
   Result := nil
 else
 begin
   if Aranan < ARoot^.eleman then
     Result := Search(ARoot^.Sol,Aranan)
   else if Aranan > ARoot^.eleman then
     Result := Search(ARoot^.Sag,Aranan)
   else
     Result := ARoot;
 end;
end;

procedure TForm1.BtnListeleClick(Sender: TObject);
begin
 Var Root : Node;
 Root := nil;
 Root := InsertNode(Root,50);
 InsertNode(Root, 30);
 InsertNode(Root, 20);
 InsertNode(Root, 40);
 InsertNode(Root, 70);
 InsertNode(Root, 60);
 InsertNode(Root, 80);

 MemNodeInOrder.Lines.Add('In Order');
 InOrderList(Root,MemNodeInOrder);

 MemNodePreOrder.Lines.Add('Pre Order');
 PreOrderList(Root,MemNodePreOrder);

 MemNodePostOrder.Lines.Add('Post Order');
 PostOrderList(Root,MemNodePostOrder);

 edtEnKucuk.Text := 'En Küçük ' + IntToStr(En_Kucuk(Root).eleman);
 edtEnBuyuk.Text := 'En Büyük ' + IntToStr(En_Buyuk(Root).eleman);

 Var Temp : Node;
 Temp := Search(Root,20);
 if Temp <> nil then
   edtSearch.Text := 'Bulunan ' + Temp^.eleman.ToString
 else
   edtSearch.Text := 'Bulunamadı!';
end;

end.
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#2
Ellerinize sağlık. En küçük ve en büyüğü bulduğunuz rutinlerdeki reqursive arama yerine while döngüsü kullanmanız çok daha hızlı netice almanıza neden olabilir. Onun dışında, kod içinde değişken tanımlamak ne kadar da kötü görünüyor(tabii bu benim kişisel görüşüm). İlk bakışta kodda hata var diye düşündürdü bana :-)
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
(08-01-2019, Saat: 09:00)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Ellerinize sağlık. En küçük ve en büyüğü bulduğunuz rutinlerdeki reqursive arama yerine while döngüsü kullanmanız çok daha hızlı netice almanıza neden olabilir. Onun dışında, kod içinde değişken tanımlamak ne kadar da kötü görünüyor(tabii bu benim kişisel görüşüm). İlk bakışta kodda hata var diye düşündürdü bana :-)

Projede yazılan kodlarda kod içinde değişken tanımlamak bencede kötü görüntü ve kod karmaşasına neden oluyor :Smile Fakat böyle test çalışmalarında beni yukarıya tırmandırmaktan kurtarıyor, haliyle üşengeçlik bizde bu nimeti kullanıyoruz Smile
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#4
(08-01-2019, Saat: 09:09)narkotik Adlı Kullanıcıdan Alıntı:
(08-01-2019, Saat: 09:00)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Ellerinize sağlık. En küçük ve en büyüğü bulduğunuz rutinlerdeki reqursive arama yerine while döngüsü kullanmanız çok daha hızlı netice almanıza neden olabilir. Onun dışında, kod içinde değişken tanımlamak ne kadar da kötü görünüyor(tabii bu benim kişisel görüşüm). İlk bakışta kodda hata var diye düşündürdü bana :-)

Projede yazılan kodlarda kod içinde değişken tanımlamak bencede kötü görüntü ve kod karmaşasına neden oluyor :Smile Fakat böyle test çalışmalarında beni yukarıya tırmandırmaktan kurtarıyor, haliyle üşengeçlik bizde bu nimeti kullanıyoruz Smile

Yanlış hatırlamıyorsam henüz öğrencisin, daha yolun başındasın. Şimdiden değiştirmeye çalış üşengeçliği. Emin ol üşengeçlik başına çok bela açar Wink
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#5
(08-01-2019, Saat: 09:11)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:
(08-01-2019, Saat: 09:09)narkotik Adlı Kullanıcıdan Alıntı: Projede yazılan kodlarda kod içinde değişken tanımlamak bencede kötü görüntü ve kod karmaşasına neden oluyor :Smile Fakat böyle test çalışmalarında beni yukarıya tırmandırmaktan kurtarıyor, haliyle üşengeçlik bizde bu nimeti kullanıyoruz Smile

Yanlış hatırlamıyorsam henüz öğrencisin, daha yolun başındasın. Şimdiden değiştirmeye çalış üşengeçliği. Emin ol üşengeçlik başına çok bela açar Wink

@Tuğrul HELVACI hocam üşengeçlik konusuna bende sizinle aynı fikirdeyim ve ilave etmek istediğim başka bir şeyde 
aman nasıl olsa ben ilerde burada çalışmam çalışan düşünsün zihniyeti ile bu aralar çok karşılaşıyorum. 
Gençlerimiz şunu atlıyorlar ya bu zihniyet senin yeni gideceğin yerdeki ve senden önceki kişinin zihniyeti ise ne yapacaksın.
aynı sarmalın içinde kalacaksın bu yüzden yeni kod geliştiren arkadaşlarımıza önerim üşenmeyin, bana ne demeyin, aman ne olacak demeyin, bir ara düzeltirim demeyin.
Kusura bakmayın biraz başınızı ağrıttım belki fakat 15 gündür bu zihniyetle yazılmış kodların içinde yol bulmaya çalışıyorum.
O yüzden biraz dertliyim. herkese iyi çalışmalar
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#6
(08-01-2019, Saat: 09:11)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:
(08-01-2019, Saat: 09:09)narkotik Adlı Kullanıcıdan Alıntı: Projede yazılan kodlarda kod içinde değişken tanımlamak bencede kötü görüntü ve kod karmaşasına neden oluyor :Smile Fakat böyle test çalışmalarında beni yukarıya tırmandırmaktan kurtarıyor, haliyle üşengeçlik bizde bu nimeti kullanıyoruz Smile

Yanlış hatırlamıyorsam henüz öğrencisin, daha yolun başındasın. Şimdiden değiştirmeye çalış üşengeçliği. Emin ol üşengeçlik başına çok bela açar Wink
2 senedir Delphi yazilim uzmani olarak çalışıyorumSmile Geceleride kafama estikçe aklıma gelen bir konuya, kişisel projelere bakıyorum. Hatirlamıyorum bile o an öyle kolay gelmistir, yazmışım dırSmile

(08-01-2019, Saat: 09:50)adelphiforumz Adlı Kullanıcıdan Alıntı:
(08-01-2019, Saat: 09:11)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Yanlış hatırlamıyorsam henüz öğrencisin, daha yolun başındasın. Şimdiden değiştirmeye çalış üşengeçliği. Emin ol üşengeçlik başına çok bela açar Wink

@Tuğrul HELVACI hocam üşengeçlik konusuna bende sizinle aynı fikirdeyim ve ilave etmek istediğim başka bir şeyde 
aman nasıl olsa ben ilerde burada çalışmam çalışan düşünsün zihniyeti ile bu aralar çok karşılaşıyorum. 
Gençlerimiz şunu atlıyorlar ya bu zihniyet senin yeni gideceğin yerdeki ve senden önceki kişinin zihniyeti ise ne yapacaksın.
aynı sarmalın içinde kalacaksın bu yüzden yeni kod geliştiren arkadaşlarımıza önerim üşenmeyin, bana ne demeyin, aman ne olacak demeyin, bir ara düzeltirim demeyin.
Kusura bakmayın biraz başınızı ağrıttım belki fakat 15 gündür bu zihniyetle yazılmış kodların içinde yol bulmaya çalışıyorum.
O yüzden biraz dertliyim. herkese iyi çalışmalar
Ben 6 aydir o şekil yazilmis bir projenin icindeyim , anlıyorum sizi
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#7
Bende sevmiyorum hocam.
Aslında delphide local değişken tanımlama(yukarıya var bölümüne) kısayolu var.

Örneğin :
kelime := 'delphiCan';
yazdığımızda procedure içerisine Ctrl+Shift+V tuşlarına bastığımızda kendisi yukarıya tanımlıyor.

yazdık altı kırmızı çizili tanımlı değil . Kısayol tuşuna bastık.
   

OK deyince kendi tanımlıyor.
   

Ben Gexperts, cnPack kullandığım için bu tuş kombinasyonu bende çalışmadı.
bende Gexpertsin IDE Menu Shorcuts menusunden kısayolunu değiştirdim(Ctrl+")
   

Kullanıyorum. 
Bilmeyende yada içeride değişken oluşturmayı sevmeyenler için alternatif olabilir.

Ek : http://docwiki.embarcadero.com/RADStudio...w_(Delphi)
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Dizilerde Ortanca Değer İle Arama narkotik 0 1.378 14-01-2019, Saat: 23:58
Son Yorum: narkotik
  Delphi Çift Yönlü Bağlı Liste Ekleme,Silme,Listeleme,Arama narkotik 0 1.731 26-11-2018, Saat: 22:05
Son Yorum: narkotik



Konuyu Okuyanlar: 1 Ziyaretçi