public void Push(Araba item) { if (items.Length == Top + 1) { throw new Exception("Hata: Stack doldu... (Overflow)"); } items[++Top] = item;//dizinin başından sonuna sırayla elemanlar dizilir }
public Araba Pop() { if (IsEmpty()) { throw new Exception("Hata: Stack boş...(Downflow)"); } Araba temp = items[Top--];//dizinin sonundan başına doğru tek tek elemanlar çıkarılır return(temp); }
private void btnArabaCikart_Click(object sender, EventArgs e) { string yaz = ""; Random rnd = new Random(); int randomSayi; int daireselKalan = 15; Araba temp = new Araba(); while (StackK.IsEmpty() == false || DaireselK.count != 0)//kuyruk boş olmadığı ve eleman sayısı 0 olmadığı sürece devam eder { randomSayi = rnd.Next(0, 2); if (KuyrukK.IsEmpty()) { break; } else if (randomSayi == 0) { if (StackK.IsEmpty() == false) //stack ta eleman bittiğinde hata vermemesi kontrolünü yapar { temp = KuyrukK.Remove(); //kuyrukta hala eleman varsa ve random değer 0 geldiyse eleman çıkarır KuyrukK.Insert(StackK.Pop()); //çıkan elemanı ilk kata ekler yaz += temp.katBilgisi + ". kattaki " + temp.arabaNumarasi + ". araba." + Environment.NewLine; } else { continue; } } else if (randomSayi == 1) { if (DaireselK.count != 0) { temp = KuyrukK.Remove();//orta katımızdan bir eleman çıkar KuyrukK.Insert(DaireselK.DeletePosition(Josephus(daireselKalan))); daireselKalan--; yaz += temp.katBilgisi + ". kattaki " + temp.arabaNumarasi + ". araba." + Environment.NewLine; } else { continue; } } } if (KuyrukK.IsEmpty() == false) { for (int i = 0; i < 15; i++) { temp = KuyrukK.Remove(); yaz += temp.katBilgisi + ". kattaki " + temp.arabaNumarasi + ". araba." + Environment.NewLine; } } txtCikanlar.Text = yaz; }
public void InsertLast(Araba Eklenen) { if (IsEmpty())//ilk deger eklenme işinin yapıldığı yer { Head = Eklenen; Last = Eklenen; Last.Next = Head; Head.Next = Last; } else { Last.Next = Eklenen; //birden fazla node için girilen else fonksiyonu Last = Eklenen; //yeni geleni sona ekleyerek son elemanın nex ini de head i göstererek döngüsel bir yapı oluşturulur Last.Next = Head; } count++; }
public void Insert(Araba A) { if (count == size) { throw new Exception("Queue dolu."); } if (front == -1)//ilk eklemede front 1 artar { front = 0; } if (rear == size - 1)//dizi tamamen dolduysa,doldurmaya dizinin başından devam edilir { rear = 0; Queue[rear] = A; } else { Queue[++rear] = A;//hala son kısımlarda boş yer var ise sırayla doldurmaya devam eder } count++; }
public Araba DeletePosition(int position)//gelen değere göre silme işlemi { Araba temp = new Araba(); Araba SilinenAraba = new Araba(); temp = Head; if (IsEmpty()) { throw new Exception("Hata: Dairesel bağlı liste boş..."); } else if (position == 0)//silinecek son eleman kaldıysa { if (count == 1) { count--; Head = null; Last = null; return(temp); } else { Last.Next = Head.Next; Head = Head.Next; count--; return(temp); } } else { for (int i = 0; i < position - 1; i++) //birden fazla silinecek varsa { temp = temp.Next; //gelen parametreye kadar listede dolaşılır } SilinenAraba = temp.Next; //silinecek eleman bir değişkende tutulur temp.Next = temp.Next.Next; //silinenin bir öncesi bir sonrasını gösterir ve dairesel yapısı korunmuş olur count--; return(SilinenAraba); } }
public Araba Remove() { if (IsEmpty()) { throw new Exception("Queue boş."); } Araba temp = Queue[front]; Queue[front] = null; //silme işlemi baştan yapılır if (front == size - 1) //dizinin son elemanında sonra hala silinecek değer var ise dizinin başına geri dönülür { front = 0; } else { front++; } count--; return(temp); }
private void btnArabaEkle_Click(object sender, EventArgs e) { string yaz = ""; for (int i = 1; i <= 15; i++) { Araba A = new Araba(); A.arabaNumarasi = i; A.katBilgisi = 0; Araba B = new Araba(); B.arabaNumarasi = i; B.katBilgisi = 1; Araba C = new Araba(); C.arabaNumarasi = i; C.katBilgisi = 2; yaz += A.katBilgisi + ". kattaki " + A.arabaNumarasi + ". araba." + Environment.NewLine; yaz += B.katBilgisi + ". kattaki " + B.arabaNumarasi + ". araba." + Environment.NewLine; yaz += C.katBilgisi + ". kattaki " + C.arabaNumarasi + ". araba." + Environment.NewLine; StackK.Push(A);//arabalar stack,kuyruk ve dairesel bağlı listelere doldrulur KuyrukK.Insert(B); DaireselK.InsertLast(C); } txtEklenenler.Text = yaz;//tüm eklenen arabalar textbox a yazdırılır }
private void btnBesSaniye_Click(object sender, EventArgs e) //programın 5 sn bekledikten sonra ortalama ne kadar problem çözeceğini ekrana gösterir { DateTime BaslangicZamani = DateTime.Now; //butona tıklandığı anki zamanı alır int cozumSayisi = 0; while (DateTime.Now.Second - BaslangicZamani.Second < 5)//şu anki ve butona tıklanan anki saniye 5 ten küçük oldukça çalıştırıcak { string yaz = ""; for (int i = 1; i <= 15; i++) { Araba A = new Araba(); A.arabaNumarasi = i; A.katBilgisi = 0; Araba B = new Araba(); B.arabaNumarasi = i; B.katBilgisi = 1; Araba C = new Araba(); C.arabaNumarasi = i; C.katBilgisi = 2; yaz += A.katBilgisi + ". kattaki " + A.arabaNumarasi + ". araba." + Environment.NewLine; yaz += B.katBilgisi + ". kattaki " + B.arabaNumarasi + ". araba." + Environment.NewLine; yaz += C.katBilgisi + ". kattaki " + C.arabaNumarasi + ". araba." + Environment.NewLine; StackK.Push(A); KuyrukK.Insert(B); DaireselK.InsertLast(C); } txtEklenenler.Text = yaz; yaz = ""; Random rnd = new Random(); int randomSayi; int daireselKalan = 15; Araba temp = new Araba(); while (StackK.IsEmpty() == false || DaireselK.count != 0) { randomSayi = rnd.Next(0, 2); if (randomSayi == 0) { if (StackK.IsEmpty() == false) { temp = KuyrukK.Remove(); KuyrukK.Insert(StackK.Pop()); yaz += temp.katBilgisi + ". kattaki " + temp.arabaNumarasi + ". araba." + Environment.NewLine; } else { continue; } } else if (randomSayi == 1) { if (DaireselK.count != 0) { temp = KuyrukK.Remove(); KuyrukK.Insert(DaireselK.DeletePosition(Josephus(daireselKalan))); daireselKalan--; yaz += temp.katBilgisi + ". kattaki " + temp.arabaNumarasi + ". araba." + Environment.NewLine; } else { continue; } } } for (int i = 0; i < 15; i++) { temp = KuyrukK.Remove(); yaz += temp.katBilgisi + ". kattaki " + temp.arabaNumarasi + ". araba." + Environment.NewLine; } txtCikanlar.Text = yaz; cozumSayisi++; } lblCozumMiktari.Text = cozumSayisi.ToString(); cozumSayisi = 0; }