İÇİNDEKİLER
İçindekiler
Önsöz 5
Semboller 7
GİRİŞ
G1. C++ ÖN BİLGİ 25
G1.1. Derleyici 25
G1.2. C++ Kod Yapısı 26
G1.3. Türler Arası Dönüşüm 27
G1.4. C++ Sınıf Yapısı 27
G2. NESNE MANTIĞI 28
G2.1. Nesne Yönelimli Programlama Prensipleri 28
G2.2. Sınıfın Görüntülenecek Formatta İfade Edilmesi 30
G2.3. Ara Yüzler 31
G2.4. Şablonlar 32
G2.5. Sınıf Şablonları 33
G2.6. Hata Yakalama 33
G2.6.1. Kodlamada Karşılaşabilecek Hatalar 34
G3. ALGORİTMA KARMAŞIKLIĞI 36
Özet 37
Uygulamalar 37
Çözümler 38
BÖLÜM 1
1. VERİ YAPILARI 45
1.1. Giriş 45
1.2. Veri Yapısı (Data Structure) 46
1.3. Veri ve Bilgi Kavramı 46
1.3.1. On Altı Tabanlı Sayı Sistemi (Hexadecimal) 49
1.4. VERİ TİPLERİ 52
1.4.1. İlkel Veri Tipleri 52
1.4.2. Sayısal (Numeric) Tipler 53
1.4.3. Floating Point (Kayan Noktalı) 54
1.4.4. Decimal (Onlu) 55
1.4.5. Boolean (Mantıksal) 55
1.4.6. Karakter (Character) Tipi 55
1.4.7. Karakter Katarı (Character String) 55
1.4.8. Kullanıcı Tanımlı Sıralı Tipler 56
1.4.9. Türetilmiş Veri Tipleri 57
1.4.10. Pointer (Gösterge) Tipi 62
1.5. Tip Kontrolü 64
1.6. Tip Dönüşümleri 65
1.7. Veri Yapısı Çalışmaları 69
Özet 71
Uygulamalar 71
Çözümler 72
BÖLÜM 2
2. ÖZYİNELEME VE ALGORİTMA ANALİZİ 79
2.1. Faktöriyel Fonksiyonu ve Özyineleme 79
2.2. Doğal Sayıların Çarpımı ve Özyineleme Yaklaşımı 81
2.3. Fibonacci Serisi ve Özyineleme 82
2.4. İkili Arama Algoritması ve Özyineleme 84
2.5. Hanoi Kuleleri 86
2.6. Özyinelemenin Değerlendirilmesi 90
2.7. Algoritma Analizi 90
2.8. Algoritma Karmaşıklığı Hesaplama Örnekleri 95
Özet 99
Uygulamalar 100
Çözümler 101
BÖLÜM 3
3. DİZİ VERİ YAPISI 105
3.1. Tek Boyutlu Diziler 105
3.1.1. Tek Boyutlu Diziler ve Erişim Fonksiyonu 107
3.1.2. Tek Boyutlu Dizi Üzerine Uygulamalar 109
3.2. İki Boyutlu Diziler 114
3.2.1. Dizilerin Bellekle Eşleştirilmesi Yöntemleri 115
3.2.2. İki Boyutlu Dizinin Bellek Erişim Adresinin Bulunması 116
3.3. Üç Boyutlu Diziler 118
3.3.1. Üç Boyutlu Dizinin Bellekte Yerleşimi 119
3.4. Parametre Aktarım Yöntemleri 121
3.4.1. Değer ile Çağırma (Call by Value) 122
3.4.2. Sonuç ile Aktarım (Call by Result) ve Değer ve Sonuç ile Aktarım (Call by Value Result) 123
3.4.3.Referans ile Aktarım 123
3.4.4. Aktarım Yöntemlerinin Karşılaştırılması 124
3.5. Dizilerin Parametre Olarak Aktarılması 124
Özet 125
Uygulamalar 125
Çözümler 126
BÖLÜM 4
4. YIĞIT 131
4.1. Yığıt Üzerinde Temel İşlemler 133
4.2. Yığıt ile Problem Çözümü 134
4.3. Yığıt ve Temel İşlemlerinin Programlanması 137
4.3.1. Pop Fonksiyonu 139
4.3.2. Push Fonksiyonu 140
4.4. Matematiksel İfadelerin İnfix, Postfix ve Prefix Gösterimi 141
4.4.1. INFIX, POSTFIX ve PREFIX Gösterimleri ve Yığıt Veri Yapısı 141
4.4.2. Postfix İfadenin Değerlendirilmesi 145
4.4.3. Postfix İşlemlerinin C++ ile Gerçekleştirimi 147
4.5. Sayı Taban Dönüştürme İşleminin Yığıt ile Gerçekleştirimi 151
4.6. Yığıtın Kullanım Yerleri 153
Özet 159
Uygulamalar 159
Çözümler 160
BÖLÜM 5
5. KUYRUK VERİ YAPISI 169
5.1. Kuyruk Yapısına Eleman Ekleme 169
5.2. Kuyruk Yapısından Eleman Çıkarma 170
5.3. Ekleme ve Çıkarma İşleminin Yürütülmesi 170
5.4. Dairesel Kuyruk 175
5.4.1. Dairesel Kuyruk Temel İşlemleri 175
5.4.2. Dairesel Kuyruk Yapısının C/C++ İşletimi 181
5.4.3. Dairesel Kuyruğa Eleman Ekleme İşleminin İşletilmesi 182
5.5. Öncelikli Kuyruk 183
5.5.1. Öncelikli Kuyruk İşletimi 184
5.5.2. Öncelikli Kuyruk C++ ile İşletimi 185
5.6. Kuyruk Yapısı ve Sıralama Uygulaması: Radix Sort 186
Özet 189
Uygulamalar 190
Çözümler 190
Ekler 193
Ek1.a: Dizi üzerinde kuyruk 193
Ek1.b. DiziKuyrukTest 194
Ek2.a. Dairesel kuyruk 195
Ek2.b. Dairesel kuyruk test 196
Ek3. RadixSort 197
BÖLÜM 6
6. BAĞLI LİSTE 201
6.1. Tek Yönlü Bağlı Liste 201
6.2. Bağlı Listeye Eleman Ekleme 202
6.3. Bağlı Listeden Eleman Çıkarma 204
6.4. Bağlı Liste ile Yığıt Gerçekleştirimi 206
6.5. Bağlı Liste ile Kuyruk Gerçekleştirimi 207
6.6. Bağıl Listenin Bellek Yerleşimi 208
6.7. Bağlı Liste ile Öncelikli Kuyruk İşletimi 214
6.8. Bağıl Listenin Dizi Üzerinde Gerçekleştirilmesi 215
6.9. C ve C++ Dillerinde Bağlı Liste Uygulamaları 219
6.9.1. Dinamik Değişkenlerle Bağlı Liste Uygulamaları 223
6.9.2. Liste Gezici Sınıfı (Iterator) 225
Özet 228
Uygulamalar 229
Çözümler 230
Ekler 232
Ek1. Satandart Kütüphanede Bazı Bağlı Liste Fonksiyonları 232
Ek2. Düğüm Sınıfı 233
Ek3. Liste Gezici 233
Ek4. Liste 234
BÖLÜM 7
7. BAĞLI LİSTELER 2 239
7.1. Dairesel Tek Yönlü Bağlı Liste 239
7.1.1. Dairesel Tek Yönlü Bağlı Liste ile Yığıt 240
7.1.2. Dairesel Tek Yönlü Bağlı Liste ile Kuyruk 241
7.1.3. Tek Yönlü Dairesel Bağlı Listede Temel İşlemler 242
7.1.4. Bir Dairesel Liste Uygulaması 242
7.2. İki Yönlü Bağlı Liste 244
7.2.1. İki Yönlü Bağlı Listelerde Temel İşlemler 246
7.2.2. İki Yönlü Bağlı Listelerde Herhangi Bir Yerden Eleman Silme 246
7.2.3. İki Yönlü Bağlı Listelerde Herhangi Bir Yere Eleman Ekleme 247
7.2.4. İki Yönlü Bağlı Listelerde Uygulamalar 248
7.3. İki Yönlü Dairesel Bağlı Liste 251
7.3.1. İki Yönlü Dairesel Bağlı Listeye Eleman Ekleme 251
7.3.2. İki Yönlü Dairesel Bağlı Listeden Eleman Silme 252
7.3.3. İki Yönlü Dairesel Bağlı Listede Dolaşımlar 252
Özet 253
Uygulamalar 253
Çözümler 254
Ekler 256
Ek1. Liste Gezici 256
Ek2. İki Yönlü Bağlı Liste Üzerinde Gezinti 257
Ek3. Test 259
BÖLÜM 8
8. AĞAÇLAR 263
8.1. Ağaç Veri Yapısı Temel kavramları 264
8.2. İkili Ağaçlar (Binary Trees) 265
8.2.1. İfade Ağaçları 266
8.3. İkili Ağaçlarda Dolaşım 268
8.3.1. Preorder Traversal 268
8.3.2. Postorder Traversal 271
8.3.3. Inorder Traversal 273
8.3.4. İkili Ağaçlarda Dolaşımın Rekürsif İşletimi 277
8.4. İkili Arama Ağaçları 277
8.4.1. İkili Arama Ağacı Kurma Algoritması 279
8.4.2. İkili Arama Ağacı Arama Algoritması 281
8.5. Ağaç Veri Yapısı Temel İşlemleri ve C++ Dili İşletimi 282
8.6. Ağaç Veri Yapısının Dizi Gösterimi 289
8.6.1. Ağaç Veri Yapısının Dizi Yardımıyla C++ Dilinde Gerçekleştirimi 290
Özet 296
Uygulamalar 297
Çözümler 299
BÖLÜM 9
9. İKİLİ AĞAÇ UYGULAMALARI 305
9.1. Heap Sort 305
9.1.1. Heap Yapılanması 306
9.1.2. Heap İkili Ağacını Kullanarak Sıralama Yapma: HeapSort 309
9.2. Veri Sıkıştırma 313
9.3. Optimal İkili Ağaçlar 315
9.3.1. Huffman Optimal İkili Ağaç Algoritması 317
9.3.2. Sıralı Listelerin Kaynaştırılması 321
9.3.3. Huffman Ağacının C++ ile Gerçekleştirimi 323
9.3.4. ShannonFano Kodlaması 328
9.3.5. LempelZiv Algoritması 330
9.3.6. Kod Çözümü 333
Özet 334
Uygulamalar 335
Çözümler 336
BÖLÜM 10
10. SIRALAMA ALGORİTMALARI 343
10.1. Kabarcık Sıralama (Bubble Sort) Algoritması 343
10.1.1. Algoritmanın Analizi 346
10.2. Seçme Sıralama (Selection Sort) Algoritması 346
10.2.1. Algoritmanın Analizi 349
10.3. Araya Ekleme Sıralama (Insertion Sort) Algoritması 350
10.3.1 Algoritmanın Analizi 351
10.4. Kabuk Sıralama (Shell Sort) 353
10.5. Hızlı Sıralama Algoritması (Quick Sort) 354
10.5.1. Hızlı Sıralama Algoritmasının Analizi 357
10.6. Birleştirmeli Sıralama (Merge–Sort) 357
10.6.1. Birleştirmeli (Merge–sort) Sıralama Algoritmasının Analizi 361
10.7. Alfabetik Bilgilerin Sıralanması 361
10.7.1. Birden Fazla Alana Sahip Bilgilerin Sıralanması 362
10.8. Ağaç Sıralama Algoritması (Tree Sorting) 364
10.9. Karar Ağacı Sıralama (Decision Tree) 366
Özet 367
Uygulamalar 368
Çözümler 368
BÖLÜM 11
11. ARAMA ALGORİTMALARI 373
11.1 Sıralı Arama 373
11.2. İkili Arama algoritması 374
11.3. Ara Değerle Arama (Interpolation Search) 375
11.4. Ağaç Arama (Tree Sorting) 378
11.5. İkili Arama Ağacına Eleman Ekleme 380
11.6. İkili Arama Ağacından Eleman Silme 383
11.7. AVL Ağaçları 388
11.7.1. Dengeleme Algoritmasının Genel Tanımı 389
11.7.2. AVL Ağacının C++ Dili İle Gerçekleştirimi 392
11.8. Çok Boyutlu Arama Ağaçları 394
11.8.1. Splay Ağaçları 394
11.8.2. Kd – Ağaçları 397
11.8.3. Kırmızı–Siyah Ağaçları (Red–Black Trees) 401
Özet 406
Uygulamalar 407
Çözümler 408
BÖLÜM 12
12. GRAF VE GRAF UYGULAMALARI 413
12.1. Graflar 413
12.2. Grafların Gösterimi 415
12.2.1. Komşuluk (Adjacency) Matrisi 415
12.2.2. Komşuluk (Adjacency) Listesi 419
12.3. Yollar ve Halkalar (Paths And Circuits) 422
12.3.1. Euler Halkası ve Yolu 422
12.3.2.Euler Halkasının C++ ile Gerçekleştirimi 423
12.4. Grafta En Kısa Yol 424
12.4.1. Dijkstra Algoritması 424
12.5. Grafın Farklı Bir Uygulaması: Öncelik Grafları 427
Özet 429
Uygulamalar 430
Çözümler 431
BÖLÜM 13
13. KAPSAMA AĞAÇLARI 435
13.1. Geniş Öncelikli Arama Algoritması (BFS) 435
13.1.1. BFS’nin C++ ile Gerçekleştirimi 438
13.2. Derin Öncelikli Arama Algoritması 441
13.2.1. DFS’nin C++ ile Gerçekleştirimi 445
13.3. BFS ve DFS’nin Zaman Karmaşıklığı Karşılaştırması 447
13.4. Minimum Kapsama Ağaçları 447
13.4.1. Prim Algoritması 448
13.4.1.1. Prim Algoritmasının C++ ile Gerçekleştirimi 450
13.4.2. Kruskal Algoritması 451
13.4.2.1. Kruskal Algoritmasının C++ ile Gerçekleştirimi 454
Özet 455
Uygulamalar 456
Çözümler 457
BÖLÜM 14
14. HASHING (ÇIRPILAMA) 465
14.1. Açık Çırpılama (Ayrık Zincirleme) 467
14.2. Kapalı Çırpılama (Açık Adresleme) 469
14.2.1. Doğrusal Sınama Yöntemi 469
14.3. İkili Çırpılama (Double Hashing) 471
14.4. Açık Çırpılamanın C++ ile Gerçekleştirimi 472
14.4. İkili Çırpılamanın C++ ile Gerçekleştirimi 476
Özet 478
Uygulamalar 479
Çözümler 480
BÖLÜM 15
15. BELLEK YÖNETİMİ VE B–AĞAÇLARI 483
15.1. Bellek Yönetimi 483
15.1.1. Statik Bellek Bölgesi 483
15.1.2. Çalışma Anı Yığını (Run Time Stack) 483
15.1.3. Heap Bellek Bölgesi 486
15.1.4. Bellekte, Statik ve Dinamik Alan 488
15.2. B–Ağaçları (B–Trees) 488
15.2.1. B–ağaçlarından Eleman Silinmesi 490
15.2.2. B–ağaçlarının Karmaşıklık Analizi 491
Özet 491
Uygulamalar 492
Çözümler 493
Ekler 495
BÖLÜM 16
16. MINGW DERLEYİCİSİNİN KURULUMU VE ÖRNEK ÇALIŞMALAR 501
16.1. MinGW 501
16.1.1. MinGW Debug İşlemi 501
16.2. MinGW Kurulumu 504
16.3. İlk C++ Programının Derlenmesi 509
16.4. Gelişmiş C++ Programlarının Derlenmesi 510
16.5. Make Dosyası 516
Özet 518
Kaynaklar 519
Kavramlar Dizini 521 |