Bağlı Liste İle Yığın İşlemleri

Daha önceki yazımda Stack İşlemleri C kodu yapısını sizinle paylaşmıştık. Bu yapı diziler ile tasarlanmıştı. Ancak dizi dışında verileri saklamanın başka yollarının olduğunu biliyoruz. Linked List yani Bağlı listeler ile Stack işlemlerini gerçekleştirebiliriz.

Gayet eğlenceli olan bu işlemde yine struct ile düğüm oluşturuyoruz. Bağlı liste yapısı gereği, düğümümüz bir tane data, bir tane de pointer tipli bir değişken tutacak. Bu değişken bağlı olduğu düğümü işaret edecek. Ancak bizim stack işlemi yapabilmemiz için özel şartlarımız var. Bu şart, en son eklenen elemanın en son çıkması. Eee bu da Linked List Sondan Eleman çıkarma mantığına benziyor.

Bağlı Liste İle Yığın İşlemleri Hazır C kodu


 // **** Algoritmauzmanı.com **** //
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

// Stack elemanları bu düğümlerde tutulacak
struct StackNode
{
    int data;
    struct StackNode* next;
};

//herbir veri eklenirken bu fonksiyonu kullanıyoruz. Düğüm için alan ayırıyor ve bilgileri ekliyor
struct StackNode* newNode(int data)
{
    struct StackNode* stackNode =
              (struct StackNode*) malloc(sizeof(struct StackNode));
    stackNode->data = data;
    stackNode->next = NULL;
    return stackNode;
}

//Stack Bos mu fonksiyonu
int isEmpty(struct StackNode *root)
{
    return !root;
}

//Stack yapısına Eleman Ekleyen Fonksiyon
// root, top elemanı
void push(struct StackNode** root, int data)
{
    struct StackNode* stackNode = newNode(data);
    stackNode->next = *root;
    *root = stackNode;
    printf("%d sayisi yigina eklendi\n", data);
}


// Yığından Eleman Çıkarma fonksiyonu
// root parametresi gönderiyoruz.
// işlem sonucu root değeri değişiyor, çünkü top elemanı çıkıyor
int pop(struct StackNode** root)
{
    if (isEmpty(*root))
        return INT_MIN;
    struct StackNode* temp = *root;
    *root = (*root)->next;
    int popped = temp->data;
    free(temp);

    return popped;
}

// Top değerini kullanıcıya döndüren fonksiyon
int peek(struct StackNode* root)
{
    if (isEmpty(root))
        return INT_MIN;
    return root->data;
}


void algoritmaUzmani();
void menu()
{   struct StackNode* root = NULL;
    int secim,eklenecek;
    while(1==1)
    {
        printf("\n Yapmak istediginiz islemi secin!\n");
        printf("\n 1- Yigina Eleman Ekle\n");
        printf("\n 2- Yigindan Eleman Cikar\n");
        printf("\n 3- Konuyu Anlamadim!!!\n");
        scanf("%d", &secim);

        switch(secim)
        {
        case 1:
            printf("\nEklemek istediginizi sayiyi girin...");
            scanf("%d", &eklenecek);
            push(&root, eklenecek);
            break;
        case 2:
            printf("\n %d elemani yigindan cikarilmistir...", pop(&root));
            break;
        case 3:
            algoritmaUzmani();
            break;
        }
    }
}

int main()
{

    menu();

    return 0;
}


//sadece ilgili konuya gitmek icin. diger kodlar ile ilgisi yok
void algoritmaUzmani()
{
     system("C:\\Progra~2\\Google\\Chrome\\Application\\chrome.exe www.algoritmauzmani.com/2016/09/bagli-liste-ile-yigin-islemleri.html");
     printf("\n Eger asagida sistem yolu hatasi aliyorsaniz bunu onemsemeyin");
     if(system)
     {
          system("C:\\Progra~1\\Google\\Chrome\\Application\\chrome.exe www.algoritmauzmani.com/2016/09/bagli-liste-ile-yigin-islemleri.html");
          if(system)
            system("C:\\Progra~2\\Mozill~1\\firefox.exe www.algoritmauzmani.com/2016/09/bagli-liste-ile-yigin-islemleri.html");
            if(system)
                system("C:\\Progra~1\\Mozill~1\\firefox.exe www.algoritmauzmani.com/2016/09/bagli-liste-ile-yigin-islemleri.html");
     }
}

Etiketler: ,