|
C#'da Sıra (Queue) Sınıfı ve kullanımı |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bir önceki yazımızda
genel olarak yığın (Stack) veri yapısının çalışma modeline ve C#'ta kullanabileceğimiz
yığın sınıfını ve bu sınıfın metodları üzerinde durmuştuk. Şimdi burada ise,
diğer önemli veri yapısı olan sıra (queue) veri yapısını inceleyeceğiz. Queue
veri yapısının mantığını anladıktan sonra .NET sınıf kitaplıklarında bulunan
Queue sınıfını öğreneceğiz.
Queue
veri tipi ve .NET'in sınıf kütüphanesinde bulunan Queue sınıfı, yığın (stack)
sınıfına çok benziyor. Bu veri tipleri çalışma mantığı olarak tam tersi
gibi görünmelerine rağmen bir çok metodları ve özellikleri birebir örtüşüyor.
Bu durumda birazdan okayacağınız makalenin formatı yığın makalemizdekine
çok benzediğini göreceksiniz. |
1. Queue(sıra) veri Yapısının
Çalışma Şekli
Sıralar (queue)
İlk Giren İlk Çıkar (FIFO) prensibi ile çalışan veri yapısı şekinde bilinirler.
Bir sıraya ilk giren eleman ilk olarak çıkar. Sıralara örnek olarak bir markette
alışverişini yapan müşterilerin, aldıkları ürünlerin ücretlerini ödemek için
kasada sıraya geçmeleri verilebilir. Marketteki sırada sıraya ilk giren müşterinin
işi ilk önce biter. Daha sonra ikinci ve üçüncü müşterilerin işleri yapılır.
Sıralar bilgisayar
programlamada sık sık başvurulan veri yapılarıdır. Mesela, işletim sisteminde
yapılması gereken işleri bir sıra veri yapısı ile tutarız. Herhangi bir anda
yeni bir iş geldiği zaman bu iş sıraya (Queue) girer. Sırası gelen iş yapılır
ve sonraki işe geçilir gibi. Queue veri yapıları ayrıca simulasyonlarda da sık
sık kullanılır.
2. .NET Sınıf Kütüphanesi
Sıra Sınıfı (Queue)
.NET sınıf kütüphanesinde
sıra veri yapısını kullanmak için Queue sınıfını kullanırız. NET'in
yığın (Stack) sınıfını kullanmak için pogram kodunun baş tarafına using
System.Collections; eklememiz gerekir. Yani sıra sınıfı System.Collections
isim alanında bulunuyor.
C# veya herhangi bir dilde yazılan yığın veri
yapılarında Enqueue(), Dequeue, Peek(), Clear() fonksiyonları ve Count,
özelliği vadır. Bunların yanında Clone(), CopyTo(), ToArray(), Contains()
ve Equals() metodları .NET'in yığın sınıfında yeralır.
Sıra sınıfının Enqueue() metodu sıraya
yeni bir eleman ekler. Dequeue() metodu ile yığının en öndeki elemanı
sıradan siler ve silinen elemanı geriye dönderir. Eğer sıranın tepesindeki elemanı
öğrenmek istersek Peek() medotunu işimize yarar. Bu metod sıranın başındaki
nesneyi dödürür ama bu nesneyi sıradan silmez.
using
System;
using System.Collections; // Queue sınıfı bu isim
alanı içinde bulunur.
class Sira_Ornek1
{
public static void Main()
{
// Queue sınıfından
bir nesne oluşturalım:
Queue sira = new Queue();
// Nesnemize
Enqueue metodu ile değerler girelim:
sira.Enqueue("Ahmet");
sira.Enqueue("Ferit");
sira.Enqueue("Hasan");
sira.Enqueue("Hüseyin");
// sira isimli
nesnemizin eleman sayısı:
Console.WriteLine( "\n sira nesmemizin
eleman sayısı: " + sira.Count);
// sira isimli
nesnemizin elemanları:
Console.WriteLine( "\n sıra nesmemizin
elemanları: " );
DegerleriYaz( sira );
//sira
isimli nesmemizden bir eleman alalım:
string eleman= (string)sira.Dequeue();
Console.WriteLine(" \n Sıramizin
başından şunu aldık: " + eleman);
//şimdi
ise siranin en başındaki nesneyi öğrenelim.
// Ama onu ıiradan çıkartmayacağız:
eleman= (string)sira.Peek();
Console.WriteLine(" \n Sıramızın
başındaki eleman " + eleman);
}
public static void DegerleriYaz( IEnumerable kolleksiyon
)
{
System.Collections.IEnumerator Enum
= kolleksiyon.GetEnumerator();
while ( Enum.MoveNext() )
Console.Write( "\t{0}",
Enum.Current );
Console.WriteLine();
}
}
|
Yukarıdaki örnek programda önce Queue sınıfından
sıra isimli bir nesne oluşturuyoruz. Sonraki altı satırda sıramıza "Ahmet",
"Ferit", "Hasan", ve "Hüseyin" değerlerini Enqueue
metodu ile ekliyoruz. Degerleri() ismini verdiğimiz static fonksiyonumuz
ile sıramızdaki eleman sayısını ve elemanları ekrana yazdırıyoruz. Daha sonra
sıramızdan bir tane elemanı Deuque() metodu yardımıyla alıyor ekrana
yazdırıyoruz. Programın son kısmında ise Peek() metodunu kullanrak sıranın
en üstündeki elemanın ne olduğunu öğreniyoruz ve bu eleman sırada kalıyor.
Sıra sınıflarında bulunan diğer iki temel fonksiyonlar
olan Count özelliği ve Clear() metodlarıdır. Bunlardan
Count, sıra nesnesinde bulunan elemanların sayısını geriye dönderen bir
özelliktir. Özellikler C# dilinde sınıflarda bulunan üye değişkenlerin değerlerini
öğrenmemize ve onların değerlerini değiştirmemize yarayan bir tür fonksiyonlardır.
Count özelliği eleman sayısını int tipinde dönderir ve sadece okunabilen
(readonly) yapıdadır. Özellikler program içinde çağrılırken parantezleri kullanmayız.
Eğer sırayı boşaltmak/temizlemek istersek Clean() metodu işimizi yarayacaktır.
Clean() metodu hiçbir parametre almaz ve hiçbirşey döndermez. Herhangi
bir sıra nesnesinin içinde bir elemanın olup olmadığını anlamak için Contains()
metodu kullanılır. Bu metod aranacak nesneyi alır ve geriye true
veya false değerlerini dönderir. İsterseniz aşağıdaki
programda Contains() ve Clear() metodları ile Count özelliklerini
nasıl kullanabileceğimizi görelim:
using
System;
using System.Collections; // Queue sınıfı bu isim
alanı içinde bulunur.
class Sira_Ornek2
{
public static void Main()
{
// Queue sınıfından
bir nesne oluşturalım:
Queue sira = new Queue();
// Nesnemize
Enqueue metodu ile değerler girelim:
sira.Enqueue(12);
sira.Enqueue(3);
sira.Enqueue(18);
sira.Enqueue(7);
sira.Enqueue(20);
// sıra isimli
nesnemizin eleman sayısı:
Console.WriteLine( "\n sira nesmemizin
eleman sayısı: " + sira.Count);
// sira isimli
nesnemizin elemanları:
Console.WriteLine( "\n sıra nesmemizin
elemanları: " );
DegerleriYaz( sira );
//Contains metodunun
kullanımı:
int sayi=7;
if(sira.Contains(7))
Console.WriteLine("Sıramızda
" + sayi + " var.");
else
Console.WriteLine("Sıramızda
" + sayi + " yok.");
// sıramızın
içindeki elemanları silelim:
sira.Clear();
// Sıramızı
temizledikten sonra kaç tane
//eleman bulunduğunu bulup yazalım.
int elemanSayisi= sira.Count;
Console.WriteLine("\n Sıramizda
şu anda {0} tane eleman vardır.", elemanSayisi);
}
public static void DegerleriYaz( IEnumerable kolleksiyon
)
{
System.Collections.IEnumerator Enum
= kolleksiyon.GetEnumerator();
while ( Enum.MoveNext() )
Console.Write( "\t{0}",
Enum.Current );
Console.WriteLine();
}
}
|
Yığında
makalemiz Clone(), ToArray() ve Equals() metodlarının aynıları
Queue sınıfı içinde bulabiliriz. Sizlerin yığın makalesindeki
en son örneğini sıra veri tipi için de yazıp kendinizi denemenizi tavsiye ederim.
Herkese iyi çalışmalar.
Makale:
C#'da Sıra (Queue) Sınıfı ve kullanımı C#, Visual C# ve .NET Ahmet Faruk Nacaroğlu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|