Bu konu çok geniş ve önemli arkadaşlar elinizin altında bulunsun diye bir kaç seride bitirmeyi planlıyorum.
Yukarıda gördüğünüz [VeriTipi/Genişliği(Bit cinsinden)/Alabileceği min-max değer] tablosu temel konudur arkadaşlar.
ne nerede kullanılır bilmekte fayda var.
Örneğin;
Bir address tanımlayacağız. Adress 0'dan küçük bir değer olamayacaktır. bu yüzden unsigned int kullanmakta fayda vardır.
Peki;
Veri Yapıları Nelerdir ?
Veri yapıları üçe ayrılır;
Temel Yapılar=
Basit Yapılar=
Örneğin;
Birleşik Yapılar =
BELLEĞİN YAPISI
Yapısal olarak bellek, büyüklüğüne bağlı olarak binlerce, milyonlarca l’er Byte (8 Bit)’lik veriler saklayabilecek biçimde tasarlanmış bir elektronik devredir.
Her bir hücreyi birbirinden ayırmak için hücreler numaralarla adreslenir. Program, işlemci ve işletim sistemi bu adresleri kullanarak verilere erişir.
Ne demek bu dediğinizi duyar gibiyim^^, hemen açıklayayım.
Arkadaşlar hafızada her bir veri için bir alan belirlenir eğer int a; derseniz hafızada 8 byte değerinde bir yer ayırırsınız.
Hafızada bir kutu düşünün bu kutunun hafızada kapladığı alan 8 byte.
Değeri: a.
Tutulduğu adres : 0xF4F4
Evet arkadaşlar addressler hexadecimal(16'lık) biçimde ifade edilir.
Stack Nedir ?
Abstract Data Type(Soyut Veri Tipleri) arasında yer alır.
Tek taraflı giriş ve çıkışlara açık olan. İlk giren son çıkar mantığı hakimdir.
Diğer bir adıyla;
LIFO (Last in First Out)
Temelde üç farklı fonsiyonu vardır;
Temel olarak stack, bir
Peki nedir bu array ve Linked List ?
Array bildiğiniz gibi dizi demektir.
Linked List ise arkadaşlar basitçene şöyle anlatayım.
Yukarıda gördüğünüz tablo;
Herhangi bir tipten düğümleri,yine kendi tipinden olan düğümleri işaret etmesi oluşan zincirdir.
bakın 12 değeri bir "root", başlangıç, ve bu başlangıç nodunu tutan bir pointer var. hemen yanındaki kutu
aynı şey 99 da da var arkadaşlar fark edeceğiniz üzere.
Burada Array yerine bağlı liste kullanmamızın avantajı hafızayı dinamik bir şekilde kullanıyor olmasıdır.
Yani şöyle;
Hafızaya eklenen kadar yer açar silinen kadar yer siler ^^.
Bakınız başka bir örnekle anlatmaya çalışayım..
Bilgisayar belleği doğrusaldır.
Bilgiler sıra sıra hücrelere saklanır.
Her bir bilgiye daha kolay ulaşmak için bunlara numara verilir ve her birine node adı verilir.
Data alanı, numarası verilen node’da tutulacak bilgiyi ifade eder.
Next (link) alanı ise bir node’dan sonra hangi node gelecekse o node’un bellekteki adresi tutulur.
Peki bu Stackler nerelerde kullanılıyor ?
- (, {, [, ], }, ) ayıraçlarının C/C++ derleyicisinin kontrollerinde,
- postfix → infix dönüştürmelerinde,
- Yazılım uygulamalarındaki Parsing ve Undo işlemlerinde,
- Web browser’lardaki Back butonu (önceki sayfaya) uygulamasında,
- Ayrıca, mikroişlemcinin içyapısında stack adı verilen özel hafıza alanı ile mikroişlemci arasında, bazı program komutları ile (push ve pop gibi), bir takım işlemlerde (alt program çağırma ve kesmeler gibi), veri transferi gerçekleştirmede.
Stack Vs Heap
Arkadaşlar daha öncede değindiğim gibi yazdığınız kodlar hafızada yer kaplar. Eğer program esnasında boyutları bildirilmiş değişmez bir değer kullanıyorsak stack kullanmalıyız.
Ancak değişebilir bir değer kullanmak istiyorsak Heap kullanmalıyız.
Stack kullanılır ve işi bittikten sonra kendini otomatik olarak bellekten yok eder.
Fakat arkadaşlar Heap te bu işi siz yapmalısınız
Stack'ın heapa göre tercih edilmesinin en büyük sebeplerinden biride hızdır.
Ayrıca stack derlendiği esnada oluşur ve daha sonra kendini siler.
Şimdilik bu kadar yeter umarım faydalı olmuştur Teşekkürler ^^
Yukarıda gördüğünüz [VeriTipi/Genişliği(Bit cinsinden)/Alabileceği min-max değer] tablosu temel konudur arkadaşlar.
ne nerede kullanılır bilmekte fayda var.
Örneğin;
Bir address tanımlayacağız. Adress 0'dan küçük bir değer olamayacaktır. bu yüzden unsigned int kullanmakta fayda vardır.
Peki;
Veri Yapıları Nelerdir ?
Veri yapıları üçe ayrılır;
- TEMEL YAPILAR
- BASİT YAPILAR
- BİRLEŞİK YAPILAR
Temel Yapılar=
- integer
- char
- float
- boolean
Basit Yapılar=
- array
- string
- structure
- union
Örneğin;
C++:
struct ad{
int yas;
char ad[ ];
}kayit;
Birleşik Yapılar =
- Doğrusal(Linear)
- Doğrusal Olmayan(Non-Lınear)
- Stack
- Queue
- Tree
- Graph
BELLEĞİN YAPISI
Yapısal olarak bellek, büyüklüğüne bağlı olarak binlerce, milyonlarca l’er Byte (8 Bit)’lik veriler saklayabilecek biçimde tasarlanmış bir elektronik devredir.
Her bir hücreyi birbirinden ayırmak için hücreler numaralarla adreslenir. Program, işlemci ve işletim sistemi bu adresleri kullanarak verilere erişir.
Ne demek bu dediğinizi duyar gibiyim^^, hemen açıklayayım.
Arkadaşlar hafızada her bir veri için bir alan belirlenir eğer int a; derseniz hafızada 8 byte değerinde bir yer ayırırsınız.
Hafızada bir kutu düşünün bu kutunun hafızada kapladığı alan 8 byte.
Değeri: a.
Tutulduğu adres : 0xF4F4
Evet arkadaşlar addressler hexadecimal(16'lık) biçimde ifade edilir.
Stack Nedir ?
Abstract Data Type(Soyut Veri Tipleri) arasında yer alır.
Tek taraflı giriş ve çıkışlara açık olan. İlk giren son çıkar mantığı hakimdir.
Diğer bir adıyla;
LIFO (Last in First Out)
Temelde üç farklı fonsiyonu vardır;
- Push -> Stack içerisine bir bilgi koymaya (Stack’in en tepesine koyar)
- Pop -> Stack içerisinden bir bilgi almaya (Stack’in en tepesinden alır)
- Top -> Stack’in en tepesindeki bilgiyi alır ancak stackten çıkartmaz sadece okur
Temel olarak stack, bir
Bağlantıları görmek için lütfen
Giriş Yap
veya
Bağlantıları görmek için lütfen
Giriş Yap
üzerine inşa edilebilirler.Peki nedir bu array ve Linked List ?
Array bildiğiniz gibi dizi demektir.
Linked List ise arkadaşlar basitçene şöyle anlatayım.
Yukarıda gördüğünüz tablo;
Herhangi bir tipten düğümleri,yine kendi tipinden olan düğümleri işaret etmesi oluşan zincirdir.
bakın 12 değeri bir "root", başlangıç, ve bu başlangıç nodunu tutan bir pointer var. hemen yanındaki kutu
aynı şey 99 da da var arkadaşlar fark edeceğiniz üzere.
Burada Array yerine bağlı liste kullanmamızın avantajı hafızayı dinamik bir şekilde kullanıyor olmasıdır.
Yani şöyle;
Hafızaya eklenen kadar yer açar silinen kadar yer siler ^^.
Bakınız başka bir örnekle anlatmaya çalışayım..
struct node { int data; struct node *next; }; Bilgisayar belleği doğrusaldır.
Bilgiler sıra sıra hücrelere saklanır.
Her bir bilgiye daha kolay ulaşmak için bunlara numara verilir ve her birine node adı verilir.
Data alanı, numarası verilen node’da tutulacak bilgiyi ifade eder.
Next (link) alanı ise bir node’dan sonra hangi node gelecekse o node’un bellekteki adresi tutulur.
Peki bu Stackler nerelerde kullanılıyor ?
- (, {, [, ], }, ) ayıraçlarının C/C++ derleyicisinin kontrollerinde,
- postfix → infix dönüştürmelerinde,
- Yazılım uygulamalarındaki Parsing ve Undo işlemlerinde,
- Web browser’lardaki Back butonu (önceki sayfaya) uygulamasında,
- Ayrıca, mikroişlemcinin içyapısında stack adı verilen özel hafıza alanı ile mikroişlemci arasında, bazı program komutları ile (push ve pop gibi), bir takım işlemlerde (alt program çağırma ve kesmeler gibi), veri transferi gerçekleştirmede.
Stack Vs Heap
Arkadaşlar daha öncede değindiğim gibi yazdığınız kodlar hafızada yer kaplar. Eğer program esnasında boyutları bildirilmiş değişmez bir değer kullanıyorsak stack kullanmalıyız.
Ancak değişebilir bir değer kullanmak istiyorsak Heap kullanmalıyız.
Stack kullanılır ve işi bittikten sonra kendini otomatik olarak bellekten yok eder.
Fakat arkadaşlar Heap te bu işi siz yapmalısınız
Stack'ın heapa göre tercih edilmesinin en büyük sebeplerinden biride hızdır.
Ayrıca stack derlendiği esnada oluşur ve daha sonra kendini siler.
Şimdilik bu kadar yeter umarım faydalı olmuştur Teşekkürler ^^
Moderatörün son düzenlenenleri: