2013 2014 Veri Yapıları Laboratuvarı Ders Sorumlusu: Yrd. Doç. Dr. Hakan KUTUCU Lab. Sorumlusu: Arş. Gör. Caner ÖZCAN
İÇİNDEKİLER Uygulama 1: Diziler ve İşaretçiler, Dinamik Bellek Ayırma... 4 1.1. Amaç ve Kapsam... 4 1.2. Uygulamadan Önce Yapılması Gerekenler... 4 1.3. Uygulama Soruları... 4 1.4. Değerlendirme... 5 Uygulama 2: Yapılar... 6 2.1. Amaç ve Kapsam... 6 2.2. Uygulamadan Önce Yapılması Gerekenler... 6 2.3. Uygulama Soruları... 6 2.4. Değerlendirme... 6 Uygulama 3: Linkli Liste Yapıları ve İşlemleri... 7 3.1. Amaç ve Kapsam... 7 3.2. Uygulamadan Önce Yapılması Gerekenler... 7 3.3. Uygulama Soruları... 7 3.4. Değerlendirme... 8 Uygulama 4: Linkli Liste Yapıları ve İşlemleri... 9 4.1. Amaç ve Kapsam... 9 4.2. Uygulamadan Önce Yapılması Gerekenler... 9 4.3. Uygulama Soruları... 9 4.4. Değerlendirme... 10 Uygulama 5: Yığın Yapısı... 11 5.1. Amaç ve Kapsam... 11 5.2. Uygulamadan Önce Yapılması Gerekenler... 11 5.3. Uygulama Soruları... 11 5.4. Değerlendirme... 12 Uygulama 6: Yığın Yapısı... 13 6.1. Amaç ve Kapsam... 13 6.2. Uygulamadan Önce Yapılması Gerekenler... 13 6.3. Uygulama Soruları... 13 6.4. Değerlendirme... 14 Uygulama 7: Kuyruk Yapısı... 15 7.1. Amaç ve Kapsam... 15 7.2. Uygulamadan Önce Yapılması Gerekenler... 15 2
7.3. Uygulama Soruları... 15 7.4. Değerlendirme... 16 Uygulama 8: Ağaç Veri Yapısı ve İkili Arama Ağaçları... 17 8.1. Amaç ve Kapsam... 17 8.2. Uygulamadan Önce Yapılması Gerekenler... 17 8.3. Uygulama Soruları... 17 8.4. Değerlendirme... 18 Uygulama 9: AVL Ağaçlar... 19 9.1. Amaç ve Kapsam... 19 9.2. Uygulamadan Önce Yapılması Gerekenler... 19 9.3. Uygulama Soruları... 19 9.4. Değerlendirme... 20 Uygulama 10: Öncelikli Kuyruklar: İkili Yığınlar... 21 10.1. Amaç ve Kapsam... 21 10.2. Uygulamadan Önce Yapılması Gerekenler... 21 10.3. Uygulama Soruları... 21 10.4. Değerlendirme... 22 Uygulama 11: Hash Yapıları... 23 11.1. Amaç ve Kapsam... 23 11.2. Uygulamadan Önce Yapılması Gerekenler... 23 11.3. Uygulama Soruları... 23 11.4. Değerlendirme... 24 Uygulama 12: Graf Veri Yapısı... 25 12.1. Amaç ve Kapsam... 25 12.2. Uygulamadan Önce Yapılması Gerekenler... 25 12.3. Uygulama Soruları... 25 12.4. Değerlendirme... 26 3
Uygulama 1: Diziler ve İşaretçiler, Dinamik Bellek Ayırma 1.1. Amaç ve Kapsam Bu uygulamada programlamanın temelini oluşturan tek boyutlu diziler, çok boyutlu diziler ve işaretçiler ile ilgili uygulamalar incelenecektir. Dinamik bellek ayrılmasının nasıl yapıldığı öğrenilecektir. 1.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 1.3. Uygulama Soruları a) Küçükten büyüğe doğru sıralı bir diziye, dizinin sırasını bozmayacak şekilde, verilen bir elemanı ekleyen program kodunu yazınız. Girilen dizi: 1 3 5 7 9 Eklenecek sayı: 4 Dizinin son hali: 1 3 4 5 7 9 4
b) Dışarıdan alacağınız boyut değerlerine göre dinamik olarak tanımlayacağınız iki matrisin çarpımını, çarpım kurallarını sağlayan kontrolleri de içerecek şekilde gerçekleyen program kodunu yazınız. 1.4. Değerlendirme 5
Uygulama 2: Yapılar 2.1. Amaç ve Kapsam Bu uygulamada yapıların tanımlanması ve kullanımı incelenecektir. Yapıların paralel dizi oluşturmamıza gerek kalmadan birden fazla değişken türüyle yeni bir değişken türü oluşturmamıza yarayan bir tanımlama sunduğu görülecektir. 2.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 2.3. Uygulama Soruları Bir fabrikada çalışan işçilerin ad, soy ad, sicil, bölüm, maaş gibi bilgilerini içeren bir struct yapısı oluşturunuz. Dışarıdan alacağınız işçi sayısı değerine göre gerekli değişken tanımlamalarınızı yaparak, işçi bilgilerinin klavyeden girilerek kaydedildiği program kodunu yazınız. 2.4. Değerlendirme 6
Uygulama 3: Linkli Liste Yapıları ve İşlemleri 3.1. Amaç ve Kapsam Bu uygulamada liste yapılarının tanımlanması, kullanılması incelenecektir. Listeler üzerinde yapılan eleman ekleme, silme, güncelleme vb. işlemlerin gerçekleştirilmesi görülecektir. 3.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 3.3. Uygulama Soruları a) N adet düğümden oluşan ve düğümler içerisinde rastgele atanmış rakamlar tutulan list isimli bir bağlı doğrusal liste yapısı oluşturulmuştur. Listede tutulan bu rakamların tekrar edilme sayılarını hesaplayıp sonucu tanımlanan bir sonuc dizisi ile geri döndüren sayrakam isimli fonksiyonu yazınız. 7
b) Bir bağlı dairesel listelerde listenin sonundaki düğümü kesip, listenin başına ekleyen bir fonksiyon yazınız. 3.4. Değerlendirme 8
Uygulama 4: Linkli Liste Yapıları ve İşlemleri 4.1. Amaç ve Kapsam Bu uygulamada listeler üzerinde yapılan eleman ekleme, silme, güncelleme vb. işlemlerin gerçekleştirilmesi incelenecektir. Bunun yanında listeler üzerinde yapılabilecek farklı uygulamalar görülecektir. 4.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 4.3. Uygulama Soruları a) İki bağlı doğrusal bir listeyi (örneğin 13, 17, 14, 11 dizilimine sahip) tersten yerleşecek şekilde (düğümler 11, 14, 17, 13 şeklinde dizilecek) yeniden oluşturan bir fonksiyon yazınız. 9
b) İki bağlı dairesel bir listede, fonksiyona parametre olarak aktarılan A listesindeki x verisini içeren ikinci düğümü bularak silen (bu düğümü belleğe iade eden) bir fonksiyon yazınız. 4.4. Değerlendirme 10
Uygulama 5: Yığın Yapısı 5.1. Amaç ve Kapsam Bu uygulamada yığın nedir, nerelerde kullanılır ve nasıl tanımlanır gibi soruların cevapları öğrenilecektir. Bununla birlikte yığın yapısının çalışma prensibi incelenecektir. Yığına eleman ekleme, yığından eleman çıkarma işlemleri görülecektir. 5.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 5.3. Uygulama Soruları Dışarıdan verilen bir kelimeyi, kelimenin ilk elemanından son elemanına kadar yığın yapısına ekleyen ve daha sonra yığın yapısından çıkararak ekrana yazdıran programı gerçekleyiniz. 11
5.4. Değerlendirme 12
Uygulama 6: Yığın Yapısı 6.1. Amaç ve Kapsam Bu uygulamada yığın nedir, nerelerde kullanılır ve nasıl tanımlanır gibi soruların cevapları öğrenilecektir. Bununla birlikte yığın yapısının çalışma prensibi incelenecektir. Yığına eleman ekleme, yığından eleman çıkarma işlemleri görülecektir. 6.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 6.3. Uygulama Soruları Dışarıdan girilen ve aşağıda verilen örmekteki gibi parantezler kullanılarak tanımlanan herhangi bir matematiksel formülün parantez sayısının ve kullanımının doğru yapılıp yapılmadığını kontrol eden program kodunu yazınız. Giriş: 7 ( ( X * ( ( X + Y ) / ( J 3 ) ) + Y ) / ( 4 2.5 ) ) Giriş: 7 ( ( X * ( ( X + Y ) / ( J 3 ) ) + Y ) / ( 4 2.5 ) ) ) Sonuç : Doğru Sonuç: Hatalı 13
6.4. Değerlendirme 14
Uygulama 7: Kuyruk Yapısı 7.1. Amaç ve Kapsam Bu uygulamada kuyruk nedir, nerelerde kullanılır ve nasıl tanımlanır gibi soruların cevapları öğrenilecektir. Bununla birlikte kuyruk yapısının çalışma prensibi incelenecektir. Kuyruğa eleman ekleme, kuyruktan eleman çıkarma işlemleri görülecektir. 7.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 7.3. Uygulama Soruları Dışarıdan verilen 10 elemanlı bir sayı dizisini oluşturulan kuyruk yapısına ekleyen ve daha sonra bu kuyruktaki elemanları ekrana yazarak kuyruktan çıkaran program kodunu yazınız. 15
7.4. Değerlendirme 16
Uygulama 8: Ağaç Veri Yapısı ve İkili Arama Ağaçları 8.1. Amaç ve Kapsam Bu uygulamada ağaç veri yapısının tasarımı ve kullanımı öğrenilecektir. En önemli ağaç yapılarından biri olan ikili arama ağaçlarının yapısı incelenecektir. İkili ağaçların hangi uygulama alanlarında kullanıldığı görülecektir. 8.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 8.3. Uygulama Soruları a) 50, 28, 46, 80, 47, 96, 14, 10, 68, 20, 34, 71 değerlerine sahip düğümlerini oluşturacağınız ikili ağaç yapısına yerleştiren program kodunu yazınız. 17
b) Yazacağınız bir fonksiyonla, a şıkkında verilen ağaç yapısı üzerinde dışarıdan girilen x sayısının bulunup bulunmadığını tespit eden, bulunduğu takdirde adresini, aksi takdirde null değerini döndüren fonksiyonun program kodunu yazınız. 8.4. Değerlendirme 18
Uygulama 9: AVL Ağaçlar 9.1. Amaç ve Kapsam Bu uygulamada AVL ağaç veri yapısının kullanımı ve tanımlanması incelenecektir. Bununla birlikte ikili ağaç yapısından ne gibi farklılıklar gösterdiği görülecektir. 9.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 9.3. Uygulama Soruları 60, 35, 20, 15, 17, 13, 40, 30, 18, 25 elamanlarını oluşturacağınız AVL tree yapısına yerleştiren program kodunu yazınız. 19
9.4. Değerlendirme 20
Uygulama 10: Öncelikli Kuyruklar: İkili Yığınlar 10.1. Amaç ve Kapsam Bu uygulamada ikili yığınlar veri yapısının kullanımı öğrenilecektir. İkili yığınların tasarımı ve üzerinde gerçekleştirilen işlemler incelenecektir. 10.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 10.3. Uygulama Soruları İkili yığınlar ile ilgili derste verilen kodlamaları gerçekleyiniz. 21
10.4. Değerlendirme 22
Uygulama 11: Hash Yapıları 11.1. Amaç ve Kapsam Bu uygulamada hash yapılarının kullanımı öğrenilecektir. Hash yapılarının tasarımı ve üzerinde gerçekleştirilen işlemler incelenecektir. 11.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 11.3. Uygulama Soruları Hash yapıları ile ilgili derste verilen kodlamaları gerçekleyiniz. 23
11.4. Değerlendirme 24
Uygulama 12: Graf Veri Yapısı 12.1. Amaç ve Kapsam Bu uygulamada graf veri yapısının tanımlanması, tasarımı ve kodlaması öğrenilecektir. Graf yapısının hangi durumlarda faydalı olacağı görülecektir. Graf yapısında verilerin nasıl tutulduğu ve veriler üzerinde hangi işlemlerin yapılacağı incelenecektir. 12.2. Uygulamadan Önce Yapılması Gerekenler Uygulamaya gelmeden önce uygulanacak konular hakkında teorik bilgilerin araştırılarak okunması ve hazır kodlamaların incelenmesi gerekmektedir. 12.3. Uygulama Soruları Graf yapısı için gerekli olan veri tanımlamalarını yaparak n tane düğümü bulunan bir graftaki toplam komşu düğümlerin sayısını döndüren program kodunu yazınız. 25
12.4. Değerlendirme 26