Veri Yapıları ve Programlama
1- Veri Yapılarına Giriş
Emre Can Yılmaz
Ondokuz Mayıs Üniversitesi
2025
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.
- Değerlendirme:
- Örgün: Vize (%40) + Final (%60)
- Uzaktan Eğitim: Vize (%20) + Final (%80)
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
Dönem süresince aşağıdaki gibi sorulara cevap verilmeyecektir:
- Vize/Final/Bütünleme sınavına giremeyeceğim, telafi sınavı yapar mısınız?
- Uzakta oturuyorum, bütünlemeye giremeyeceğim, ödev/proje verebilir misiniz?
- Hastalık/mazeret nedeniyle sınava giremedim, ek sınav hakkı tanır mısınız?
- Otobüsü kaçırdım, sınava geç kaldım, tekrar sınava girebilir miyim?
- Bu dersi geçersem tek ders sınavına gireceğim, notumu yükseltir misiniz?
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 Veri Yapıları ve Algoritmalar’dan oluşur.
- Algoritmalar, veri ve değişkenleri kullanarak bir problemin çözümüne ulaşmayı amaçlar.
- Bir değişken bir integer veya char türünde olup bellekte bir hafızalık yer tutarken, Veri Yapısı algoritmanın kullanacağı bilgileri bir grup hafızada tutar.
Örnek: Bir telefon rehberi uygulamasında, kişilerin bilgilerini (ad, soyad, tel, adres) saklamak için hangi veri yapısını kullanmalıyız? Dizi mi, bağlı liste mi, yoksa hash tablosu mu? Peki bu rehberde arama işlemini en hızlı nasıl yaparız? İşte bu soruların cevabı, veri yapıları ve algoritmalar bilgisi gerektirir.
Veri Yapısı Nedir?
- Bir problemin çözümü için öncelikle işlenecek verinin çözüme uygun şekilde organize edilmesi gerekir.
- Veri yapıları, bilgisayar ortamında verilerin etkin bir şekilde saklanması ve işlenmesi için kullanılan yapılardır.
- Verilerin düzenlenme biçimini belirleyen yapıtaşları olarak da düşünebilirsiniz.
Örnek: Bir kitaplıktaki kitapları raflara rastgele yerleştirmek yerine, türlerine (roman, tarih, bilim vb.) veya yazarlarına göre düzenlemek, aradığımız bir kitabı bulmamızı kolaylaştırır. Veri yapıları da bilgisayardaki verileri benzer şekilde düzenlememizi sağlar.
Veri Yapılarının Temel Amacı
- Verileri organize etmek ve yönetmek.
- Verilere hızlı ve etkin bir şekilde erişim sağlamak.
- Verileri bellekte verimli bir şekilde depolamak.
Veri Yapıları Olmadan…
- Veriler dağınık ve düzensiz olurdu.
- Verilere erişmek ve işlemek çok zor ve zaman alıcı olurdu.
- Bellek verimsiz bir şekilde kullanılırdı.
Veri yapıları, programlama dillerinden bağımsızdır. Yani, her programlama dilinde farklı veri yapıları olsa da, temel kavramlar aynıdır.
Yaygın Veri Yapıları
- Diziler (Arrays): Aynı türden verileri sıralı bir şekilde saklar.
- Bağlı Listeler (Linked Lists): Birbirine bağlı düğümlerden (nodes) oluşan dinamik bir veri yapısıdır.
- Yığınlar (Stacks): LIFO (Last-In, First-Out) prensibine göre çalışan bir veri yapısıdır.
- Kuyruklar (Queues): FIFO (First-In, First-Out) prensibine göre çalışan bir veri yapısıdır.
- Ağaçlar (Trees): Hiyerarşik bir yapıda verileri saklayan bir veri yapısıdır.
- Hash Tabloları (Hash Tables): Anahtar-değer (key-value) çiftlerini saklayan ve hızlı arama imkanı sunan bir veri yapısı.
- Graflar (Graphs): Düğümler (nodes) ve kenarlardan (edges) oluşan, ilişkisel verileri (örneğin, sosyal ağlar) modellemek için kullanılan bir veri yapısı.
Bağlı Listeler (Linked Lists)
Yığınlar (Stacks)
Kuyruklar (Queues)
Ağaçlar (Trees)
Veri Yapıları Neden Önemlidir?
Veri yapıları, yazılım geliştirme sürecinde önemli bir rol oynar ve birçok avantaj sağlar. İşte veri yapılarının önemini anlatan bazı nedenler:
- Veri Organizasyonu: Veri yapıları, verileri belirli bir düzen içinde organize eder. Bu, verilerin daha kolay erişilebilir ve işlenebilir olmasını sağlar.
- Performans: Doğru veri yapısı seçimi, yazılımın performansını artırabilir. Örneğin, 1 milyon elemanlı bir dizide belirli bir elemanı aramak, doğrusal arama (linear search) ile ortalama 500.000 adım sürerken, ikili arama ağacı (binary search tree) ile ortalama 20 adımda bulunabilir.
- Kod Okunabilirliği: İyi bir veri yapısı, kodun daha okunabilir ve anlaşılır olmasını sağlar. Örneğin, bir alışveriş sepetini temsil etmek için, dizi yerine bağlı liste kullanmak, sepete ürün ekleme ve çıkarma işlemlerini daha anlaşılır hale getirebilir.
- Maliyet: Doğru veri yapıları kullanarak bellekte daha az alan kullanılarak veriler saklanabilir. Örneğin, çok sayıda ama seyrek (çoğu sıfır olan) eleman içeren bir matrisi saklamak için, tüm elemanları bir dizide tutmak yerine, sadece sıfır olmayan elemanları ve konumlarını saklayan bir veri yapısı (sparse matrix) kullanmak bellekten tasarruf sağlar.
Sonuç
- Veri yapıları, bilgisayar biliminin ve yazılım geliştirmenin temel taşlarından biridir.
- Bu derste, C programlama dilini kullanarak temel veri yapılarını öğrenecek ve gerçek dünya problemlerini çözmek için bu yapıları nasıl kullanacağınızı keşfedeceksiniz.
- Unutmayın, doğru veri yapısını seçmek, programınızın performansını, okunabilirliğini ve verimliliğini doğrudan etkiler!
Sorular?
Şimdi sorularınız varsa cevaplamaktan mutluluk duyarım!