Yazılım

Yığıt (Stack) Yapısı – C Programlama Dili

Yığıt (Stack) Yapısı – C Programlama Dili

 

Bilgisayar bilimindeki en kullanışlı kavramlardan biri yığıt veri yapısıdır. Dizideki eleman sayısı ne olursa olsun herhangi bir elemana ulaşmanın algoritma karmaşıklığı O(1)’dir. Fakat birçok problemin doğası, elemanlarına sadece bir noktadan ve belirli bir sıraya göre erişimi gerektirebilir. Bu tür uygulamalarda dizilerde olduğu gibi herhangi bir elemana istediğimiz anda ulaşmamız mümkün değildir. Ayrıca yeni bir eleman eklemek istediğimizde de bunu herhangi bir yere yerleştiremeyiz.

Bir kamyona yüklenen kutuların indirilmesi sırasında uyulması gereken bir sıra vardır. Bir halk otobüsü bir noktadan diğer noktaya seferinden sonra, geri dönüşünde gerçekleştireceği izlemede hangi duraklara uğrayacağı bellidir.

Eleman ekleme ve çıkarma işlemlerinin bir dizinin sadece bir ucundan yapılabildiği veri saklama sistemlerine yığıt (stack) denir. Yığıt veri yapısı, SON GİREN DATA – İLK ÇIKAN DATA OLUR (Last – In – First – Out (LIFO)) kuralıyla erişimin yapıldığı, ara elemanlarına erişilemeyen bir veri yapısıdır. Elemanın eklendiği ve çıkarıldığı noktaya yığıtın tepesi, ilk elemanın eklendiği en derin noktaya ise yığıtın tabanı denir.

Yığıt ve Temel İşlemlerinin Programlanması

Yığıt Oluşturma C Kodu

struct yığıt

{

int indis;

int elemanlar[yığıt_boyutu];

};

struct yığıt x;

Yığıtın Boş Olması Kontrolü C Kodu

boolean stack_empty(struct yığıt *ps)

{

if (ps -> indis == -1)

return true;

else

return false;

}

Yığıtın Dolu Olması Kontrolü C Kodu

boolean stack_full(struct yığıt *ps) {

if (ps -> top == yığıt_boyutu – 1)

return true;

else

return false;

}

Yığıta Eleman Ekleme C Kodu

void push(struct yığıt *ps, int x) {

if (stack_full(ps)) {

printf(“STACK DOLU!”);

exit(1);

}

else

ps -> elemanlar[++(ps -> indis)]= x;

}

Yığıttan Eleman Çıkarma C Kodu

void pop(struct yığıt *ps) {

if (stack_empty(ps)) {

printf(“STACK BOŞ!”);

exit(1);

}

else

ps -> elemanlar[(ps -> indis)–];

}

Başa dön tuşu