C# Queue ve Stack Koleksiyonları – Web Tasarım & Programlama
Bu dersimizde C# Koleksiyonlarından olan Queue ve Stack koleksiyonlarını inceleyeceğiz.
Queue Koleksiyonu ile başlayalım. Queue kelimesi kuyruk anlamına gelir. FIFO (First In First Out) yani ilk giren ilk çıkar işleyişine göre çalışan bir koleksiyondur.
Bu işlemi günlük hayattan örnekleyecek olursak bankaları verebiliriz. İnsanlar bir bankaya gittiğimizde sıra numarası almaktadır. İşlem yapılmak için çağırılan kişi numarayı önce alan kişi olacaktır.
Queue koleksiyonundaa ekleme ve çıkarma yapmak için 2 metot bulunmaktadır.
Enqueue() metodu kuyruğun sonuna bir eleman ekler.
Dequeue() metodu kuyruğun başındaki elemanı çıkarır.
Queue sınıfı, IEnumerable, ICollection ve ICloneable arabirimlerini uygular.
Listeye bir öğe eklediğinizde buna kuyruğa alma (Enqueue) denir.
Bir öğeyi kaldırdığınızda, buna kuyruktan çıkarma (Dequeue) denir.
Kuyruk, referans türleri için null değerini geçerli bir değer olarak kabul eder.
Öğeler bir Kuyruğa eklendikçe, dahili dizinin yeniden tahsis edilmesiyle kapasite gerektiği gibi otomatik olarak artırılır.
Sırada, yinelenen öğeleri saklamanıza izin verilir.
Kuyruğun kapasitesi, Kuyruğun tutabileceği öğe sayısıdır.
Şimdi Queue koleksiyonu ile ilgili örneğimize geçelim.
Örneğimizde Sıra Al ve Çağır butonları bulunmaktadır.
Şimdi kodlarımızı yazalım. İlk olarak projemize System.Collections namespace’ ini dahil ediyoruz.
using System.Collections;
using System.Collections;
|
Diğer kodlarımız ise aşağıdaki gibi olacaktır.
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace queueOrnek
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void Listele()
{
listBox1.Items.Clear();
foreach (int item in kuyruk)
{
listBox1.Items.Add(item);
}
}
Queue kuyruk = new Queue();
int sira = 0;
private void btnSiraAl_Click(object sender, EventArgs e)
{
sira++;
kuyruk.Enqueue(sira);
Listele();
}
private void btnCagir_Click(object sender, EventArgs e)
{
var a = kuyruk.Dequeue();
label1.Text = a.ToString();
Listele();
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace queueOrnek { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void Listele() { listBox1.Items.Clear(); foreach (int item in kuyruk) { listBox1.Items.Add(item); } }
Queue kuyruk = new Queue(); int sira = 0; private void btnSiraAl_Click(object sender, EventArgs e) { sira++; kuyruk.Enqueue(sira); Listele(); }
private void btnCagir_Click(object sender, EventArgs e) { var a = kuyruk.Dequeue(); label1.Text = a.ToString(); Listele(); } } }
|
Ekran Çıktısı:
Şimdi diğer benzer bir koleksiyon olan Stack koleksiyonuna geçelim. Stack kelimesi yığın anlamına gelir. Queue koleksiyonundan farklı olarak LIFO (Last In First Out) yani son giren eleman ilk çıkar işleyişine sahiptir. Koleksiyondan bir eleman çıkarıldığında bu son eleman olacaktır.
Stack işleyişine günlük hayattan bir örnek vermek gerekirse bir çok programda bulunan Geri Al butonunu gösterebiliriz. Yapılan işlemler uygulama tarafından hafızaya alınmaktadır.
Geri Al butonuna basıldığında ise son yapılan için geri alma işlemi yapılmaktadır. Geri alma işlemine devam edildiğinde ise geri alma işi son yapılandan başa doğru devam edecektir.
Stack koleksiyonunda ekleme ve çıkarma işlemi için aşağıdaki metotlar kullanılmaktadır.
Push() metodu koleksiyona bir değer ekler.
Pop() metodu koleksiyona eklenen son elemanı çıkarır.
Örneğimize geçelim.
C# Kodları:
using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace stack_ornek
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Stack yigin=new Stack();
int sayac = 0;
void Listele()
{
listBox1.Items.Clear();
foreach (var item in yigin)
{
listBox1.Items.Add(item);
}
}
private void btnEkle_Click(object sender, EventArgs e)
{
sayac++;
yigin.Push(sayac);
Listele();
}
private void btnCikar_Click(object sender, EventArgs e)
{
yigin.Pop();
Listele();
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace stack_ornek { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
Stack yigin=new Stack(); int sayac = 0;
void Listele() { listBox1.Items.Clear(); foreach (var item in yigin) { listBox1.Items.Add(item); } } private void btnEkle_Click(object sender, EventArgs e) { sayac++; yigin.Push(sayac); Listele(); }
private void btnCikar_Click(object sender, EventArgs e) { yigin.Pop(); Listele(); } } }
|
Source link