Stack

Kategori: C , 04 Temmuz 2019 , JanFranco


Stack veri yapısı, son giren ilk çıkar mantığına dayanmaktadır. Bu mantığa LIFO(LAST IN FIRST OUT) denir. Stack veri yapısı iki basit fonksiyondan oluşur: push ve pop. Tabii ki farklı isimler de verebiliriz ancak genelde bu isimler kullanılarak fonksiyonlar yazılır. Stack veri yapısını implemente edelim. İlk olarak global bir dizi ve bir değişken oluşturalım:


int stack[N];
int top = 0;
push fonksiyonunu oluşturalım. push fonksiyonu stack'e eleman ekler. Her zaman elemanı sona ekleyeceğinden stack[top] = şeklinde bir kullanım yapabiliriz:

void push(int number){
    if(top < N){
        stack[top] = number;
        top++;
    }
    else{
        printf("Stack is full!\n");
    }
}
pop fonksiyonunu yazalım. pop fonksiyonu stack'ten eleman siler. Her zaman son elemanı sileceğinden top değerini bir azaltabiliriz. Aslında burada yapılan işlem sadece top değişkeninin değerini bir azaltmak olacak yani bellekten bir veri silinmeyecek. Ancak biz top değerine göre stack'i kontrol ettiğimizden, bellek haricinde bizim için bir şey değişmeyecek:

int pop(){
    if(top < 0){
        printf("Stack is empty!\n");
    }
    else{
        return stack[--top];
    }
}
Yukarıda yapılan işlemi şimdi daha iyi anlayacağız. Elemanları ekrana bastıran bir fonksiyon yazalım:

void display(){
    int i;
    for(i=0; i<top; i++){
        printf("%d\n", stack[i]);
    }
}
Görüldüğü gibi for döngüsü top değerine kadar çalışacaktır. Son olarak yazdığımı fonksiyonları main fonksiyonundan çağıralım:

int main() {
    int i;
    for(i=1; i<=10; i++){
        push(i*10);
    }
    for(i=1; i<=5; i++){
        pop();
    }
    for(i=1; i<=10; i++){
        push(i*10);
    }
    display();

    return 0;
}
Kodların tamamı:

#include <stdio.h>
#include <stdlib.h>
#define N 100

int stack[N];
int top = 0;

void push(int number){
    if(top < N){
        stack[top] = number;
        top++;
    }
    else{
        printf("Stack is full!\n");
    }
}

int pop(){
    if(top < 0){
        printf("Stack is empty!\n");
    }
    else{
        return stack[--top];
    }
}

void display(){
    int i;
    for(i=0; i<top; i++){
        printf("%d\n", stack[i]);
    }
}

int main() {
    int i;
    for(i=1; i<=10; i++){
        push(i*10);
    }
    for(i=1; i<=5; i++){
        pop();
    }
    for(i=1; i<=10; i++){
        push(i*10);
    }
    display();

    return 0;
}


Sonraki Yazı: Queue
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın