Bölüm 1: Giriş
Dijital Veri
Dijital Veri (Digital Data)
- Sayı, metin, görüntü ve ses gibi bilgilerin elektronik olarak temsil edilmesi için kullanılan bir formattır.
- Örnekler: Metin belgeleri, resim dosyaları, veritabanı, ses kayıtları.

Analog ses → ADC → 0 ve 1'ler → bilgisayar → DAC → analog ses
Dijital Veri
Dijital Verinin Özellikleri
Veriler 0 ve 1 (ikili) olarak temsil edilir.
1011 0010Elektronik ortamda saklanabilir ve kolayca paylaşılabilir.
disk · bulut · ağBilgisayarlar üzerinde hızlı bir şekilde işlenebilir.
~10⁹ işlem / saniyeDijital Veri
Dijital Verinin Temsil Biçimleri
ASCII, Unicode gibi karakter kodlamaları.
'A' → 65 → 01000001Tam sayılar, kayan nokta sayıları.
13 → 00001101 · 3,14 → IEEE 754Piksellerin renk değerleri.
kırmızı piksel → (R, G, B) = (255, 0, 0)Ses dalgalarının dijital örneklemi.
CD kalitesi → saniyede 44.100 örnekDijital Veri
Dijital Veri Türleri
| Tür | Açıklama | Örnek |
|---|---|---|
| Yapısal | Belirli bir şemaya göre düzenlenmiş veri | İlişkisel veritabanı tabloları, CSV |
| Yarı Yapısal | Etiketlerle kısmen düzenlenmiş veri | XML, JSON |
| Metin | İnsanlar tarafından okunabilen metinler | TXT, e-posta |
| Resim ve Grafik | Görsel veriler | JPG, PNG |
| Ses ve Müzik | Ses kayıtları | MP3, WAV |
Veri Yapılarına Giriş
Veri Yapıları ve Algoritmalar
- Belirli bir görevi gerçekleştirmek için adım adım hazırlanan bir plan veya talimatlar bütünüdür.
- Bilgisayar biliminde temel bir yapı taşıdır.
- Verilerin organize edilmesini sağlayan ve depolanma biçimlerini tanımlayan yapılardır.
- Verilerin etkili yönetimi ve işlenmesi için temel altyapıyı sağlar.
- Etkili algoritmalar ve veri yapıları, yazılımın verimli çalışmasını sağlar.
- Problemlere sistemli ve etkili çözümler sunar.
Niklaus Wirth'ün 1976 tarihli kitabının adı
Veri Yapılarına Giriş
Veri Yapıları
- Verileri bilgisayarda düzenlemenin ve saklamanın bir yoludur.
- Temel amacı, verilere hızlı ve etkili bir şekilde erişmeyi sağlamaktır.
- Veri yapılarını anlamak, yazılım geliştirme sürecinde çok önemlidir.
- Doğru veri yapısı seçimi, programın performans ve verimliliğini arttırır.

Aynı eşyalar: solda dağınık, sağda düzenli.
Aradığını hangisinde daha hızlı bulursun?
Veri Yapılarına Giriş
Temel Yapı Taşları
- Nesneler: Nitelikleri, isimlendirilmiş alanlara sahip tek bir birimde gruplar.
- Diziler: Varlıkları, bellekte ardışık yuvalarda toplu olarak saklar.
- Bağlantılar: Varlıklar arasında isteğe bağlı yönlü ilişkilere olanak tanır.

