qwertyuiopasdfghjklzxcvbnmqw ertyuiopasdfghjklzxcvbnmqwert yuiopasdfghjklzxcvbnmqwertyui opasdfghjklzxcvbnmqwertyuiopa BLG 221 sdfghjklzxcvbnmqwertyuiopasdf Veri yapıları ghjklzxcvbnmqwertyuiopasdfghj 04.01.2012 MEHMET ALİ SARIKAYA klzxcvbnmqwertyuiopasdfghjklz xcvbnmqwertyuiopasdfghjklzxcv bnmqwertyuiopasdfghjklzxcvbn mqwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqwe rtyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuio pasdfghjklzxcvbnmqwertyuiopas dfghjklzxcvbnmqwertyuiopasdfg hjklzxcvbnmqwertyuiopasdfghjk
Ödev Tanımı İkili sıralama ağacı kullanılarak gerçekleştirilecek bu ödevde öncelikle öğrenci numara, ad ve soyadlarını farklı sırada içeren üç farklı dosyadan öğrenci bilgileri okunup üç farklı ağaç oluşturulmuş ve kullanıcının isteğine göre ilgili ağaçta ilgili işlemler gerçekleştirilecek şekilde program tasarlanmıştır. Ve ilerleyen bölümlerde yer alan fonksiyonlar ve işlevleri gerçekleştirilmiştir. Ayrıca ilk derinlik öncelikli arama(depth-first search) ve ilk genişlik öncelikli arama(breath-first search) algoritmalarının performansları listenin başı ortası ve sonu için test edilmiş ve aşağıdaki sonuçlar elde edilmiştir. Ağaçların performansları Öğrenci Numarası depth-first search breath-first search Karşılaştırma sayısı Karşılaştırma sayısı Data1.txt Data2.txt Data3.txt Data1.txt Data2.txt Data3.txt 1001064 1 68 4 1 68 7 1001065 2 67 3 2 67 4 1001066 3 66 7 3 66 17 1003007 34 35 36 34 35 34 1003008 35 34 35 35 34 22 1003039 66 3 1 66 3 1 1003040 67 2 67 67 2 3 1003041 68 1 68 68 1 6 Ortalama 34.5 34.5 27.625 34.5 34.5 11.75 Yukarıdaki tabloya göre şunu belirtmeliyiz ki data1 sadece sağa doğru uzayan bir ağaç, data2 sadece sola doğru uzayan bir ağaç ve data3 ise karma bir ikili ağaç olduğu için sıralama açısından uzak değerler data1 ve 2 de daha yavaş bulunurken data3 için bu işlem biraz daha kısa sürmekte. Özellikle de breath-first search için data3 ortalama olarak gayet iyi bir performans göstermektedir. Ödevde kullanılan yapılar Copyrighted 2011 by SARIKAYA Sayfa 1
Öğrencilerin bilgilerini tutmak için kullanılan struct aşağıdaki gibidir. Dosya işlemleri ve diğer işlemleri gerçekleştirmek için kullandığım struct aşağıdaki gibidir. Kuyruk ve yığın yapısı oluşturmak için kullandığım struct aşağıdaki gibidir. Kuyruk yapısı fonksiyonları için kullandığım struct aşağıdaki gibidir. Copyrighted 2011 by SARIKAYA Sayfa 2
Yığın yapısı fonksiyonları için kullandığım struct aşağıdaki gibidir. Ödevde Kullanılan Fonksiyonlar Ödevde kullandığım fonksiyon prototipleri aşağıdaki gibidir. Fonksiyonların ayrıntıları void menu_yazdir(): Kullanıcıya menü ekranı gösterilir ve seçenekler sunulur. Copyrighted 2011 by SARIKAYA Sayfa 3
bool islem_yap(char): Kullanıcının seçimine göre ilgili fonksiyon çağrılır. Copyrighted 2011 by SARIKAYA Sayfa 4
void listekur(): Girdi dosyalarının okunarak, ağaç yapısının oluşturulduğu fonksiyondur. void ogrencisil(): Öğrenci numarasını kullanıcıdan alarak, istenen silme işlemini gerçekleştirir. void inordertara():agac yapisini sirali(inorder) olarak. void preordertara():agac yapisini kokten baslayarak (preorder) olarak listeler. Copyrighted 2011 by SARIKAYA Sayfa 5
void postordertara():listeler Agac yapisini kokten baslayarak (preorder) olarak listeler. void ilkderinlikara():ogrenci numarasini kullanicidan alarak, agac uzerinde ilk derinlik oncelikli arama(depth-first search) islemi yapar. Bulundugu takdirde ogrenci numarasina ait isim ve soy isim bilgilerini, aksi takdirde bulunamadigi bilgisini doner. Copyrighted 2011 by SARIKAYA Sayfa 6
void ilkgenislikara():ogrenci numarasini kullanicidan alarak, agac uzerinde ilk genislik oncelikli arama(breath-first search) islemi yapar. Bulundugu takdirde ogrenci numarasina ait isim ve soy isim bilgilerini, aksi takdirde bulunamadigi bilgisini doner. void dosyayayaz(): Çıktı dosyasının oluşturulduğu fonksiyondur. Oluşturulan ağaç yapısı çıktı dosyasına yazdırılır. Copyrighted 2011 by SARIKAYA Sayfa 7
Dosya yapısının fonksiyonlarının ayrıntıları void Dosya::EnineAra(int sayac,string aranacak,ogrenci *kok) : Copyrighted 2011 by SARIKAYA Sayfa 8
void Dosya::DerineAra(int sayac,string aranacak,ogrenci *kok) : Copyrighted 2011 by SARIKAYA Sayfa 9
void Dosya::ekle(ogrenci *eklenecek,int data) : void Dosya::InorderYazdir(ogrenci *kok) : void Dosya::PreorderYazdir(ogrenci *kok): Copyrighted 2011 by SARIKAYA Sayfa 10
void Dosya::PostorderYazdir(ogrenci *kok): void Dosya::sil(string no,ogrenci **kok) : Copyrighted 2011 by SARIKAYA Sayfa 11
void Dosya::sil(ogrenci **p): Derleme Ortamları ve Örnek Çıktılar Programı Ubuntu 11.04 te NetBeans 7.0.1 Ide ortamında geliştirdim, derledim ve çalıştırdım. Ayrıca Byobu terminal ile derlenip çalıştırılmış ve herhangi bir hata ile karşılaşılmamıştır. Copyrighted 2011 by SARIKAYA Sayfa 12
NetBeans örnek çıktısı Copyrighted 2011 by SARIKAYA Sayfa 13
Byobu Terminal örnek çıktısı Neler öğrendik??? Ağaç, Kuyruk ve Yığın veri yapısı kullanmayı, ilk genişlik öncelikli arama(breath-first search) ve ilk derinlik öncelikli arama(depth-first search) algoritmalarını ve bunların hangi durumlarda daha iyi performans sergilediğini öğrendik. Bakalım bu hayat bize daha neler öğretecek Copyrighted 2011 by SARIKAYA Sayfa 14