G1.3. Türler Arası Dönüşüm
27
G1.4. C++ Sınıf Yapısı
27
G2.1. Nesne Yönelimli Programlama Prensipleri
28
G2.2. Sınıfın Görüntülenecek Formatta İfade Edilmesi
30
G2.5. Sınıf Şablonları
33
G2.6.1. Kodlamada Karşılaşabilecek Hatalar
34
G3. ALGORİTMA KARMAŞIKLIĞI
36
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.1. İlkel Veri Tipleri
52
1.4.2. Sayısal (Numeric) Tipler
53
1.4.3. Floating Point (Kayan Noktalı)
54
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.7. Veri Yapısı Çalışmaları
69
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.6. Özyinelemenin Değerlendirilmesi
90
2.7. Algoritma Analizi
90
2.8. Algoritma Karmaşıklığı Hesaplama Örnekleri
95
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
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
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.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
Ek1.a: Dizi üzerinde kuyruk
193
Ek1.b. DiziKuyrukTest
194
Ek2.a. Dairesel kuyruk
195
Ek2.b. Dairesel kuyruk test
196
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
Ek1. Satandart Kütüphanede Bazı Bağlı Liste Fonksiyonları
232
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
Ek2. İki Yönlü Bağlı Liste Üzerinde Gezinti
257
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
9. İKİLİ AĞAÇ UYGULAMALARI
305
9.1.1. Heap Yapılanması
306
9.1.2. Heap İkili Ağacını Kullanarak Sıralama Yapma: HeapSort
309
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
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
11. ARAMA ALGORİTMALARI
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.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
12. GRAF VE GRAF UYGULAMALARI
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
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
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
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
16. MINGW DERLEYİCİSİNİN KURULUMU VE ÖRNEK ÇALIŞMALAR
501
16.1.1. MinGW Debug İşlemi
501
16.3. İlk C++ Programının Derlenmesi
509
16.4. Gelişmiş C++ Programlarının Derlenmesi
510