![]() |
|
| |||||||
|
| WebMasTer SiTeSi |
| | Seçenekler |
|
#1
| |||
| | |||
Stack ve Queue Sınıflarının Kullanılması - 1Programcılıkta, grup halindeki veriler, bellekte çeşitli biçimlerde saklanır ve işlenirler. Verilerin bu şekilde gruplanarak saklanması ve işlenmesi, farklı veri yapıları ve algoritmaların tasarımını zorunlu hale getirmiştir. Bu terimleri kısaca açıklamak gerekirse, veri yapısı; verinin bellekte nasıl saklanacağını tanımlayan kavram, algoritma ise; bu verilerin işlenme şeklini tanımlayan kavramdır. Bu ve bu makalenin devamı niteliğinde olan ikinci makalede .NET 'teki Stack ve Queue sınıflarını inceleyeceğiz. Queue (Kuyruk) Veri Yapısı Kuyruk sistemleri, programcılıkta; bellekteki ardışıl dizilmiş elemanlar üzerinde, sıralı işlemlerin yapılmasının gerektiği durumlarda sıkça kullanılmaktadır. Bu anlamda, kuyruk yapısını kabaca dizi yapısına benzetebiliriz. Ancak bildiğiniz gibi dizilerde; aradaki bir elemana indisi yada adresi kullanılarak erişmek, yada bir takım öteleme yöntemlerini kullanarak araya eleman eklemek gibi işlemleri gerçekleştirmek mümkündür. Ancak kuyruk sistemleri, dizilerden farklı olarak; FIFO (First In First Out) ilkesine göre çalışan veri yapılarıdır. FIFO ilkesine göre; kuyruğa ilk giren eleman ilk çıkar, son giren eleman ise son çıkar. Bu nedenle dizilerde yapılabilen işlemler kuyruk sistemlerinde kısıtlanmıştır. Ayrıca kuyruk sistemlerinde; dizilerde olduğu gibi elemanların aynı veri türünde olması zorunluluğu da yoktur. Aşağıda elemanların kuyruğa giriş ve çıkışları gösterilmiştir. Queue Sınıfı .NET Framework class library 'de; kuyruk veri yapısının oluşturulması ve işlenmesi amacı ile tasarlanmış "Queue" isimli bir sınıf bulunmaktadır. Bu sınıf; programcıyı bir takım aşağı seviyeli işlemleri yapma zahmetinden kurtararak, kolay bir şekilde, kuyruk yapısı oluşturma ve bu yapı üzerinde çeşitli işlemleri gerçekleştirme amacı ile tasarlanmıştır. Kuyruğun Oluşturulması Bir kuyruk yapısı üzerinde çalışabilmek için, öncelikle bellekte öngörülen sayıdaki elemana uygun büyüklükte bir alanın tahsis edilmesi gerekir. Bu işlem Queue sınıfının constructor 'ı kullanılarak, nesne türetildiğinde otomatik olarak gerçekleştirilmektedir. Ayrıca constructor; başlangıçta öngörülen eleman sayısından daha fazla sayıda elemanın kuyruğa eklenmesi durumunda oluşan taşma hatalarının önüne geçme amaçlı olarak, kuyruk boyutunu otomatik büyütme özelliğine sahiptir. Queue sınıfına ait, constructor 'ın (New metodunun) 4 farklı overload versiyon bulunmaktadır; Public Sub New() Bu versiyon kullanılarak türetilen bir Queue nesnesi, bellekte default olarak belirlenmiş büyüklük (32 eleman) ve büyüme faktörüne (2) sahip bir kuyruk yapısını oluşturur. Public Sub New(ByVal capacity as integer) Bu versiyon kullanılarak türetilen bir Queue nesnesi, bellekte, fonksiyonun parametresinde belirlenen büyüklükte bir kuyruk yapısını oluşturur. Bu durumda büyüme faktörü ise yine default değer olan (2) olacaktır. Public Sub New(ByVal capacity as integer, ByVal growFactor as single) Bu versiyon kullanılarak türetilen bir Queue nesnesi, bellekte, fonksiyonun ilk parametresinde belirtilen büyüklük ve ikinci parametresinde belirtilen büyüme faltörüne sahip bir kuyruk yapısı oluşturur. Bu sayede kuyruğa öngörülen sayıdan fazla eleman eklenmesi durumunda kuyruğun büyüklüğü; 2 . parametrede belirtilen değerle, ilk parametredeki değerin çarpımı kadar, otomatik arttırılır. Public Sub New(ByVal col as ICollection) Bu versiyon kullanılarak türetilen bir Queue nesnesi, fonksiyonun parametresinde belirlenen collection'ın elemanlarını kopyalarak, bir kuyruk yapısı oluşturur. Kuyruk Sistemi Üzerinde İşlemler Kuyruk sistemi üzerinde eleman ekleme, silme, bulma gibi işlemler Queue sınıfına ait üyeler kullanılarak gerçekleştirilir. Enqueue() Metodu : Kuyruğun sonuna, parametresinde belirtilen elemanı ekler. Public Overridable Sub Enqueue(ByVal obj as Object) Dequeue() Metodu : Kuyruğun başındaki (ilk) elemanını siler. Geri dönüş değeri sildiği elemandır. Public Overridable Function Dequeue() As Object Peek() Metodu : Kuyruğun başındaki (ilk) elemanını döndürür. Public Overridable Function Peek() As Object Contains Metodu : Kuyrukta bir elemanın yer alıp almadığı araştırılacaksa bu fonksiyon kullanılır. Parametresi araştırılacak elemandır. Elaman kuyrukta varsa fonksiyon true ile, yoksa false ile döner. Not : Bu metot kuyruk üzerinde lineer search işlemi gerçekleştirdiği için ortalama çalışma süresi kuyruktaki eleman sayısı ile orantılıdır. Public Overridable Shadows Function Contains(ByVal obj As Object) As Boolean Clear() Metodu : Bu metot kuyrukta bulunan tüm elemanları silerek, eleman sayısını sıfır değerine set eder. Public Overridable Sub Clear() TrimToSize() Metodu : Kuyruğun boyutlarını güncel eleman sayısına göre minimize eder. Overridable Public Sub TrimToSize() ToArray() Metodu : Bu metot kuyruk'ta bulunan tüm elemanları tek boyutlu bir diziye kopyalar. Fonksiyonun dönüş değeri Array türünden nesne referansıdır ve dizi nesnesi türetme amacı ile kullanılır. Overridable Public Function ToArray() As Object Count Property 'si : Kuyruktaki eleman sayısını tutar. Örnek : Aşağıdaki örnekte Queue sınıfının kullanımı örneklenmiştir. Sub Main() Dim i As Integer Dim oQue As Queue = New Queue() 'Kuyruğa eleman ekleme oQue.Enqueue("1. Eleman") oQue.Enqueue("2. Eleman") oQue.Enqueue("3. Eleman") 'Kuruktaki elemanları diziye kopyalama Dim oDizi As Array = oQue.ToArray() 'Dizi elemanlarının görüntülenmesi Console.WriteLine("-----------") For i = 0 To oDizi.Length - 1 Console.WriteLine(oDizi(i)) Next 'Kuyruktan eleman silme oQue.Dequeue() oDizi = oQue.ToArray() 'Dizi elemanlarının yeniden görüntülenmesi Console.WriteLine("-----------") For i = 0 To oDizi.Length - 1 Console.WriteLine(oDizi(i)) Next End Sub |
![]() |
| Arama Etiketleri: kullanilmasi, queue, siniflarinin, stack |
| Seçenekler | |
| |
Benzer Konular | ||||
| Konu | Konu Açanlar | Forum | Cevaplar | Güncel Mesajlar |
| Queue (Mail) nedir? anlamı | MaNeX | Webmaster Sözlügü | 0 | 26-02-2008 07:57 |
| Sınıfların kullanılması, sitil sınıfı oluşturmak,istediğiniz bölüme bu sitilleri uygulamak | kadınca | Web Dersleri | 0 | 12-02-2008 09:31 |
| Java'da LIFO Stack Yapısı | miguel | Java | 0 | 04-02-2008 04:20 |
| Stack ve Queue Sınıflarının Kullanılması - 2 | B737 | .NET programcılığı | 0 | 24-01-2008 01:56 |
| Video Ekleme Tagının VBulletin forumuna eklenmesi ve kullanılması | tarantino | Vbulletin | 0 | 12-12-2007 02:34 |
![]() |