25 Mayıs 2015 Pazartesi
22 Mayıs 2015 Cuma
Çift Yönlü Bağlı Liste Tamsayı Uygulaması
Bu çalışmada büyüklüğü kullanıcı tercihine bırakılmış bir çift yönlü bağlı liste yapısı oluşturulmuştur. Yapılan her bir ekleme işleminin düğümün sağına yapılması sağlanmıştır. Daha sonra düğümlere girilen değerler sağdan ve soldan olacak şekilde ekran yazdırılmıştır.
Şekil 1’de bir çift yönlü bağlı liste yapısı gösterilmektedir. Böyle bir yapı kurabilmek için yapı içerisinde iki adet sağ ve sol olmak üzere işaretçiye ihtiyaç vardır.
Dairesel Bağlı Liste Karakter Uygulaması
Dairesel Bağlı Liste
21 Mayıs 2015 Perşembe
Çıkışsız Sonlu Durum Makinası
En Küçük Yol Ağacı Problemleri ve Kruskal Algoritmasının Uygulanması
En Kısa Yol Problemleri ve Dijkstra Algoritmasının Uygulanması
Graf Veri Modeli
Graf, bir olay veya ifadenin düğüm ve çizgiler kullanılarak gösterilme şeklidir. Fizik, Kimya gibi temel bilimlerde ve mühendislik uygulamalarında ve tıp biliminde pek çok problemin çözümü ve modellenmesi graflara dayandırılarak yapılmaktadır. Bu çalışmada graf veri modeli incelenerek örnek bir uygulayama yer verilmiştir.
Çalışma kapsamında:
Çalışma kapsamında:
- Graflara ilişkin bazı kavramlar
- Komşuluk matrisi
- Bitişiklik matrisi
- Düğüm derecesi
- Tamamlanmış graf
- Düzenli graf
- Düzlemsel graf
- Grafların bellekte tutulması
- Örnek uygulama
Dizi Üzerinde Kaydırmalı Kuyruk Fonksiyonu
Kuyruk, ilk giren ilk çıkar mantığıyla çalışan ve bellek üzerinde kurulan bir mekanizmadır. Kuyruk tasarımı için genel olarak dizi üzerinde kaydırmalı, dizi üzerinde çevrimsel ve bağlantılı liste yapısı kullanılmaktadır. Bu çalışmada dizi üzerinde kaydırmalı kuyruk fonksiyonu yapısının C++ dili ile kodlanmasına yer verilecektir.
Uygulama kapsamında; dizi üzerinde kaydırmalı kuyruk yapısı için ekleme, listeleme ve çıkartma fonksiyonlarıan yer verilmiştir.
Uygulama kapsamında; dizi üzerinde kaydırmalı kuyruk yapısı için ekleme, listeleme ve çıkartma fonksiyonlarıan yer verilmiştir.
Yığın ve Dizi ile Gerçekleştirilmesi
Yığın, eleman ekleme ve çıkarma işlemlerinin dizinin en son konumuna göre yapıldığı özel bir yapıdır. Bu çalışmada, yığın konusuna kısaca değinildikten sonra dizi ile yığın yapısının C++ gerçekleştirilmesini sağlayan uygulamaya yer verilmiştir.
Yığın, eleman ekleme ve çıkarma işlemlerinin dizinin en son konumuna göre yapıldığı özel bir yapıdır. Sıralı yapılarda olduğu gibi ara elemanlara doğrudan erişim yapılamaz.
Günlük hayattan birkaç örneğe bakıldığında:
Yığın, eleman ekleme ve çıkarma işlemlerinin dizinin en son konumuna göre yapıldığı özel bir yapıdır. Sıralı yapılarda olduğu gibi ara elemanlara doğrudan erişim yapılamaz.
Günlük hayattan birkaç örneğe bakıldığında:
- Mutfak rafındaki üst üste yerleştirilmiş tabaklar,
- Bir masa üzerine üst üste yerleştirilmiş kitaplar,
- Marketlerde üst üste yığılı duran konserve kutuları,
- Bir silahın şarjörüne yerleştirilmiş mermiler vb. hepsi yığın yapısına benzemektedir.
Gösterge ile Doğrusal Bağlı Liste Uygulaması
Çift Yönlü Bağlı Listeler
İki adet bağlantı bilgisi tutan bağlı listeler iki yönlü bağlantılı listeler olarak ifade edilir. Bağlantılardan bir tanesi önündeki düğümü işaret ederken, diğeri sonrasındaki düğümü işaret eder. Dolayısıyla liste üzerinde iki yönlü hareket edilebilir. Araya düğüm ekleme ya da silme işlemleri tek yönlü bağlı listelere göre daha kolay yapılabilmektedir. Bu çalışmada çift yönlü bağlı liste yapısı kullanılarak ekleme, silme, listeleme, arama ve bağlı listenin bir dosyaya kayıt edilip, dosyadan okunarak tekrar oluşturulması fonksiyonlarını içeren C++ uygulamasına yer verilecektir.
İki adet bağlantı bilgisi tutan bağlı listeler iki yönlü bağlantılı listeler olarak ifade edilir. Paylaşılan uygulamada, veri yapısında on ve arka olarak ifade edilen işaretçiler sayesinde bağlı listede iki yönlü hareket edilebilmektedir.
İki adet bağlantı bilgisi tutan bağlı listeler iki yönlü bağlantılı listeler olarak ifade edilir. Paylaşılan uygulamada, veri yapısında on ve arka olarak ifade edilen işaretçiler sayesinde bağlı listede iki yönlü hareket edilebilmektedir.
Doğrusal veya Ardışıl Arama
Ardışıl ya da doğrusal arama, en sade arama algoritmasıdır. Arama ilk kayıttan başlayıp en son kayıta kadar tek tek bakılarak yapılır. Bu çalışmada, doğrusal arama yapan C++ programına yer verilmiştir.
Bir dizi içinde bir verinin olup olmadığını anlamak için kullanılan basit bir algoritmadır. Doğrusal Arama Algoritması aranan veriyi, dizinin ilk öğesinden başlayarak son öğesine doğru, her terimle tek tek karşılaştırır. Bu algoritma, dizi içinde aranana eşit olan bir terim bulursa onun indisini verir. Aranan veriye eşit olan terim bulamazsa -1 değerini verir. –1 değeri verdiğinde, aranan öğe dizi içinde değildir. Dizi terimlerini, sırayla aranan öğe ile karşılaştırdığı için, bu algoritmaya dizisel arama algoritması adı da verilir.
Doğrusal aramayı iki özel duruma ayırabiliriz: Sırasız bir dizi içinde bir öğenin olup olmadığını aramak için, dizinin ilk teriminden başlanır, aranan değer her bir terimle mukayese edilerek, dizinin sonuna doğru gidilir. Aranan öğe varsa, algoritma o terimin indisini verir. Dizinin sonuna gelindiği halde, aranan öğe bulunamamışsa, algoritma -1 değerini verir.Dizinin öğe sayısı çok değilse Doğrusal Arama algoritması tercih edilebilir ama öğe sayısı çok olduğunda bunun yerine İkili Arama algoritması tercih edilmelidir.
Bir dizi içinde bir verinin olup olmadığını anlamak için kullanılan basit bir algoritmadır. Doğrusal Arama Algoritması aranan veriyi, dizinin ilk öğesinden başlayarak son öğesine doğru, her terimle tek tek karşılaştırır. Bu algoritma, dizi içinde aranana eşit olan bir terim bulursa onun indisini verir. Aranan veriye eşit olan terim bulamazsa -1 değerini verir. –1 değeri verdiğinde, aranan öğe dizi içinde değildir. Dizi terimlerini, sırayla aranan öğe ile karşılaştırdığı için, bu algoritmaya dizisel arama algoritması adı da verilir.
Doğrusal aramayı iki özel duruma ayırabiliriz: Sırasız bir dizi içinde bir öğenin olup olmadığını aramak için, dizinin ilk teriminden başlanır, aranan değer her bir terimle mukayese edilerek, dizinin sonuna doğru gidilir. Aranan öğe varsa, algoritma o terimin indisini verir. Dizinin sonuna gelindiği halde, aranan öğe bulunamamışsa, algoritma -1 değerini verir.Dizinin öğe sayısı çok değilse Doğrusal Arama algoritması tercih edilebilir ama öğe sayısı çok olduğunda bunun yerine İkili Arama algoritması tercih edilmelidir.
Hızlı Sıralama
Hızlı sıralama algoritması böl ve yönet politikasına dayanır; sıralanması istenen dizi belirli bir sınır değerine göre iki alt diziye ayrılır. İkiye ayırma işlemi, bu sınır sayısından küçük olan elemanlar diğer tarafa toplanarak yapılır. Bu uygulamada, hızlı sıralama algoritmasının C++ ile gerçekleştirilmesi sağlanmaktadır.
Hızlı sıralama algoritması, günümüzde yaygın olarak kullanılan bir sıralama algoritmasıdır. Hızlı sıralama algoritması, sıralanacak bir sayı dizisini daha küçük iki parçaya ayırıp oluşan bu küçük parçaların kendi içinde sıralanması mantığıyla çalışır.
Algoritmanın adımları aşağıdaki gibidir:
Sayı dizisinden herhangi bir sayıyı sınır eleman olarak seçilir.
Sayı dizisini sınırdan küçük olan tüm sayılar sınırın önüne, sınırdan büyük olan tüm sayılar sınırın arkasına gelecek biçimde düzenlenir (sınır, eşit olan sayılar her iki yana da geçebilir). Bu bölümlendirme işleminden sonra eleman sıralanmış son dizide olması gerektiği yere gelir. Algoritmanın bu aşamasına bölümlendirme aşaması denir.
Sınırın sol ve sağ yanında olmak üzere oluşan iki ayrı küçük sayı dizisi, hızlı sıralama algoritması bu küçük parçalar üzerinde yeniden özyineli olarak çağrılarak sıralanır.
Algoritma içinde sayı kalmayan (eleman sayısı sıfır olan) bir alt diziye ulaştığında bu dizinin sıralı olduğunu varsayar.
Hızlı sıralama algoritması, günümüzde yaygın olarak kullanılan bir sıralama algoritmasıdır. Hızlı sıralama algoritması, sıralanacak bir sayı dizisini daha küçük iki parçaya ayırıp oluşan bu küçük parçaların kendi içinde sıralanması mantığıyla çalışır.
Algoritmanın adımları aşağıdaki gibidir:
Sayı dizisinden herhangi bir sayıyı sınır eleman olarak seçilir.
Sayı dizisini sınırdan küçük olan tüm sayılar sınırın önüne, sınırdan büyük olan tüm sayılar sınırın arkasına gelecek biçimde düzenlenir (sınır, eşit olan sayılar her iki yana da geçebilir). Bu bölümlendirme işleminden sonra eleman sıralanmış son dizide olması gerektiği yere gelir. Algoritmanın bu aşamasına bölümlendirme aşaması denir.
Sınırın sol ve sağ yanında olmak üzere oluşan iki ayrı küçük sayı dizisi, hızlı sıralama algoritması bu küçük parçalar üzerinde yeniden özyineli olarak çağrılarak sıralanır.
Algoritma içinde sayı kalmayan (eleman sayısı sıfır olan) bir alt diziye ulaştığında bu dizinin sıralı olduğunu varsayar.
Kümeleme Sıralaması
Birleşmeli Sıralama
Birleşmeli sıralama, böl ve yönet yaklaşımına dayanır ve dolayısıyla rekürsif tasarlanması doğasına uygundur. Sıralanması istenen küme elemanları, önce iki alt kümeye parçalanır ve fonksiyon kendisini sol alt küme ve sağ alt küme için iki kez çağırır. Bu çalışmada, birleşmeli sıralama uygulaması C++ ile geçekleştirilmiştir.
Birleşmeli sıralama, böl ve yönet yaklaşımına dayanır ve dolayısıyla rekürsif tasarlanması doğasına uygundur. Sıralanması istenen küme elemanları, önce iki alt kümeye parçalanır ve fonksiyon kendisini sol alt küme ve sağ alt küme için iki kez çağırır. Parçalama işlemine alt küme eleman sayısı tek oluncaya kadar devam edilir. Alt kümelerde bir tane eleman kalmışsa rekürsif çağırmalar geriye doğru, çağırana, dönmeye başlar ve geri dönülürken alt kümeler elemanları sıralı olacak biçimde birleştirilir. Algoritma adını, bu birleştirme işleminden almıştır.
Seçmeli Sıralama Algoritması
Seçmeli sıralama algoritmasında, dizinin başından ya da sonundan başlanır. Önce ilk eleman alınır ve daha sonra küme içerisindeki en küçük eleman aranır; bulunduğu zaman ilk eleman ile yer değiştirilir; daha sonra ikinci eleman alınır ve bu eleman dahil kalan elemanlar arasında ikinci en küçük eleman aranır ve ikinci elemana yerleştirilir. Bu işlem dizinin son elemanına kadar tekrarlanırsa dizi sıralanır. Bu çalışmada, seçmeli sıralama yapan C++ programına yer verilmiştir.
Seçmeli Sıralama, bilgisayar bilimlerinde kullanılan bir sıralama algoritmasıdır. Karmaşıklığı karesel olduğu için büyük listeler üzerinde kullanıldığında verim sağlamaz ve genel olarak benzeri olan eklemeli sıralamadan daha başarısızdır. Seçmeli sıralama yalın olduğu ve bazı durumlarda daha karmaşık olan algoritmalardan daha iyi sonuç verdiği için tercih edilebilir.
Seçmeli Sıralama, bilgisayar bilimlerinde kullanılan bir sıralama algoritmasıdır. Karmaşıklığı karesel olduğu için büyük listeler üzerinde kullanıldığında verim sağlamaz ve genel olarak benzeri olan eklemeli sıralamadan daha başarısızdır. Seçmeli sıralama yalın olduğu ve bazı durumlarda daha karmaşık olan algoritmalardan daha iyi sonuç verdiği için tercih edilebilir.
Eklemeli Sıralama Algoritması
Araya sokma algoritması, sıralanacak dizinin ilk elemanını yerine bırakarak, sonraki elemanları (alt diziyi) sırayla alarak sıraya uygun olan yere sokar. Bu çalışmada, dizi üzerinde araya sokma sıralaması yapan C++ fonksiyonuna yer verilecektir.
Eklemeli sıralama algoritması, sıralanacak dizinin ilk elemanını yerine bırakarak, sonraki elemanları sırayla alarak sıraya uygun olan yere sokar. Eklemeli sıralama, bilgisayar bilimlerinde kullanılan ve sıralı diziyi her adımda öğe öğe oluşturan bir sıralama algoritmasıdır. Büyük dizilerle çalışıldığında hızlı sıralama, birleştirmeli sıralama ve yığın sıralaması gibi daha gelişmiş sıralama algoritmalarından daha verimsiz çalışır. Avantajları ise aşağıda sıralanmıştır:
Eklemeli sıralama algoritması, sıralanacak dizinin ilk elemanını yerine bırakarak, sonraki elemanları sırayla alarak sıraya uygun olan yere sokar. Eklemeli sıralama, bilgisayar bilimlerinde kullanılan ve sıralı diziyi her adımda öğe öğe oluşturan bir sıralama algoritmasıdır. Büyük dizilerle çalışıldığında hızlı sıralama, birleştirmeli sıralama ve yığın sıralaması gibi daha gelişmiş sıralama algoritmalarından daha verimsiz çalışır. Avantajları ise aşağıda sıralanmıştır:
- Uygulaması kolaydır.
- Küçük veri kümeleri üzerinde kullanıldığında verimlidir.
- Çoğunluğu zaten sıralanmış olan diziler üzerinde kullanıldığında verimlidir.
- Karmaşıklığı olan seçmeli sıralama ve kabarcık sıralaması gibi çoğu yalın sıralama algoritmalarından daha verimlidir.
- Kararlı bir sıralama algoritmasıdır.
- Sıralanacak diziyi yerinde sıralar, ek bir bellek alanı gerektirmez.
- Sıralanacak dizinin hepsinin algoritmanın girdisi olmasına gerek yoktur. Dizi parça parça da alınabilir ve sıralama işlemi sırasında diziye yeni veriler eklenebilir.
Yapılar ve Uygulamaları
Bu çalışmada yapılar konusuna kısaca değinilmiştir. Yapılar konusu açıklandıktan sonra örnek uygulamalara yer verilmiş ve uygulamaların C++ dili kodlanması sağlanmıştır.
Çeşitli programlar yazılırken çoğu zaman standart veri türleri yeterli olmaktadır. Ancak bazen verilerin daha anlamlı halde tutulmasını sağlamak üzere birkaç veri türü birleştirilip bir topluluk oluşturulur, oluşturulan bu topluluk C dilinde yapılar olarak ifade edilmektedir. Yapı tanımlama ve kullanımına ilişkin bilgilere uygulama kapsamında yer verilmiştir.
Çeşitli programlar yazılırken çoğu zaman standart veri türleri yeterli olmaktadır. Ancak bazen verilerin daha anlamlı halde tutulmasını sağlamak üzere birkaç veri türü birleştirilip bir topluluk oluşturulur, oluşturulan bu topluluk C dilinde yapılar olarak ifade edilmektedir. Yapı tanımlama ve kullanımına ilişkin bilgilere uygulama kapsamında yer verilmiştir.
Aritmetik ve Geometrik Ortalama Hesabı
Rekürsif Fonksiyonlar
Rekürsif fonksiyon, doğrudan ya da dolaylı olarak bir fonksiyonun kendini çağırması olarak ifade edilir. Bu çalışmada rekürsif fonksiyon tanımı yapılarak bazı uygulama örneklerine yer verilecektir.
Rekürsif fonksiyon, doğrudan ya da dolaylı olarak bir fonksiyonun kendini çağırması olarak ifade edilir. Rekürsif fonksiyonlar, tasarımı kolaylaştırır; ancak, fonksiyon çağırma sayısı ve parametre aktarımı artacağı için bellek alanı gereksinimi de artar. Çünkü her fonksiyonun çağrılmasında ve parametrelerin aktarılmasında yığın (stack) olarak adlandırılan bellek alanı kullanılmaktadır.
Rekürsif fonksiyonlar, permütasyon, hızlı sıralama, fibonnaci sayılarının bulunması gibi algoritmaların gerçekleştirilmesi için son derece uygundur ve çok hızlıdır.
Bu çalışma kapsamında rekürsif fonksiyon tanımı ile:
Rekürsif fonksiyon, doğrudan ya da dolaylı olarak bir fonksiyonun kendini çağırması olarak ifade edilir. Rekürsif fonksiyonlar, tasarımı kolaylaştırır; ancak, fonksiyon çağırma sayısı ve parametre aktarımı artacağı için bellek alanı gereksinimi de artar. Çünkü her fonksiyonun çağrılmasında ve parametrelerin aktarılmasında yığın (stack) olarak adlandırılan bellek alanı kullanılmaktadır.
Rekürsif fonksiyonlar, permütasyon, hızlı sıralama, fibonnaci sayılarının bulunması gibi algoritmaların gerçekleştirilmesi için son derece uygundur ve çok hızlıdır.
Bu çalışma kapsamında rekürsif fonksiyon tanımı ile:
- Faktöriyel Hesabı
- Fibonnaci Serisinde Terim Hesaplama
- Permütasyon Hesabı
- Ortak Bölenlerin En Büyüğü (OBEB) Hesabı
- Üst Alma Hesabı
Kaydol:
Kayıtlar (Atom)