You are on page 1of 6

1.

Yn veri Yapsnn alma ekli


Ynlar genelde ayn tipten verilerin tutulduu ve Son Giren lk kar (LIFO) alma mantn kullanan veri yaplar olarak tanmlanr. Bir yna en son giren eleman ilk olarak kar. Ynlar anlatrken en ok st ste konmu tabaklar veya herhangi bir nesne grubunda ok kullanlana benzetirler. Mesela bir masann stnde sra ile st ste konmu birden fazla tabaktan birisine ihtiyacmz olursa nce en sttekini alrz. Bu aldmz tabaklarn en son konulandr. Ynlarn alma prensibini daha iyi kavramak iin yandaki canladrmay inceleyelim. Canlandrmada ynn dnda bulunan saylar ynn iine koymak iin "Yn Doldur" dmesine tkladmzda sras ile 17, 23, 4, 55 ve 8'i yna sokuyor. Yn doluyken "Yn Boalt" dmesine tklaynca ise yndaki saylarn yerletirildikleri srann tersi sra ile boaltr. Bu durumda en son giren 8 says ilk nce, sonra 55, sonra 4 ve bu sra ile en son 17 says yndan dar kar.

. .NET Snf Ktphanesi Yn Snf (Stack)


.NET snf ktphanesinde yn veri yapsn kullanmak iin Stack snfn kullanrz. Normalde C ve C++ dillerinde yn veri yapsn deiik veri trleri ve kendi tanmladmz snflarla birlikte kullanmak zahmetli bir iti. (C'de snf kavram yoktur!) Ama .NET ortamnda ynlarmz bize birok konuda esneklikler sunarak programlamay daha zevkli ve verimli hale getiriyor. .NET'in yn (Stack) snfn kullanmak iin program kodunun ba tarafna using System.Collections; eklememiz gerekir. Buradan yn snf System.Collections isim alannda bulunuyor sonucunu da kartrz. C# veya herhangi bir dilde yazlan yn veri yaplarnda Push(), Pop(), Peek() veya Top(), Clear() fonksiyonlar ve Count, zellii temel olarak bulunur. Temel fonksiyonlarn yannda Clone(), CopyTo(), ToArray(), Contains() ve Equals() metodlar .NET'in yn snfnda yeralr. Yn snfnn Push() metodu yna yeni bir eleman ekler. Pop() metodu ile ynn en stndeki eleman yndan siler ve silinen eleman geriye dndrr. Eer ynn tepesindeki eleman renmek istersek Peek() medodu iimize yarar. Bu metod ynn tepesindeki nesneyi dndrr ama bu nesneyi yndan silmez.

using System; using System.Collections; // Stack snf bu isim alan iinde bulunur. class YiginSinifi1 { public static void Main(string[] args) {

// Stack snfndan yigin nesnemizi tanmlyoruz. Stack yigin = new Stack(); // Yigini deiik deerlerde dolduruyoruz.. yigin.Push(12); yigin.Push(5); yigin.Push(23); yigin.Push(34); yigin.Push(70); yigin.Push(8); Console.WriteLine("Ymzn ilk hali..."); ElemanlariYaz(yigin); // Yigininin tepesinden bir say aldk // ve bunu sayi deikenine atayp ekrana yazdralm int sayi = (int) yigin.Pop(); Console.WriteLine("\n Yndan {0} saysn aldk", sayi); // Yigininin tepesinden bir say daha aldk // ve bunu sayi deikenine atayp ekrana yazdralm sayi = (int)yigin.Pop(); Console.WriteLine("\n Yndan {0} saysn aldk", sayi); // imdi ise Yigininin tepesindeki sayya bir bakalm // bu sayy yndan karmyoruz.. Sadece ne olduuna bakyoruz.. sayi = (int) yigin.Peek(); Console.WriteLine("\n Ynn tepesindeki say u anda : {0}", sayi); Console.ReadLine(); } public static void ElemanlariYaz(Stack yigin) { object obj = new Object(); Stack yeniYigin = (Stack)yigin.Clone(); if(yigin.Count!=0) { while(yeniYigin.Count>0) { obj = yeniYigin.Pop(); Console.WriteLine("\t"+ obj.ToString()); } } else Console.WriteLine("Yn bo...!"); } }

Yukardaki programda nce Stack snfndan yigin isimli bir nesne oluturuyoruz. Sonraki alt satrda ynmza 12, 5, 23, 34, 70 ve 8

tamsaylarn Push() metodu ile ekliyoruz. EkranaYaz() ismini verdiimiz static fonksiyonumuz (bu fonksiyon tam olarak optimize edilmi bir fonksiyon deil! ) ile ynmzda bulunan elemanlar ekrana yazdryoruz. Daha sonra yndan iki tane eleman Pop() metodu yardmyla alyor ve herbirini ekrana yazdryoruz. Programn son ksmnda ise Peek() metodunu kullanarak ynn en stndeki elemann ne olduunu reniyoruz. Yn snflarnda bulunan dier iki temel fonksiyonlar olan Count zellii ve Clear() metodlardr. Bunlardan Count, yn nesnesinde bulunan elemanlarn saysn geriye dndren bir zelliktir. zellikler C# dilinde snflarda bulunan ye deikenlerin deerlerini renmemize ve onlarn deerlerini deitirmemize yarayan bir tr fonksiyonlardr. Count zellii eleman saysn int tipinde dndrr ve sadece okunabilen (readonly) yapdadr. zellikler program iinde arlrken parantezleri kullanmayz. Eer yigini boaltmak/temizlemek istersek Clean() metodu iimizi yarayacaktr. Clean() metodu hibir parametre almaz ve hibir ey dndrmez. Herhangi bir yn nesnesinin iinde bir elemann olup olmadn anlamak iin Contains() metodu kullanlr. Bu metod aranacak nesneyi alr ve geriye true veya false deerlerini dndrr. sterseniz aadaki programda Contains() ve Clear() metodlar ile Count zelliklerini nasl kullanabileceimizi grelim:

using System; using System.Collections; // Stack snf bu isim alan iinde bulunur. class YiginSinifi1 { public static void Main(string[] args) { // Stack snfndan yigin nesnemizi tanmlyoruz. Stack yigin = new Stack(); // Ynmza yeni elemanlar ekliyoruz. yigin.Push("Ahmet"); yigin.Push("Sefer"); yigin.Push("Cemal"); yigin.Push("Onur"); yigin.Push("Aziz"); // Ynda ka tane eleman bulunduunu bulup yazalm. int elemanSayisi= yigin.Count; Console.WriteLine("\nYnmzdaki eleman says: {0}", elemanSayisi); // Yndaki elemanlar. Console.WriteLine("\nYndaki elemanlar: "); ElemanlariYaz(yigin); //Contains() metodunun kullanm: if(yigin.Contains("Sefer")) Console.WriteLine("\nYnda Sefer eleman var..."); else

Console.WriteLine("\nYnda Sefer eleman yok..."); // Yn boaltalm. yigin.Clear(); // Yn boalttktan sonra ka tane eleman bulunduunu bulup yazalm. elemanSayisi= yigin.Count; Console.WriteLine("\nYnmzdaki eleman says: {0}", elemanSayisi); Console.ReadLine(); } public static void ElemanlariYaz(Stack yigin) { object obj = new Object(); Stack yeniYigin = (Stack)yigin.Clone(); if(yigin.Count!=0) { while(yeniYigin.Count>0) { obj = yeniYigin.Pop(); Console.WriteLine("\t"+ obj.ToString()); } } else Console.WriteLine("Yn bo...!"); } }

Hemen stteki programdan nceki programda ynmza int tipinden nesneler (c#'ta primitive trler dahil herey nesnedir!) yerletirmitik. Bu rnekte ise string snfna ait nesneleri ynmza ekledik ve onlar zerinde ilemler yaptk. Yani yn snfmz herhangi bir nesneyi tutabilecek yetenekler sabit. ster temel veri trleri olsun (int, byte, double veya bool) ister kendi tanmladmz veri trleri olsun yn snfmza ekleyip kartabiliriz. Yukardaki programda yigin olarak oluturduumuz ve yn snfndaki nesnemize be tane veriyi ekliyoruz. Sonra ynda ka tane eleman olduunu bulmak iin Count zelliinden faydalanyoruz. Yndaki elemanlar yazdrmak iin ElemanlariYaz() sabit fonksiyonumuzu kullanyoruz. Contains() metodunu kullanmna rnek olmas amacyla if deyimi iinde yigin.Contains("Sefer") sorgusunu yapyoruz. Eer Sefer eleman ynda mevcutsa ekrana ynda olduunu, yoksa ynda olmadn yazdryoruz. Programn geriye kalan ksmnda yn boaltmak iin Clear() metodunu kullanyoruz,yndaki eleman saysn tekrar bulup bunu yazdryoruz. Eer tekrar ElemanlariYaz() fonksiyonunu kullansaydk. "Yn Bo..!" uyarsn alrdk! .NET snf ktphanesinde bulunan Yn (Stack) snfnn getirdii kolaylklar yukardakilerden daha fazladr. Mesela herhangi bir yn nesnemizi baka bir ynn iine kopyalayabiliriz. Bir yn baka bir yna

kopyalamak iin Clone() metodunu kullanabiliriz. Ayrca bir yn nesnesini herhangi bir dizinin iine kopyalamak iin ToArray() metodu kullanlabilir. ki tane ynn birbirlerine eit olup olmadn renmek iin Equals() metodu hemen yardmmza yetiir. Burada unu belirtmekte yarar var: Equals() metodu sanal (virtual) bir fonksiyon olup c#'daki tm nesnelerin tredii System.Object nesnesine aittir. Bu makalede inceleyeceimiz son program aadadr. Bu programla Clone(), Equals() ve ToArray() metodlarn programlarmz iinde ne ekilde kullanacamz renebiliriz. using System; using System.Collections; // Stack snf bu isim alan iinde bulunur. class YiginSinifi1 { public static void Main(string[] args) { // Stack snfndan yigin nesnemizi tanmlyoruz. Stack yigin1 = new Stack(); // Ynmza yeni elemanlar ekliyoruz. yigin1.Push("Ahmet"); yigin1.Push("Sefer"); yigin1.Push("Cemal"); yigin1.Push("Onur"); yigin1.Push("Aziz"); //kinci ynmz tanmlyor ve yigin1'in // bir kopyasn yigin2'ye koyuyoruz.. Stack yigin2= (Stack)yigin1.Clone(); // yigin1'den bir eleman kartyoruz. yigin1.Pop(); //yigin1 ve yigin2 nesnelerimizin en stteki // elemanlarna bir bakalm: Console.WriteLine(" Peek of Yn2: "+ yigin2.Peek()); Console.WriteLine(" Peek of Yn1: "+ yigin1.Peek()); //yigin1 ve yigin2 eit mi? Bir bakalm: Console.WriteLine("\n yigin1 ve yigin2 eit? --> "+ yigin1.Equals(yigin2)); //yigin2'yi kopyalamak iin yeni bir dizi oluturalm: Array arr = new Array[5]; // yeni oluturduumuz diziye yigin2'yi kopyalayalm: arr = yigin2.ToArray(); // arr nesnesinin elemanlar: Console.WriteLine( "\n\n arr nesnesinin elemanlar:\n"+ "\n\t"+arr.GetValue(0)+ "\n\t"+arr.GetValue(1)+ "\n\t"+arr.GetValue(2)+

"\n\t"+arr.GetValue(3)+ "\n\t"+arr.GetValue(4) ); Console.ReadLine(); } public static void ElemanlariYaz(Stack yigin) { object obj = new Object(); Stack yeniYigin = (Stack)yigin.Clone(); if(yigin.Count!=0) { while(yeniYigin.Count>0) { obj = yeniYigin.Pop(); Console.WriteLine("\t"+ obj.ToString()); } } else Console.WriteLine("Yn bo...!"); } }

Yazmzda bilgisayar programlama alannda en nemli veri yaplarndan biri olan ynlarn (Stack) nasl altklarn ve .NET snf ktphanesinde bulunan Stack snfn ve metodlarnn nasl iimize yarayacak ekilde kullanabileceimizi rendik. Umarm bu yaznn size gerek manada yarar olur.

You might also like