Ana içeriğe atla

C++ ile Veri Yapıları

Bu yazımızda, bilgisayar dünyasının temel yapı taşı olan veri yapısı konusunu ele alacağız. Bu konu oldukça zor olmakla birlikte, gayet önemli ve eğlenceli yapıdır. Veri yapısını bilmek ve etkin kullanmak, hayatınızda yapacağınız projelerde size kolaylık sağlayacaktır. Veri yapısı genel olarak bakıldığınında hayatımızın her anında vardır. Konular ilerledikçe bu daha iyi anlaşılacaktır.

Veri yapısını tanımlamak gerekirse, bilgisayar ortamında verilerin etkin olarak saklanması ve işlenmesi için kullanılır. Veri yapıları, verilerin düzenlenme biçimini belirleyen yapıtaşlarıdır. Bir yazılım değişkeni bile basit bir veri yapısı olarak kabul edilebilir. Değişik algoritmalarda verilerin diziler, listeler, yığıtlar, kuyruklar, ağaçlar ve çizgeler gibi veri modellerine uydurularak düzenlenmesi gerekebilir. Veri, yapı ve algoritma bir yazılımın birbirinden ayrılmaz bileşenleridir. Algoritması hazırlanmış her yapı için verilerin düzenli bir şekilde kullanımı önemlidir. Çünkü yapı iyi kurulduğunda, etkin, doğru, anlaşılır ve hızlı çalışıp az kaynak kullanan algoritma geliştirmek kolaylaşır.

Veri yapısı konusunu daha iyi işleyebilmek için, bellek yönetimini de iyi bilmemiz gerekir. Ondan da kısaca bahsedip, bu yazımızı noktalayacağım. Öyleyse başlayalım. :)

Bellek Yönetimi   

Bilgisayar üzerinde bir veri yapısını gerçekleştirebilmek için bilgisayar belleğinin kullanımına ihtiyaç vardır. Çalışan herhangi bir programdaki değişkenler, sınıflar, metotlar mutlaka bellekte bir yerde tutulurlar. Bellekte tutuldukları yerler bakımından 3 farklı bölge bulunmaktadır.

  • Statik Bellek Bölgesi
  • Çalışma Anı Yığını
  • Heap Bellek Bölgesi

Statik Bellek Bölgesi, bu bölgede yer alacak değişkenler hangileri olduğu, daha program başlamadan bellidir. Bu bölgede: Global değişkenler, sabitler, static olarak tanımlanmış lokal değişkenler tutulurlar. Statik bellek bölgesinde tutulan değişkenler program çalıştığı sürece var olurlar, program sonlandığında bellekten silinirler.

Çalışma Alanı Yığını, En aktif bellek bölgesidir denilebilir. İsmini de oradan aldığı bu bellek bölgesi bir yığın(stack) şeklindedir ve bu yapıda çalışır. Bu yapıya ilk giren en son çıkar. Bir program çalıştığı sürece genişleyip daralan bitişik bir yapıya sahiptir. Bu bellek bölgesinde fonksiyon ve metot çağrımları ve bu fonksiyon ve metotların barındırdığı lokal değişkenler bulunur. Bir fonksiyon veya metot çağrıldığında bu fonksiyon veya metoda ait parametreler değişkenler ve dönüş değerleri bu bellek bölgesinde tutulur. Çalışma anı yığın bölgesi genişlemiş olur. Fonksiyon veya metot çağrılan yere döndüğünde bu fonksiyon veya metodun çalışma anı yığınında ayırmış olduğu yer geri döndürülür. Dolayısıyla geri döndürülen bu değişkenlere çağrım bittikten sonra erişim olamayacaktır.

Heap Bellek Bölgesi, Bu bellek bölgesi C ve C++ gibi programlama dillerinde dikkat edilmesi gereken çok önemli bir bölgedir. Çünkü C ve C++ gibi dillerde bu bölgenin kontrolü programcıya bırakılmıştır. Bu da demek oluyor ki eğer bu bölgenin kontrolü iyi sağlanmaz ise bellek taşması ya da yanlış değerlere erişim gibi problemler ile karşı karşıya kalınabilir. Bu bölgeye duyulan ihtiyacın nedeni, dinamik oluşturulan yapıların boyutları değişken olacak ve çalışma anında belirlenecektir. Dolayısıyla bu yapılar heap bellek bölgesinde tutulmalı, bu yapılara ve değişkenlere göstericiler yardımıyla erişilmelidir. Bu bellek bölgesinde tutulan bir değerin adı yoktur yani anonimdir ve ancak değerin bulunduğu adresi gösterecek bir gösterici yardımıyla erişilebilir. Heap bellek bölgesinde C++ programlama dilinde bir yer ayırmak için new operatörü kullanılır. new operatörü kullanan göstericinin tutulduğu yer çalışma anı yığınıdır. Gösterdiği adres ise heap bellek bölgesinde bulunur. new operatörü kullanmadan tanımlanan göstericiler heap bellek bölgesinden yer ayıramazlar. Bu bölgede ayrılan yer işi bittiğinde belleğe geri verilmelidir. Bu bölgenin kontrolü programcıda olduğu için eğer geri döndürülmez ise çöp dediğimiz durum oluşur. Hatırlanırsa bu bölgedeki adreslere çalışma anı yığınındaki göstericiler yardımıyla erişiliyordu. Dolayısıyla çalışma anı yığınındaki gösterici kaybedilmeden önce heap bellek bölgesinde ayrılan yer geri döndürülmelidir. Yoksa o bölge bilgisayar kapanıncaya kadar kullanılamaz duruma gelir.

Yorumlar

Bu blogdaki popüler yayınlar

Örnek Algoritmalar ve Örnek C++ Kodları

Örneklerimize bu başlığımız altında devam ediyoruz arkadaşlar. :) Yıl başına kadar C++ hakkında bildiğim tüm konuları ve yaptığım projeleri sizlerle paylaşacağım. Sorularınızı yorumlarda bekliyorum. Şimdiden kolay gelsin :) Algoritma 5: Yarıçapı klavyeden girilen kürenin yüzey alanını ve hacmini açıklayan algoritmanın C++ kodunu yazınız.(π=3) #include <iostream> using namespace std; int main() { float r,alan,hacim; cout<<“Yaricapi giriniz:”; cin>>r; alan=4*3*r*r; hacim=(4*3*r*r*r)/3; cout<<“Alan:”<<alan<<endl; cout<<“Hacim”<<hacim<<endl; } Algoritma 6: Katsayıları klavyeden girilen birinci dereceden denklemin kökünü bulan algoritmanın C++ kodunu yazınız. #include <iostream> using namespace std; int main() { int a,b,c,x; cout<<“Katsayilari giriniz:”; cin>>a>>b>>c; x=(c-b)/a; cout<<“Kok:”<<x; } Algoritma 7:Klavyeden yarıçapı ve dilim açısı girilen daire diliminin

Java SE ve Java EE Nedir?

En çok merak edilen karıştırılan hengisinden başlasam acaba gibi bir sürü sorulara neden olan Java SE ve Java EE tanımlarından aralarındaki farklardan bahsetmek istiyorum. Önce Java SE'den başlayalım; Java SE açılımı Java Standart Edition olan Java programlama dilini kullanan bir yazılım geliştirme paketidir. Java SE ile daha çok küçük uygulamalar geliştirilir. Java SE ile geliştirilen uygulamalar, Windows,Linux ve Mac gibi bir çok işletim sisteminde sorunsuz çalışır. Java EE ise açılımı Java Enterprise Edition olan web üzerinde kurumsal online uygulamalar geliştirmek, dağıtmak için Java tabanlı bağımsız bir platformdur. Java EE, Java SE üzerine inşaa edildiği için içerisinde birçok Java SE bileşeni barındırır. Java EE'de çok katmanlı web tabanlı uygulamalar geliştirmek için bir çok API'ler ve protokoller bulunur. Java EE standartlaştırılmış yapısıyla uygulama gelişimini basitleştirir ve öğrenimini kolaylaştırmaktadır. Eğer kurumsal yapılar üzerinde çalışıyorsanız, Ja