Bir veri yapısı oluşturulurken belleğe(RAM) ihtiyaç duyulur. C ve C++ gibi dillerde bellek yönetimi programcının elindedir. Çalışan herhangi bir programda değişkenler ve metotlar bellekte tutulur. Bu veriler bellekte statik bellek bölgesi, run time stack ve heap bellek bölgesi olmak üzere üç farklı yerde tutulabilirler. Bu yazıda heap bellek bölgesinden bahsedeceğim.

      Heap; yönetimi kullanıcının elinde olan bir bölgedir. Bir program için bellek gereksinimleri çalışma anında belirlenebilir. Böyle bir durumda programların dinamik olarak bellek tahsis etmesi gerekir. İstendiği zaman yer tahsis edilip, boşaltılabilen bu bellek bölgesine heap denir. Burada oluşan nesneler pointer’lar ile işaret edilir. Buradan yer ayırmak için C dilinde malloc , C++ dilinde new kelimesi kullanılır. Bu ayrılan yerleri belleğe geri döndürmek için C dilinde free, C++ dilinde delete kullanılır. Bu adreslere erişmek için bu adreslerin tutulduğu pointer’lara ihtiyaç vardır. Kullanılan bellek bölgesi ile iş bittikten sonra o bölge boşaltılmalıdır. Boşaltılmazsa garbage denilen çöp durumu oluşur.

      Aşağıdaki yazmış olduğum örnekte dizinin boyutu için heap bellek bölgesinden yer ayrılmıştır. Kullanıcı dizinin kaç elemanlı olacağını dinamik olarak belirtir ve buna göre diziye eleman eklenir. Bu uygulama bu dizideki elemanları küçükten büyüğe sıralamayı sağlıyor.

#include<iostream>
using namespace std;
int main()
{
int size;
int element;
int minimum;
int i=0;
int j=0;
int k=0;
int l=0;

cout << "Eleman sayısı = ";
cin >> size; 
cout << endl;

int *p = new int[size];

while (i<size)
{
cout << i+1 << ". eleman = " ; 
cin >> element;
cout << endl;
p[i]= element;
i++;
}

while(j<size)
{
cout << "İçerideki "<< j+1 << ". eleman'ın adresi :"  << (p+j)  << endl;
cout << "İçerideki "<< j+1 << ". eleman :"  << p[j]  << endl;
j++;
}

cout << endl << "Sıralama : " ;
while(k<size)
{
        l=k;
        minimum = p[l];
        while(l+1<size)
        {   
            if(minimum < p[l+1])
               {
                          
               }
           
            else 
              {
                minimum = p[l+1];
                p[l+1] = p[k];  
                
                p[k] = minimum;
                                        
              }
        l++;
        }
cout << p[k] << "," ;
k++;
}

cout << endl;
delete[] p;
}