→
→ ?Veri Yapılarına Giriş
İlkel (Primitive) Veri Tipleri
| Java tipi | Boyut | Değerler |
|---|---|---|
byte | 8 bit | −128 … 127 |
short | 16 bit | −32.768 … 32.767 |
int | 32 bit | yaklaşık ±2,1 milyar |
long | 64 bit | yaklaşık ±9,2·1018 |
float | 32 bit | ondalıklı (≈7 basamak) |
double | 64 bit | ondalıklı (≈15 basamak) |
boolean | — | true / false |
char | 16 bit | Unicode karakter |
- Tam sayılar, ondalıklı sayılar, mantıksal değerler ve karakterler.
- Basit ve temel veri tipleridir.
- Bellekte sabit bir boyuta sahiptirler.
- İşlemci tarafından doğrudan işlenebilirler.
Veri Yapılarına Giriş
Veri Tipleri
- Veri Tipi: Bir değer kümesini ve davranışlarını tanımlar.
- Değer Kümesi: Bir veri türünün alabileceği geçerli değerler.
- Davranışlar: Değerler üzerinde gerçekleştirilebilecek işlemler.
- Her işlem her türde geçerli değildir.
- Tip Güvenliği: Veri türleri, hataları en aza indirmek için kullanılır. Kısıtlamalar, programcılara neyin mümkün olup olmadığını söyler.
Toplama, çıkarma, çarpma, bölme gibi işlemler.
7 / 2 → 3Karşılaştırma, birleştirme, alt dize alma gibi işlemler.
"veri" + "yapısı"Derleyici hatayı çalıştırmadan yakalar.
"abc" * 2 → derleme hatasıVeri Yapılarına Giriş
İlkel Olmayan (Non-Primitive) Veri Yapıları
Daha karmaşık veri yapılarıdır. Örneğin:
- Karmaşıktır ve birden fazla ilkel veri tipini içerebilir.
- Çoğu dinamik boyutludur (diziler hariç); saklanan veri miktarı değişebilir.
- Özelleştirilmiş işlemleri gerçekleştirmek için kullanılırlar.
Veri Yapılarına Giriş
Farklı Veri Yapıları
Her birinin kendine özgü güçlü ve zayıf yönleri bulunur.
Veri Yapılarına Giriş
Soyut Veri Tipleri ve Veri Yapıları
- Listeler, yığınlar, kuyruklar, kümeler, eşlemeler, çizgeler…
- Hangi işlemlerin yapılabileceğini (davranışı) belirler.
- İmplementasyon detaylarına odaklanmaz.
- Bağlı listeler, diziler, komşuluk matrisleri…
- Soyut veri tiplerini uygulayan somut yapılardır.
- Bellek ve performans detaylarına odaklanır.
Veri Yapılarına Giriş
Verilerin Düzenlenmesi
| Düzen | İlişki | Günlük hayattan örnek |
|---|---|---|
| Konumsal olmayan | ilişkisiz | sınıftaki öğrenciler |
| Sıralı | bire-bir | sıra bekleyen öğrenciler |
| Ağaç | bire-birçok | aile ağacı |
| Çizge | birçoğa-birçok | yol haritası |
Veri Yapılarına Giriş
Veri Yapısı Seçimi
Aşağıdaki sorular kritik rol oynar:
- Veri yapısı başlangıçta tamamen doldurulabilir mi?
- Veri yapısından öğeler silinebilir mi?
- Ekleme sırasının önemi var mı?
- Veri yapısındaki öğeler sıralanabilir mi?
- Öğeler belirli bir sıra ile mi işlenir, yoksa rastgele erişim de gerekli mi?
Algoritma Analizi
Algoritmalar
- Bir algoritma, bir problemi çözmek için adım adım bir prosedürdür.
- Aynı problemi çözmek için farklı algoritmalar bulunabilir; bazıları diğerlerine göre daha verimli çalışır.
- Doğru algoritma seçimi kritik öneme sahiptir: iyi bir algoritma, işi daha az kaynak kullanarak yapar.
Bazı yaygın algoritmalar:
Algoritma Analizi
İyi Bir Algoritma
Bir problemi etkili bir şekilde çözen algoritmadır. Dört ölçüte bakarız:
Algoritma Analizi
Zaman Karmaşıklığı ve Büyük O (Big O)
- Algoritmanın ne kadar sürede çalıştığını, girdi boyutu n'ye bağlı olarak ifade eder.
- Büyük O gösterimi, çalışma süresi için bir üst sınır belirtir; genellikle en kötü durum için kullanılır.
- O(1): girdi boyutundan bağımsız, hep aynı sürede çalışır.
- O(n): girdi büyüdükçe süre doğrusal olarak artar.
3n2 + 5n + 2 → O(n2) · 4n + 100 → O(n) · 7 → O(1)
Algoritma Analizi
Büyük O Gösterimi Örnekleri
| Gösterim | Adı | Örnek | Neden? |
|---|---|---|---|
| O(1) | Sabit | Dizinin ilk elemanına erişme | Dizinin boyutu ne olursa olsun erişim süresi sabit |
| O(log n) | Logaritmik | Sıralı dizide ikili arama | Her adımda arama alanı yarıya iner |
| O(n) | Doğrusal | Diziyi baştan sona tarama | Her eleman bir kez işlenir |
| O(n log n) | Doğrusal logaritmik | Birleştirme sıralaması (Merge Sort) | Böl ve fethet: log n seviye, her seviyede n iş |
| O(n2) | Kare | Tüm eleman çiftlerini karşılaştırma | İç içe iki döngü |
| O(2n) | Üstel | Tüm alt kümeleri bulma | n elemanlı kümenin 2n alt kümesi var |
Algoritma Analizi
n Büyüdükçe Ne Olur?
| Karmaşıklık | n = 10 | n = 100 | n = 1.000 |
|---|---|---|---|
| log2 n | 3,3 | 6,6 | 10 |
| n | 10 | 100 | 1.000 |
| n log2 n | 33 | 664 | 9.966 |
| n2 | 100 | 10.000 | 1.000.000 |
| 2n | 1.024 | ≈ 1,3·1030 | ≈ 1,1·10301 |
Algoritma Analizi
Koddan Karmaşıklığa
int ilk(int[] a) { return a[0]; }
int toplam(int[] a) { int s = 0; for (int x : a) // n kez s += x; return s; }
boolean tekrarVar(int[] a) { for (int i = 0; i < a.length; i++) for (int j = i + 1; j < a.length; j++) if (a[i] == a[j]) return true; return false; } // dış döngü n, iç döngü ≈ n/2 // → n(n−1)/2 karşılaştırma
Kural: sabitler ve küçük terimler atılır. n(n−1)/2 = n²/2 − n/2 → O(n²)
Algoritma Analizi
Alan Karmaşıklığı
- Algoritmanın kullandığı bellek miktarını ölçer; genellikle Büyük O gösterimiyle ifade edilir.
- Bellek kullanımının girdi boyutuna bağlı artışını gösterir.
- Sınırlı bellek kaynaklarına sahip sistemlerde bellek verimliliği önemlidir.
Algoritma Analizi
Doğruluk (Correctness)
- Doğruluk, bir algoritmanın başarısını belirleyen en temel faktördür.
- Doğru bir algoritma, her geçerli girdi için sonlu sürede beklenen çıktıyı üretir.
- Hızlı çalışan ama yanlış sonuç veren bir algoritmanın değeri yoktur.
Doğruluk nasıl gösterilir?
Algoritma Analizi
Sağlamlık (Robustness)
- Algoritmanın beklenmeyen durumlarla başa çıkma yeteneğidir.
- Sağlam bir algoritma, normal aralığın dışındaki girdileri bile çökmeden veya yanlış sonuç üretmeden işleyebilir.
Sağlamlık nasıl sınanır?
Temel Veri Yapıları
Diziler (Arrays)
- Verileri ardışık olarak bir bellek bloğunda saklar.
- Tüm öğeler aynı türdedir ve bellekte eşit boyutta yer kaplar.
- Her öğeye indeksiyle doğrudan erişilir:
adres = başlangıç + i × öğe boyutu - Verileri düzenli saklamak ve hızlı erişim sağlamak için kullanışlı bir veri yapısıdır.
int[] a = {7, 2, 9, 5, 1}; // 5 elemanlı dizi, indisler 0…4 int x = a[2]; // x = 9, tek adımda erişim a[4] = 8; // indis 4'teki değer güncellenir
Temel Veri Yapıları
Diziler: Avantajlar ve Dezavantajlar
Avantajları
- Doğrudan indeksleme ile verilere hızlı erişim sağlar (O(1)).
- Verileri düzenli bir şekilde saklar.
- Kolay bir kullanım sunar.
Dezavantajları
- Sabit boyuta sahiptir; veri boyutu dinamik olarak değiştirilemez.
- Araya ekleme ve silme maliyetlidir; sonraki öğelerin kaydırılması gerekir (O(n)).
Temel Veri Yapıları
Bağlı Listeler (Linked Lists)
- Verileri, birbirine referanslarla bağlanan düğümlerde (node) saklar.
- Her düğüm, veriyi ve bir sonraki düğümün referansını içerir; "baş" listenin başlangıcını gösterir.
- Düğümlerin bellekte ardışık olması gerekmez.
- Verilerin dinamik olarak büyüyüp küçüldüğü ve sık ekleme/silme yapılan durumlarda kullanışlıdır.
Temel Veri Yapıları
Bağlı Listeler: Avantajlar ve Dezavantajlar
Avantajları
- Veri boyutu dinamik olarak değişebilir.
- Düğümler listeye eklenebilir, listeden çıkarılabilir.
- Ekleme ve silme, öğeleri kaydırmadan yalnızca bağlantılar güncellenerek yapılır.
Dezavantajları
- Erişim, düğümler arasında baştan gezinme gerektirdiği için dizilere göre yavaştır (O(n)).
- Her düğüm bir de referans taşıdığından daha fazla bellek kullanır.
Temel Veri Yapıları
Yığınlar (Stacks)
- Verileri son giren, ilk çıkar (LIFO - Last-In, First-Out) mantığına göre saklar.
- Yeni öğe yığının en üstüne eklenir (
push). - Çıkarılırken en son eklenen öğe çıkarılır (
pop). - "Üst" (top), en son eklenen öğeyi gösterir.
- Tabak yığını gibi düşünülebilir: yalnızca en üstteki alınır.
Temel Veri Yapıları
Yığınların Kullanım Alanları
Temel Veri Yapıları
Kuyruklar (Queues)
- Verileri ilk giren, ilk çıkar (FIFO - First-In, First-Out) mantığına göre saklar.
- Öğeler "arka"dan eklenir (
enqueue), "ön"den çıkarılır (dequeue). - Market kasasındaki sıra gibi: ilk gelen ilk hizmet alır.
Temel Veri Yapıları
Kuyrukların Kullanım Alanları
Temel Veri Yapıları
Ağaçlar (Trees)
- Verileri hiyerarşik bir yapı içinde saklar.
- Her ağacın bir kök düğümü (root) vardır; diğer düğümler kökten dallanır.
- Her düğümün sıfır veya daha fazla çocuğu olabilir; çocuğu olmayan düğümlere yaprak (leaf) denir.
- Örnekte: kök 1; kökün çocukları 2 ve 3; 2'nin çocukları 4 ve 5.
Temel Veri Yapıları
Ağaçların Kullanım Alanları
Temel Veri Yapıları
Eşleme Veri Yapısı (Maps)
- Anahtar-değer çiftlerini saklar; her anahtar bir değerle eşleştirilir.
- Anahtarlar benzersizdir ve her biri yalnızca bir değeri temsil eder.
- Anahtar kullanarak değerlere hızlı erişim sağlar.
- Büyük veri koleksiyonlarını etkili bir şekilde işlemek için kullanışlıdır.
| Anahtar | Değer |
|---|---|
| "Ad" | "Ali" |
| "Soyadı" | "Veli" |
| "Yaş" | 30 |
| "Şehir" | "İstanbul" |
Map<String, Object> kisi = new HashMap<>(); kisi.put("Ad", "Ali"); kisi.get("Ad"); // → "Ali"
Temel Veri Yapıları
Eşleme Kullanım Alanları
Temel Veri Yapıları
Küme Veri Yapısı (Sets)
- Benzersiz, tekil öğeler içerir; her öğe yalnızca bir kez bulunabilir.
- Öğeler genellikle sırasız saklanır.
- Bir öğenin kümede olup olmadığı hızlıca kontrol edilebilir.
- Veri analizi, mantıksal işlemler ve veritabanı gibi alanlarda kullanılır.
Temel küme işlemleri (X = {1, 2, 3}, Y = {3, 4}):
Kümeye 3'ü tekrar eklemek kümeyi değiştirmez: {1, 2, 3} ∪ {3} = {1, 2, 3}.
Temel Veri Yapıları
Çizge Veri Yapısı (Graphs)
- Düğümleri (nodes) ve bu düğümleri birbirine bağlayan kenarları (edges) içerir.
- Nesneler arasındaki karmaşık ilişkileri modellemek ve analiz etmek için kullanılır.
- Örnekte A, B, C, D düğümlerdir; çizgiler kenarlardır. A ile B arasında kenar varsa bu iki düğüm bağlantılıdır.
Temel Veri Yapıları
Çizge Veri Yapısının Özellikleri
- Düğümler (Nodes): Çizgenin temel yapı taşıdır ve verileri temsil eder.
- Kenarlar (Edges): Düğümleri birbirine bağlar ve ilişkileri gösterir.
- Kenarlar yönlü (oklarla) veya yönsüz (düz çizgilerle) gösterilebilir; kenarlara ağırlık verilebilir.
- Bir düğümün kendisine bağlanmasına öz döngü denir; çizge türüne göre izin verilebilir veya verilmez.
Temel Veri Yapıları
Çizge Kullanım Alanları
Özet
Temel Veri Yapılarında İşlem Maliyetleri
| Veri yapısı | i. öğeye erişim | Arama | Ekleme | Silme |
|---|---|---|---|---|
| Dizi | O(1) | O(n) | O(n) | O(n) |
| Bağlı liste | O(n) | O(n) | O(1)† | O(1)† |
| Yığın | yalnızca üst | O(n) | O(1) push | O(1) pop |
| Kuyruk | yalnızca ön | O(n) | O(1) enqueue | O(1) dequeue |
| Eşleme / Küme (hash) | — | O(1)* | O(1)* | O(1)* |
† Konum (önceki düğüm) biliniyorsa. * Ortalama durum; en kötü durumda O(n). Ayrıntılar ilgili bölümlerde.
Özet
Örnek Problemler
- Metin editöründe "geri al" için hangi veri yapısı uygundur? Neden?
- Yazıcıya gelen belgeleri geliş sırasıyla basmak için hangi yapı uygundur?
- Öğrenci numarasıyla öğrenci bilgisine hızlı erişim için hangi yapı uygundur?
- İki nokta arasındaki en kısa yolu bulmak için şehir haritasını nasıl modellersiniz?
- Listedeki tekrar eden öğeleri ayıklamak için hangi yapıyı kullanırsınız?
- Tüm eleman çiftlerini karşılaştıran algoritmanın zaman karmaşıklığı nedir?
Cevapları göster
- Yığın (LIFO): son yapılan işlem ilk geri alınır.
- Kuyruk (FIFO).
- Eşleme / hash tablosu (anahtar: öğrenci no).
- Ağırlıklı çizge: düğümler kavşak, kenarlar yol, ağırlıklar mesafe.
- Küme (set).
- O(n2).
Son
← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt