Java Düğüm mantığı ve kullanımı

Merhaba arkadaşlar.

Java dilinde basitçe düğüm mantığını anlatmak istedim sizlere. Birçok dilde de benzer yapıda kullanabilirsiniz.

Düğümler, birbirine bağlı objeler, sınıflar olarak düşünebiliriz. Veri aramak, gezinti yapmak için kullanılan faydalı yapılardır.
Birçok durum için kullanılabilir. Gruplama, çok verili listeleme gibi ve çok gruplu verileri, başka çok gruplu veriler ile karşılaştırma gibi.

Basitçe syntax'ını yazalım;

Java:
public class Node{
 
    int sayi;
    String isim;
    Node next;
}

Üsteki kodumuz, düğümdeki bulunan verileri temsil eder ve bir düğümü diğer düğüme bağlanması içinde, next adında Node sınıfını temsil eden bir obje belirtiyoruz.

Java:
public class Main{
 
    public static void main(String[] args){
   
        Node A = new Node();
        Node B = new Node();
        Node C = new Node();
   
        A.sayi = 14;
        A.isim = "Çırpı";
   
        B.sayi = 16;
        B.isim "Cavidan";
   
        C.sayi = 11;
        B.isim = "Mükremin"
   
        A.next = B;
        B.next = C;
        C.next = null;
    }
}

Şeklinde düğülerimizi oluşturur ve birbirine bağlarız.

Kısaca böyle bir yapı oluşur;
1688595089173.png


Java:
Node temp = A;
while(temp != null){
    System.out.println(temp.isim + " adlı kişinin yaşı: " + temp.sayi);
    temp.next;
}

Üstekli kod ile de basitçe travelling yaparak yani düğümler üzerinde gezerek bilgiler edinebiliriz.


Böyle konular ve daha fazlası için beni takip etmeyi unutmayın ve beğenileriniz eksik etmeyin, he he :D.
 
Son düzenleme:
Hocam LeetCode'da rank kasmak ne oluyor? LeetCode güzel bir siteye benziyor bakıyorum şimdi. Yeniyim ben bu işlerde. Okul ne öğrettiyse onu biliyorum.
Keşke daha önceden bilseymişim, tam sınavlara çalışmalık siteymiş. Beğendim.
Algoritma soruları çözüp, yazdığın algoritmanın time ve space complexity'sine göre sıralaman oluyor. Ek olarak haftalık sıralamalar var, bi kaç soru oluyor ne kadar sürede tamamladığına göre sıralaman oluyor. Eğlenceli. İlk başlarda yazdığım algoritmaları genelde time complexity'i hesaba almadan yazıyordum, dolayısıyla yavaş çalışıyordu. Ek olarak kullandığın dilde çeşitli optimizasyonlar oluyor, onları da öğrendikten sonra yazmak daha da kolay oluyor.
 
Peki siz nasıl yazıyorsunuz bu kodları? Nasıl derken, örneğin ben önce zaman ve yer karmaşasını es geçip en kolay anlaşılacak şekilde kodu yazıp sonra düzenliyorum. Arama yapacaksam önce bubble ile yazıp aramışım mesela, onu binary'e dönüştürüyorum. Veya iterasyon ile yazdığım kodu yinelemeli daha hızlı yazabiliyorsam ona çeviririm. Fazladan kullandığım değişkenler var ise onları silerim falan. Sizlerin optimizasyon yöntemleri nasıl oluyor?
 
Peki siz nasıl yazıyorsunuz bu kodları? Nasıl derken, örneğin ben önce zaman ve yer karmaşasını es geçip en kolay anlaşılacak şekilde kodu yazıp sonra düzenliyorum. Arama yapacaksam önce bubble ile yazıp aramışım mesela, onu binary'e dönüştürüyorum. Veya iterasyon ile yazdığım kodu yinelemeli daha hızlı yazabiliyorsam ona çeviririm. Fazladan kullandığım değişkenler var ise onları silerim falan. Sizlerin optimizasyon yöntemleri nasıl oluyor?
Mesela adamın biri bitwise XOR, AND ve bitwise complement tekniği ile bir dizideki verileri 0 ms. sıralayabiliyor ve en az tekrarlananı bile gösteriyordu.. Çok ilginçti. Ben yazdığımda 1000 ms :D.

Bu birazda farklı düşünmek. Herkeste böyle zeka olmaz. Doğuştan gelen özellik.
 
Mesela adamın biri bitwise XOR, AND ve bitwise complement tekniği ile bir dizideki verileri 0 ms. sıralayabiliyor ve en az tekrarlananı bile gösteriyordu.. Çok ilginçti. Ben yazdığımda 1000 ms :D.

