Kuyruk Veri Yapısı – [Java]
Veri yapıları dersinin önemli elemanlarından biri olan kuyruk (queue) yapısını Java ile oluşturmaya çalıştım. Kodlar biraz amatörce oldu ama çalışıyor
Peki nedir bu kuyruk? Wiki şöyle diyor
FIFO (First In Fist Out – İlk Giren İlk Çıkar) mantığına dayalı kuyruk yapısı ile ilgili yazdığım class:
public class kuyruk {
// private değişkenler
private int maxBoyut;
private long[] kuyrukDizi;
private int front;
private int rear;
private int elemanSayisi;
// constructor
// kuyruk degisken_ismi = new kuyruk (eleman_sayisi);
public kuyruk (int boyut){
maxBoyut = boyut;
kuyrukDizi = new long [maxBoyut];
front = 0;
rear = -1;
elemanSayisi = 0;
}
// metodlar
// kuyruk boş mu?
public boolean bosMu() {
if (elemanSayisi == 0) return true;
else return false;
}
// kuyruk dolu mu?
public boolean doluMu() {
if (elemanSayisi == maxBoyut) return true;
else return false;
}
// kuyruğa eleman ekleme
public void insert (long eklenecekEleman){
if (rear == maxBoyut -1) rear = -1;
rear++;
kuyrukDizi [rear] = eklenecekEleman;
elemanSayisi++;
}
// kuyruktan eleman çekme
public long remove(){
long cikarilacak = kuyrukDizi [front++];
if (front == maxBoyut) front = 0;
elemanSayisi--;
return cikarilacak;
}
// kuyruğun sonundaki eleman
public long kuyrukNerde() {
return kuyrukDizi[front];
}
// kuyruğun boyutu
public int kuyrukBoyutu() {
return elemanSayisi;
}
}
yukarıdaki gibidir.
Çomü Yazılım Seminerleri

Başkanlığını yaptığım Çomü Yazılım ve Otomasyon Topluluğu’nun bu yılki ilk etkinliği olan yazılım seminerlerine bugün başladım. Seminerlerin dönem sonuna kadar devam etmesini planlıyoruz. İlk gün başlangıç olarak topluluktan bir arkadaşımla birlikte, Bilgisayar ve Öğretim Teknolojileri Öğretmenliği bölümü 2. sınıf öğrencilerinden oluşan 30 kişilik bir gruba C++ programlama dilini kullanarak algoritma ve programlama anlattım. Derslerinde C++ programlama dilini daha önceden gördükleri için anlamaları hiç de zor olmadı ve konularda tekrara gerek kalmadan kolaylıkla ilerleyebildik.
Programlama dersi alan Fizik ve Matematik bölümlerinden gelen istek üzerine bir sonraki haftadan itibaren bir grup daha eklenmiş olacak ve dönem sonuna kadar Bilgisayar ve Öğretim Teknolojileri Öğretmenliği, Fizik ve Matematik bölümü öğrencilerine C++ ile programlama anlatmaya devam edeceğim.
Dersler sırasında yazdığımız kod örneklerini de seminer sayfasına her ders sonrası düzenli olarak ekleyeceğim. Dersleri kaçıran ya da kodları alamayan arkadaşlar burdan yararlanabilirler.
Sıralama Algoritmaları [1] : Selection Sort
Bilgisayar ortamında verilerin sıralı olması birçok işi kolaylaştırır. Arama, ekleme, bölme vs. durumlarında verilerin sıralı olması ile olmaması arasında çok büyük performans farkı olabilir.
Birçok algoritma (örneğin binary search) sıralı veriler üzerinde çalışır. Kullanıcı için de verilerin sıralı olması büyük kolaylık sağlar.
Verilerin sıralanması için birçok algortima geliştirilmiştir.
* Selection Sort
* Bubble sort
* Insertion sort
* Shell sort
* Merge sort
* Heapsort
* Quicksort
* Bucket sort
* Radix sort
* Distribution sort
* Shuffle sort
…
Listeyi uzatmak mümkün. Sıralanacak veririn boyutu, yazılacak kod maliyeti, sistem kaynakları, kullanıcı tercihi vb. durumlara göre herhangi biri tercih edilebilir.
Bunlardan Selection Sort’u inceleyelim. Sayı dizisini kullaracak olursak, algoritma ilk adımda tüm diziyi dolaşacak, en küçük elemanı bulup ilk sıraya yazacak.
Sonra dizinin kalan kısmında aynı işi yeniden yapacak. Kalan kısmı tarayıp en küçük elamanı bulup, ikinci sıraya yazacak. Bu şekilde son elemana kadar gidip en küçükten büyüğe doğru dizimiz sıralanmış olacak.
Viki’de aşağıdaki animasyonu buldum, Selection Sort için hazırlanmış basit bi şey.

Fonksiyon için de C ve Java’da aşağıdaki kodları yazdım. Aynı işi yapan benzer şeyler de yazılabilir.
C/C++ kodu :
void selectionSort (int dizi[], int elemanSayisi)
{
int i, j, enKucuk, temp;
for (i=0; i<elemanSayisi-1; i++)
{
enKucuk = i;
for (j=i+1; j<elemanSayisi; j++)
{
if (dizi[j] < dizi [enKucuk])
enKucuk = j;
}
temp = dizi[i];
dizi[i] = dizi[enKucuk];
dizi[enKucuk] = temp;
}
}
Java kodu :
private static void selectionSort(int [] dizi,int n)
{
int temp;
int enKucuk;
for(int i=0; i<n-1; i++)
{
enKucuk=i;
for(int j=i; j<n; j++)
{
if (dizi[j] < dizi[enKucuk]) enKucuk=j;
}
temp=dizi[i];
dizi[i]=dizi[enKucuk];
dizi[enKucuk]=temp;
}
}
Fonksiyon argüman olarak aldığı diziyi Selection Sort algoritması ile sıralıyor.
İç içe iki tane döngü kullanıldığı için algoritmanın karmaşıklığı O(n²) olur. Küçük boyutlu dizilerde fazla kod yazmaya gerek kalmadan kullanılabilecek bir algoritmadır.





![Validate my RSS feed [Valid RSS]](http://www.oguzozkeroglu.com/images/ico/valid-rss.png)