Home / Veri Yapıları / Stack Veri Yapısı (Linked List – Bağlı Liste)

Stack Veri Yapısı (Linked List – Bağlı Liste)

Bir önceki dersimizde Stack veri yapısının dizi üzerine uygulanmasını görmüştük. Bu yazımızda Stack Veri Yapısını Bağlı liste ile oluşturmayı, ilgili Push Pop ve peek işlemlerini nasıl gerçekleştirebileceğimize göz atacağız.

Bağlı Liste ile Stack veri yapısı oluşturma mantığı Bağlı liste ile başa eleman ekleme işlemine dayanır. Eklenen her eleman başa eklenirken, çıkarılan her eleman da baştan çıkarılmaktadır. Aşağıda örnek bir yapımız olsun.

3 => 5 => 8 => 10 (push 77)

77 => 3 => 5 => 8 =>10 (push 88)

88 => 77 => 3 => 5 => 8 => 10 (pop)

77 => 3 => 5 => 8 => 10

Yukarıda da gördüğünüz üzere tüm yapının mantığı başa eleman ekleme ve baştan eleman çıkarma üzerinedir. Eğer peek() işlemi gerçekleştirmek isterseniz yalnızca bağlı listenin başındaki elemanı yazdırmanız yeterli olacaktır.

Stack Veri Yapısı (Bağlı Liste ile) C Kodu

Açıklama: Aşağıdaki kod yapısında Kişinin ad soyad ve yaş bilgileri tutulmuştur. Bağlı liste bunun üzerinden oluşturulmuştur. Kodlar tarafımdan yazılmıştır ve şu adreste bulunmaktadır.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

//Kişi yapısını tutan düğüm yapısı
struct person{
    char firstName[19];
    char secondName[19];
    int age;
    struct person *next;
};

//Yığına en son eklenen elemanı top değerinde tutacağız.
struct person* top = NULL;

//Genel değişkenler
struct person* temp;
char personName[19];
char personSecondName[19];
int personAge;


//verilen parametrelere bağlı düğüm oluşturan fonksiyon, geriye node dönüşü yapıyor
struct person* createPerson(char name[19], char sirName[19], int age)
{
    struct person* newPerson = (struct person*)malloc(sizeof(struct person));
    strcpy(newPerson->firstName, name);
    strcpy(newPerson->secondName, sirName);
    newPerson->age = age;
    newPerson->next = top;
    return newPerson;

}


// Klasik Stack veri yapısına eleman ekleme işlemi
// Buradaki yapı aklınızı karıştırır diye ek açıklama yapıyorum
// 4 => 5 => 7 => top(8)
// Her yeni eklenen düğümün next değeri top elemanını gösterir
// Daha sonra top değeri yeni eleman olacak şekilde güncellenir.
void pushNode(char name[], char sirName[], int age)
{
    struct person* newFirst = createPerson(name, sirName, age);
    newFirst->next = top;
    top = newFirst;

}

//Klasik pop işlemi, yığından eleman çıkartan(düğüm) fonksiyon
void popNode()
{
    if(top == NULL)
    {
        printf("\n*************************************\n");
        printf("\n You Can't pop, Your Stack is EMPTY!");
    }
    else
    {
        temp = top->next;
        free(top);
        top = temp;
    }
}

//Bağlı listeyi ekrana basan fonksiyon
void printList()

{
    int i = 1;

    if(top == NULL)
    {
        printf("\n*************************************\n");
        printf("\n Your list is empty ...");
    }
    else
    {
            temp = top;
            printf("\n*************************************\n");
            while(temp->next != NULL)
            {

                printf("%d-) %s %s %d\n", i, temp->firstName, temp->secondName, temp->age);
                temp = temp->next;
                i++;
            }
             printf("%d-) %s %s %d\n", i, temp->firstName, temp->secondName, temp->age);
    }

}

//Yığının en son eklenen elemanını geri döndüren fonksiyon
struct person* peek()
{
     if(top == NULL)
    {
        printf("\n*************************************\n");
        printf("\n Your list is empty ...");
        return 0;
    }
    else
    {
        return top;
    }
}

//Main fonksiyonunda genel olarak menü bulunuyor, ek açıklama yapmıyorum.
int main()
{
    int choise;
    struct person* topElement;
    while(1 == 1)
    {
        printf("\n1- Add Person to Stack ...");
        printf("\n2- Pop Person from Stack ...");
        printf("\n3- Peek Top Node...");
        printf("\nSelect Your Choise ... ");
        scanf("%d", &choise);

        switch(choise)
        {
            case 1:
                printf("\n First Name ? ");
                scanf("%s", &personName);
                printf("\n Second Name ? ");
                scanf("%s", &personSecondName);
                printf("\n Age ? ");
                scanf("%d", &personAge);
                pushNode(personName, personSecondName, personAge);
                printList();
            break;
            case 2:
                popNode();
                printList();

            break;
            case 3:
                topElement= peek();
                if(topElement)
                printf("\n Your TOP ELEMENT is ==> %s %s %d", topElement->firstName, topElement->secondName, topElement->age);
                break;
        }
    }

    return 0;
}

2 comments

  1. Hocam merhaba;
    Linked list ile stack konusunun olduğu sayfada başka bir video var. Bu konuyla alakalı video bulunuyor mu?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir