Veri Yapıları ve Programlama
1- Veri Yapılarına Giriş
Emre Can Yılmaz
Ondokuz Mayıs Üniversitesi
2026
Dersin Tanıtımı
- BPU102 - Veri Yapıları ve Programlama
- Dersin Amacı: Bu dersin sonunda öğrenciler,
- Temel veri yapılarını (diziler, bağlı listeler, yığınlar, kuyruklar, ağaçlar, hash tabloları, graflar) C programlama dilinde uygulayabilecek,
- Bu veri yapılarının avantaj ve dezavantajlarını karşılaştırabilecek,
- Hangi durumlarda hangi veri yapısının kullanılması gerektiğini belirleyebileceklerdir.
Dersin İşleyişi (Uzaktan Eğitim)
- Ders türü: [Canlı / Asenkron]
- Ders materyalleri: Ders notları + örnek kodlar + alıştırmalar: https://emrecan.dev
- Ders akışı (genel):
- Konu anlatımı (kavramsal çerçeve)
- C ile örnek uygulama (kademeli)
- Mini alıştırma / kısa değerlendirme (pekiştirme)
- İletişim kanalı: E-posta: [email protected]
- (Mümkünse) konu başlığı formatı:
BPU102 - HaftaX - Konu - Ad Soyad
Değerlendirme
- Uzaktan Eğitim: Vize (%20) + Final (%80)
- Sınav yaklaşımı (özet):
- Çoktan seçmeli / kod okuma / çıktı tahmini
Beklentiler
- Derse düzenli katılım ve aktif olarak dinleme.
- Verilen okumaları ve alıştırmaları zamanında yapma.
- Soru sormaktan ve tartışmalara katılmaktan çekinmeme.
- Kendi başınıza kod yazma pratiği yapma.
- Yardım istemekten ve işbirliği yapmaktan çekinmeme.
İletişim ve İdari Süreçler
Aşağıdaki başlıklar ders e-postası üzerinden bireysel olarak yürütülmez; ilgili durumlarda üniversitenin/kurumun resmî prosedürleri izlenir:
- Mazeret nedeniyle sınava katılamama / telafi sınavı talepleri
- Bütünlemeye katılamama nedeniyle alternatif değerlendirme talepleri
- Kişiye özel not yükseltme / ek hak talepleri
Not: Bu tür durumlarda yönlendirme yapılacak birim: Öğrenci İşleridir.
Yapay Zekâ Araçları ile Öğrenme (Bu Derste Nasıl Kullanacağız?)
- Yapay zekâ araçlarını öğrenmeyi hızlandıran bir yardımcı olarak kullanabilirsiniz.
- Etkili kullanım örnekleri:
- Bir kavramı farklı açıklamalarla isteme (ör. pointer, struct, dynamic memory)
- Kodun ne yaptığını adım adım açıklattırma (tracing)
- Hata mesajını yorumlatma ve olası nedenleri listeletme
- Küçük test örnekleri/kenar durumları üretme
- Aynı çözümün alternatiflerini görme (okunabilirlik, bellek kullanımı)
- Önerilen pratik:
- Araçtan aldığınız çıktıyı derleyip çalıştırın, küçük testlerle doğrulayın
- “Neyi anladım?”ı 2-3 maddeyle kendinize özetleyin
- Kod yazarken gerekçenizi netleştirin: “Neden bu yapı, neden bu çözüm?”
Dersin Kapsamı (İki Katmanlı Bakış)
- Bu ders iki ekseni birlikte yürütür:
- C Araç Seti (Altyapı): pointer, struct, dinamik bellek, fonksiyonlar…
- Veri Yapıları & Temel Algoritmalar: liste, yığın, kuyruk, ağaç; arama/sıralama…
- Amaç, veri yapılarını C’nin bellek modeli üzerinde doğru ve verimli biçimde kurabilmektir.
Konular
- İşaretçiler (Pointers)
- Fonksiyonlar (Functions)
- Diziler (Arrays)
- Yapılar (Structures) ve Birlikler (Unions)
- Dinamik Bellek Yönetimi (Dynamic Memory Management)
- Bağlı Listeler (Linked Lists)
- Yığınlar (Stacks)
- Kuyruklar (Queues)
- Ağaçlar (Trees)
- Sıralama Algoritmaları (Sorting Algorithms)
- Arama Algoritmaları (Searching Algorithms)
Veri Yapıları ve Algoritmalar
- Veri yapıları, bilgisayar biliminin en temel kavramlarından biridir.
- Bir program genellikle veri + algoritma bileşimiyle düşünülür.
- Algoritmalar, veriyi işleyerek bir probleme çözüm üretir.
- Tekil bir değişken (ör.
int, char) bellekte belirli sayıda bayt yer kaplar; veri yapıları ise birbiriyle ilişkili çok sayıda değeri belirli bir düzenle temsil eder ve yönetir.
Örnek (telefon rehberi): Kişilerin bilgilerini (ad, soyad, tel, adres) saklamak için hangi yaklaşım daha uygundur? - Liste mi? (ekleme/silme nasıl?) - Dizi mi? (erişim hızlı, ekleme/silme maliyeti?) - Hash tablosu mu? (anahtar ile hızlı erişim?) Bu tür seçimler veri yapıları ve algoritmalar bilgisini gerektirir.
Veri Yapısı Nedir?
- Bir problemin çözümü için, işlenecek verinin çözüme uygun şekilde organize edilmesi gerekir.
- Veri yapıları, verilerin etkin biçimde saklanması ve işlenmesi için kullanılan yapılardır.
- Verilerin düzenlenme biçimini belirleyen “yapıtaşları” olarak düşünebilirsiniz.
Örnek: Kitapları raflara rastgele koymak yerine tür/yazar gibi bir kuralla düzenlemek, aranan kitabı daha hızlı bulmayı sağlar. Veri yapıları da bilgisayarda benzer bir düzen kurar.
Veri Yapılarının Temel Amacı
- Verileri organize etmek ve yönetmek
- Verilere hızlı ve etkin erişim sağlamak
- Verileri bellekte verimli şekilde depolamak
ADT ve Temsil (Representation)
- Soyut Veri Tipi (ADT): “Ne yapılabilir?” sorusuna cevap verir.
- Örn. Stack:
push, pop, top, isEmpty
- Temsil (Representation): “Nasıl yapılır?” sorusuna cevap verir.
- Stack, dizi ile de bağlı liste ile de uygulanabilir.
- Bu ayrım, veri yapısı seçimini daha sistematik yapmanızı sağlar:
- Operasyonlar (ihtiyaç) → temsil (uygulama) → maliyet (zaman/bellek)
Mini Not: Maliyet Fikri (Big-O’ya Kısa Giriş)
- Veri yapısı seçiminde en kritik soru: “Hangi operasyon ne kadar maliyetli?”
- Büyük-O (Big-O) notasyonu, maliyetin girdi büyüdükçe nasıl büyüdüğünü özetler.
O(1) : yaklaşık sabit
O(n) : veri büyüdükçe doğrusal artış
O(log n) : yavaş artış (ör. n iki katına çıkınca 1 adım artar gibi düşünülebilir)
Bu derste Big-O’yu “detaylı matematik” olarak değil, “sezgisel bir karşılaştırma aracı” olarak kullanacağız.
Mini Örnek: 1 Milyon Eleman Üzerinde Arama (Sezgi)
- Doğrusal arama (linear search): ortalama ~
n/2 karşılaştırma
n = 1.000.000 için yaklaşık 500.000 karşılaştırma
- İkili arama (binary search): (sıralı dizide) yaklaşık
log2(n) karşılaştırma
- Not: Arama ağaçlarında bu “~20” seviyesi ancak dengeli yapılarda korunur. (Sezgisel amaçla bu karşılaştırmayı yapıyoruz.)
Veri Yapıları Olmadan…
- Veriler dağınık ve düzensiz olurdu.
- Verilere erişmek ve işlemek daha zor ve zaman alıcı olurdu.
- Bellek daha verimsiz kullanılabilirdi.
Yaygın Veri Yapıları
- Diziler (Arrays): Aynı türden verileri sıralı şekilde saklar.
- Bağlı Listeler (Linked Lists): Düğümlerden oluşan dinamik yapı.
- Yığınlar (Stacks): LIFO prensibi.
- Kuyruklar (Queues): FIFO prensibi.
- Ağaçlar (Trees): Hiyerarşik yapı.
- Hash Tabloları (Hash Tables): Anahtar-değer çiftleri; hızlı erişim (çoğunlukla).
- Graflar (Graphs): Düğüm-kenar yapısı; ilişkisel veriler.
Veri Yapıları Panoraması
Bağlı Liste ![]()
Yığın ![]()
Kuyruk ![]()
Ağaç ![]()
Veri Yapıları Neden Önemlidir?
- Veri Organizasyonu: Verileri düzen içinde tutar; erişimi ve işlemeyi kolaylaştırır.
- Performans: Doğru yapı, arama/ekleme/silme gibi işlemleri belirgin biçimde hızlandırabilir.
- Kod Okunabilirliği: İyi seçilmiş yapı, kodu daha anlaşılır ve sürdürülebilir kılar.
- Bellek Verimliliği: İhtiyaca uygun temsil, gereksiz bellek tüketimini azaltır (ör. sparse matrix gibi yaklaşımlar).
Bu Haftanın Hedefi ve Mini Çalışma
- Hedef: Veri yapısı seçiminin “ihtiyaç–operasyon–maliyet” ilişkisi olduğunu görmek.
- Mini çalışma (öneri):
- Telefon rehberi senaryosu için şu soruları düşünün:
- “En sık yaptığım işlem nedir? (arama mı, ekleme mi?)”
- “Veri büyüdüğünde hangi işlem beni yavaşlatır?”
- Bir sonraki derse kadar: C’de
struct ile “kişi kaydı” modelini kurmayı deneyin (ad-soyad-tel gibi alanlar).
Sonuç
- Veri yapıları, bilgisayar biliminin ve yazılım geliştirmenin temel taşlarındandır.
- Bu derste C dilini kullanarak temel veri yapılarını öğrenecek ve gerçek problemlere uygulayacaksınız.
- Doğru veri yapısını seçmek; performansı, okunabilirliği ve verimliliği doğrudan etkiler.
Sorular?
Şimdi sorularınız varsa cevaplamaktan mutluluk duyarım!