Bu birazda farklı düşünmek. Herkeste böyle zeka olmaz. Doğuştan gelen özellik.
XOR ve AND ile maskeleme uygulamış sanırım. Bitwise complement dediği 1'leri 0'a 0'ları 1'e döndürmek. Ama bu yöntemi nasıl dizi sıralamaya eklemiş çözemedim şu an. Sayıları Binary'e çevirip oradan binary halindeki sayının en soldaki 1 sayısının sırasına göre sıralamış herhalde. Maskeleme ile önce 32 bitin en solundan başlayıp negatif sayıları ayırmış, onları complement ile pozitife döndürmüş, sonra maskeyi birer bire sağa kaydırarak büyükten küçüğe bakmış diye atıyorum şu an. Maske kodu ile sayının kodunu AND yaparsanız maskede belirtilen binary sayısını elde ederiz. XOR ile ne yapılır bilmiyorum. Zekice.
 
XOR ve AND ile maskeleme uygulamış sanırım. Bitwise complement dediği 1'leri 0'a 0'ları 1'e döndürmek. Ama bu yöntemi nasıl dizi sıralamaya eklemiş çözemedim şu an. Sayıları Binary'e çevirip oradan binary halindeki sayının en soldaki 1 sayısının sırasına göre sıralamış herhalde. Maskeleme ile önce 32 bitin en solundan başlayıp negatif sayıları ayırmış, onları complement ile pozitife döndürmüş, sonra maskeyi birer bire sağa kaydırarak büyükten küçüğe bakmış diye atıyorum şu an. Maske kodu ile sayının kodunu AND yaparsanız maskede belirtilen binary sayısını elde ederiz. XOR ile ne yapılır bilmiyorum.
Ben hala sorguluyorum. Bu adamın derdi algoritma çözmek değil yani :D. Neyse kendimizi geliştirmeye devam.

Ortalama ms alsakta yeter. Sonuçta ürün çıkartmak önemli. Ürünü çıkartabiliyorsan, optimizasyona sonra geçebiliriz :D.
 
Ben hala sorguluyorum. Bu adamın derdi algoritma çözmek değil yani :D. Neyse kendimizi geliştirmeye devam.

Ortalama ms alsakta yeter. Sonuçta ürün çıkartmak önemli. Ürünü çıkartabiliyorsan, optimizasyona sonra geçebiliriz :D.
Hocam Google'ın bir yarışması var öyle kısa sürede en iyi algoritmayı yazmak. Onlar çok fena. İzlerken yoruldum. Adamın kod yazma hızı kadar normal Türkçe cümle yazamıyorum. Bir de C++ yazıyor ya.
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.


Ek olarak, ne kadar hızlı kod olması lazımsa o kadar makine diline inmek gerekiyor sanırım. İşte adam bitlere kadar inmiş o dizi sıralamada.
 
Hocam Google'ın bir yarışması var öyle kısa sürede en iyi algoritmayı yazmak. Onlar çok fena. İzlerken yoruldum. Adamın kod yazma hızı kadar normal Türkçe cümle yazamıyorum. Bir de C++ yazıyor ya.
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.


Ek olarak, ne kadar hızlı kod olması lazımsa o kadar makine diline inmek gerekiyor sanırım. İşte adam bitlere kadar inmiş o dizi sıralamada.

Bu çocuğu, çocukken izlemiştim ben he he :D. Şimdi abimizdir.

Bir dil, assemblye'e ne kadar yakın ise sonuç o kadar kısadır diye bir şey vardır ama Java'da bu durum öylemidir bilmem. 0 ms. sonucunu evet Java dilinde aldı :D.
 
Bu çocuğu, çocukken izlemiştim ben he he :D. Şimdi abimizdir.

Bir dil, assemblye'e ne kadar yakın ise sonuç o kadar kısadır diye bir şey vardır ama Java'da bu durum öylemidir bilmem. 0 ms. sonucunu evet Java dilinde aldı :D.
Evet o da ayrı bir konu. C'de yazsa yazılır da Java'da 0 ms'e inmek hayli zor.
 
Evet o da ayrı bir konu. C'de yazsa yazılır da Java'da 0 ms'e inmek hayli zor.
Adam tek başına; Algoritma analizini, zaman karmaşıklığını (bigO falan) bitirdi, bellekte yer kaplama diye bir şey de yok 😄.

Intel, Apple daha hızlı işlemciler üretiyor daha hızlı sonuçlar için ama adam olayı bitirdi. İşlemci hızı, parelel programlama falan yalan, bizi kandırıyorlar bunlar. Adam bitirdi bunları he he 😁.
 
Adam tek başına; Algoritma analizini, zaman karmaşıklığını (bigO falan) bitirdi, bellekte yer kaplama diye bir şey de yok 😄.

Intel, Apple daha hızlı işlemciler üretiyor daha hızlı sonuçlar için ama adam olayı bitirdi. İşlemci hızı, parelel programlama falan yalan, bizi kandırıyorlar bunlar. Adam bitirdi bunları he he 😁.
Bu arada "Bitwise Sort" olarak geçiyor sanırım yöntemin adı.
 

Technopat Haberler

Geri
Yukarı