# Veri Yapılarına Giriş

> Veri yapısı seçimi erişim gecikmesini, bellek yerleşimini, algoritmik maliyeti ve eşzamanlılık davranışını doğrudan etkiler.

- Author: Muhammet Ali Köker
- Language: tr
- Canonical: https://alikoker.com.tr/veri-yapilarina-giris
- Translation: https://alikoker.com.tr/en/introduction-to-data-structures
- Published: 2013-08-08T13:00:00+03:00
- Modified: 2026-08-27T18:10:00+03:00
- Verified: 2026-08-07T11:00:00+03:00
- Type: article

Veri yapısı seçimi yalnız verinin nasıl saklanacağını değil; erişim gecikmesini, bellek yerleşimini, eşzamanlılık davranışını ve algoritmanın karmaşıklığını belirler. Aynı işlev farklı yapılarla gerçekleştirilebilir, ancak üretim maliyeti veri hacmi ve erişim örüntüsü büyüdükçe belirgin biçimde değişir.

## Soyut Veri Tipi ve Gerçekleme

Soyut veri tipi dışarıya sunulan işlemleri ve değişmezleri tanımlar. Liste, kuyruk, yığın, küme ve harita bu düzeyde ele alınabilir. Gerçekleme ise bu sözleşmenin dizi, bağlı düğüm, ağaç veya hash tablosu üzerinde nasıl sağlandığını belirler.

Örneğin bir kuyruk için temel sözleşme ekleme, çıkarma ve baştaki öğeyi görmedir. Bu kuyruk bağlı listeyle de dairesel diziyle de gerçekleştirilebilir. API aynı kalsa bile bellek tahsisi, önbellek locality ve kapasite büyütme maliyeti değişir.

## Dizi ve Bağlı Yapılar

Dizi ardışık bellek yerleşimi sayesinde sabit indeks erişimi ve güçlü önbellek davranışı sunar:

```text
index access: O(1)
search in unsorted array: O(n)
```

Ortaya eleman ekleme veya silme, sonraki öğelerin taşınmasını gerektirebilir. Dinamik diziler kapasite dolduğunda daha büyük alan ayırıp mevcut öğeleri kopyalar; tek işlem pahalı olsa da amortize ekleme maliyeti çoğunlukla `O(1)` kabul edilir.

Bağlı listede düğümler bellekte dağınık olabilir. Konumu bilinen düğüm çevresinde ekleme ve silme ucuzdur; fakat belirli indise erişmek `O(n)` dolaşım gerektirir. Her düğüm bağlantı alanları ve ayrı nesne tahsisi taşıdığı için teorik işlem maliyeti düşük görünse bile gerçek sistemde önbellek kaçırması ve [GC](/wiki/garbage-collection) baskısı oluşabilir.

## Yığın ve Kuyruk

Yığın son giren ilk çıkar, kuyruk ilk giren ilk çıkar düzenini uygular. Çağrı yığını, geri alma, ayrıştırma ve derinlik öncelikli arama yığın kullanımına; iş kuyruğu, genişlik öncelikli arama ve üretici-tüketici akışları kuyruk kullanımına örnektir.

Kritik sistemlerde kuyruk sınırsız büyümemelidir. Sınırlı kuyruk kapasite baskısını görünür kılar ve geri basınç veya reddetme politikasına imkan verir.

## Hash Tabloları

Hash tablosu anahtarı bir bucket konumuna dönüştürür. İyi dağılım ve uygun yük faktöründe arama, ekleme ve silme beklenen `O(1)` maliyete sahiptir. En kötü durumda çakışmalar nedeniyle maliyet `O(n)` olabilir.

Hash işlevinin deterministik olması, `equals` ile uyumlu çalışması ve değişebilir anahtarların tabloya eklendikten sonra değiştirilmemesi gerekir. Yüksek güvenlikli dış girdilerde saldırganın kontrollü çakışmalar üretme olasılığı da değerlendirilmelidir.

## Ağaçlar

İkili arama ağacında sol alt ağaç küçük, sağ alt ağaç büyük anahtarları taşır. Dengesiz ağaç doğrusal zincire dönüşebilir. AVL veya kırmızı-siyah ağaç gibi dengeli yapılar arama, ekleme ve silmeyi `O(log n)` sınırında tutar.

B-ağaçları ve türevleri, yüksek dallanma oranı sayesinde disk ve sayfa tabanlı depolamada etkilidir. Veri tabanı indekslerinde amaç yalnız karşılaştırma sayısını değil, sayfa erişimini ve yazma maliyetini azaltmaktır.

## Öbek ve Öncelik Kuyruğu

Binary öbek en küçük veya en büyük öğeye `O(1)` erişim, ekleme ve çıkarma için `O(log n)` maliyet sağlar. Scheduler, top-k, Dijkstra ve olay simülasyonu gibi işlemlerde kullanılır. Öbek bütün elemanları tam sıralı tutmaz; yalnız ebeveyn-çocuk değişmezini korur.

## Graflar

Graf düğüm ve kenarlardan oluşur. Seyrek graf için komşuluk listesi, yoğun graf için komşuluk matrisi uygun olabilir. Matris `O(V²)` bellek kullanırken kenar varlığını sabit zamanda verir. Liste yaklaşık `O(V + E)` bellek kullanır ve komşu dolaşımını etkinleştirir.

## Karmaşıklık Tek Başına Yeterli Değildir

Big O büyüme mertebesini gösterir; sabit katsayıları, bellek gecikmesini, tahsis maliyetini ve eşzamanlılık çekişmesini açıklamaz. Aynı `O(n)` algoritmalar veri yerleşimi nedeniyle farklı performans gösterebilir.

Seçim yapılırken şu sorular yanıtlanmalıdır:

- Baskın işlem okuma mı, ekleme mi, silme mi?
- Sıralı dolaşım gerekli mi?
- Anahtar dağılımı nasıl?
- Üst bellek sınırı nedir?
- Eşzamanlı erişim var mı?
- Deterministik sıra gerekiyor mu?
- Veri diskte mi, bellekte mi?

Veri yapısı, algoritmanın pasif kabı değildir. Doğru yapı, iş yükünün erişim örüntüsü ve sistem kısıtlarıyla birlikte seçildiğinde performans ve doğruluk sözleşmesinin bir parçası olur.

## Kaynakça

- **[1]** Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein. (2009). Introduction to Algorithms, Third Edition. MIT Press.
- **[2]** Donald E. Knuth. (1998). The Art of Computer Programming, Volume 3: Sorting and Searching, Second Edition. Addison-Wesley.

## Bu Çalışmaya Atıf

Köker, M. A. (2013). Veri Yapılarına Giriş. alikoker.com.tr. https://alikoker.com.tr/veri-yapilarina-giris

- BibTeX: https://alikoker.com.tr/veri-yapilarina-giris.bib
- RIS: https://alikoker.com.tr/veri-yapilarina-giris.ris
- CSL-JSON: https://alikoker.com.tr/veri-yapilarina-giris.csl.json
