C Stack (Yığıt) Yapısı Konu Anlatımı & Örnek Kod - Veri Yapıları

bazinga

Admin
Konu Sahibi
Katılım
1 Şubat 2007
Mesajlar
86,512
Reaksiyon puanı
41,973
Puanı
1,060
Konum
İstanbul
Web Sitesi
izleryazar.com
Programlama dillerinde veri yapıları, verileri çeşitli şekillerde tutmayı sağlayan yapılardır. Bu veri yapılarından en yaygın olarak kullanılanlarından biri de stack (yığıt) yapısıdır. Stackler LIFO (Last In First Out - Son Giren İlk Çıkar) yapısına göre çalışır. Yani bir örnek olarak elimizde 3 5 7 gibi bir dizi olsun. Eğer bu diziye 8 rakamını eklersek sona eklenecek yani 3 5 7 8 şeklinde olmuş olacak dizimiz. Eğer silmek istersek ise son giren yani 8 ilk olarak çıkacak ve dizimiz yeniden 3 5 7 olan haline dönecek.

Bu basit veri yapısının örnek kodunu C üzerinde yazdım. Kod sadece örnek olması amacıyla çok basit bir şekilde yazılmıştır.

Kodda anlatılanları kısaca özetlemek gerekirse öncelikle stack adlı bir yapı oluşturdum. Bu yapının iki değeri var biri stack içindeki toplam değer sayısını tutacak "top" değişkeni, diğeri ise 10 elemanlı bir değer dizisi. Bu 10 olan eleman sayısını siz elbette istediğiniz gibi değiştirebilirsiniz. Hatta define ile başta tanımlarsanız programlama açısından daha doğru bir iş yapmış olursunuz.

Daha sonra stack yapısınının yanı sıra iki tane temel fonksiyonumuz var, onları oluşturdum. Bu fonksiyonlar pop ve push fonksiyonları. Push fonksiyonu stackin üzerine sayı eklerken, pop ise stackin en üstündeki sayıyı alıyor. Bunları yaparken top değişkenine bakarak doluluğunu kontrol ediyor ve push'ta arttırıyor, pop'ta ise azaltıyor bu top değişkenin değerini.



Kod:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct stack{

    int top;
    int deger[10];
    

};

struct stack s;

void push(struct stack *ps, int x){
    
    if(ps->top==9)
        printf("stack dolu");
    else
        ps->deger[(ps->top)++]=x;
    
}

void pop(struct stack *ps){
    if(ps->top==0)
        printf("stack bos");
    else
        ps->top--;
}


int main()
{
    
    int sayi=0;
    while(sayi!=4){
    printf("Lutfen bir secim yapin: 
 1. Ekleme
 2. Silme 
 3. Listeleme
 4. Cikis
");
        
        scanf("%d",&sayi);

    
    switch(sayi){
    case 1:
        printf("Eklemek istediginiz sayiyi girin:");
        int ekle;
        scanf("%d",&ekle);
        push(&s,ekle);
        break;
    case 2:
        pop(&s);
        break;
    case 3:
        if(s.top==0)
            printf("Liste bos
");
        else
            printf("
Liste:");

        for(int a=0;a<s.top;a++)
            printf("%d ",s.deger[a]);
        printf("
");
        break;

    }
    }
    getchar();
    return 0;
}
 

Cortexiphan

Yeni Üye
Katılım
10 Kasım 2020
Mesajlar
1
Reaksiyon puanı
0
Puanı
2
Öncelikle teşekkürler, bi kaç konuda yardım istiyecektim senden ,bu stack konusuyla alakalı nerden ulaşabilirim sana?
 

bazinga

Admin
Konu Sahibi
Katılım
1 Şubat 2007
Mesajlar
86,512
Reaksiyon puanı
41,973
Puanı
1,060
Konum
İstanbul
Web Sitesi
izleryazar.com
Öncelikle teşekkürler, bi kaç konuda yardım istiyecektim senden ,bu stack konusuyla alakalı nerden ulaşabilirim sana?
Yazıyı ve kodu yazalı yaklaşık 8 sene olmuş. Uzun yıllardır da C diliyle herhangi bir geliştirme yapma fırsatım olmadı ne yazık ki. Eğer basit sorularsa bu başlıktan veya özel konuşma yoluyla iletebilirsen yanıtlamaya çalışırım.