C/C++ ile Veri Yapıları ve Çözümlü Uygulamalar Prof. Dr. Nejat Yumuşak, Dr. Muhammed Fatih Adak  - Kitap

C/C++ ile Veri Yapıları ve Çözümlü Uygulamalar

3. Baskı, 
Eylül 2020
Kitabın Detayları
Dili:
Türkçe
Ebat:
16x24
Sayfa:
527
Barkod:
9789750261176
Kapak Türü:
Karton Kapaklı
Fiyatı:
565,00
24 saat içerisinde temin edilir.
Kitabın Açıklaması
Eser, kod anlatımlarıyla zenginleştirilmiş 3. baskısını yapmıştır.
C ve C++ dilleri, Veri Yapıları için vazgeçilmezlerden olan aktif bellek kullanımı, göstericiler (pointers) ve doğrudan bellek yönetimine destek sağlarlar. Bu nedenle C ve C++ dilleri, veri yapılarını öğrenmek isteyenler için oldukça ideal dillerdir. Bellek yönetimi tam olarak anlaşılmadan Veri Yapılarının anlaşılması mümkün değildir. C/C++ sayesinde bellek yönetiminin temellerine inilerek konunun anlatılması sağlanmıştır.
Kitap içeriği, Veri Yapıları dersinin okutulduğu bütün bölümlerde ders kitabı olarak kullanılmaya uygun olarak düzenlenmiştir. Özellikle Bilgisayar ve Yazılım Mühendislikleri ile Bilgisayar Programcılığı bölümleri için kaynak kitap olarak kullanılabilir. Kendi kendine Veri Yapıları'nı öğrenmek isteyenler, kitap içerisindeki 300'den fazla örnek ve uygulamaları bilgisayarlarında kendi kendilerine deneyerek sonuçlarını kitaptaki sonuçlarla karşılaştırabilirler. Konular ilerledikçe, kitabın ne kadar etkin bir öğrenim yöntemi olduğunu kendileri göreceklerdir.
Bu kitap içeriğinde verilen tüm örnek ve uygulamalar, standart C/C++ kurallarına uygun olup GNU C/C++ derleyicilerinde derlenebilir durumdadır. Bu kitaptaki kodlar, bir GNU derleyicisi olan MinGW derleyicisi kullanılarak derlenmiş ve çıktıları alınmıştır.
Kitapta yer alan kodları seckin.com.tr'den indirebilirsiniz.
"Kötü programcılar yazdıkları kod hakkında endişelenirken, iyi programcılar veri yapıları ve ilişkileri hakkında endişelenirler." - Linus Torvalds -
Kitabın Konu Başlıkları
.
Özyineleme ve Algoritma Analizi
.
Diziler
.
Yığıt Veri Yapısı (Stack)
.
Kuyruk Veri Yapısı (Queue)
.
Listeler
.
Ağaçlar
.
Sıralama Algoritmaları
.
Arama Algoritmaları
.
Graf ve Graf Uygulamaları
.
Kapsama Ağaçları
.
Çırpılama (Hashing)
.
Bellek Yönetimi (Göstericiler) ve B–Ağaçları
Yorumlar
Kitabın İçindekileri
Ö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