Java Link List Implementation

Linked List (bağlı liste), verileri bellek üzerinde dinamik şekilde saklamamızı sağlayan temel veri yapılarından biridir. Dizilerde eleman sayısı sabitken, bağlı listeler ihtiyaç oldukça büyüyüp küçülebilir. Her eleman (Node), kendi verisini ve bir sonraki elemanın adresini tutar. Böylece ekleme, silme ve araya eleman yerleştirme gibi işlemler dizilere göre çok daha esnek yapılabilir. Aşağıdaki örnek, Java’da basit bir tek yönlü bağlı liste […]

Pointer Şeması

C++’ta pointer şeması, bir nesnenin bellekte nerede yaşadığını, hangi pointer’ın ona sahip olduğunu ve ne zaman serbest bırakılması gerektiğini anlamanın temel yoludur. Düşük seviyeli dillerde bellek yönetimi manuel olduğu için, yanlış yapılan her işlem memory leak (bellek sızıntısı), dangling pointer (boşta kalmış pointer) veya use-after-free gibi hatalara yol açabilir. Bellek sızıntısı, heap’te ayrılan bir bölgenin hiçbir pointer tarafından işaret edilmemesi […]

Selection Sort

Selection Sort, en basit sıralama algoritmalarından biridir ve özellikle algoritma mantığını öğrenirken sıkça kullanılır. Bu yöntemde amaç, dizinin her adımında geri kalan bölümdeki en küçük elemanı bulup, doğru yerine yerleştirmektir. Yani algoritma, her turda dizi üzerinde bir tarama yapar, minimum değeri belirler ve bulunduğu konumu, o turdaki sıralanacak ilk elemanla değiştirir. Mantığı oldukça basittir, fakat işlem adımı çok olduğu için […]

Heap-Allocated 2D Structures in C++

C++ öğrenirken en çok zorlanılan konulardan biri, işin mutfağı olan manuel bellek yönetimi ve pointer yapılarıdır. Bugün çoğu modern dil bizim için bellekle ilgilense de, C++ hâlâ düşük seviye kontrolün ne anlama geldiğini öğretmek için altın standarttır. Özellikle çift pointer (int**) kullanarak 2D dinamik dizi oluşturmak, bilgisayar biliminde veri yapılarının bellek üzerinde gerçekte nasıl tutulduğunu anlamamızı sağlar. Bu örnekte: Bu, […]

A Basic Pointer Example

C++’ta pointer kavramı, dilin düşük seviyeli kontrol anlayışının temel parçasıdır. Burada artık yalnızca değerlerle değil, bu değerlerin bellekte nerede durduğu ile ilgilenilir. Pointer bir değeri değil, o değerin adresini taşır. Bu ayrım küçük görünür ama fonksiyon çağrılarında kimin neye dokunabildiğini belirler. Bir değeri fonksiyona gönderdiğinde kopya gönderilmiş olur. Bir pointer gönderildiğinde ise erişim gönderilir. Yani fonksiyon, çağıranın değişkenine doğrudan ulaşabilecek […]