Veri yapısı nedir ve türleri nelerdir?

Veri yapılarına giriş yapmadan önce verinin ne olduğunu anlatmak istiyorum. Veri: rakamlar, sayılar ve figürler den oluşan, algoritmada kullanılan ve bilgiyi taşıyan işlenmemiş parçacıklardır. kısaca Bilginin işlenmemiş halidir


Veri nedir?

Veri yapılarına giriş yapmadan önce verinin ne olduğunu anlatmak istiyorum.
Veri: rakamlar, sayılar ve figürler den oluşan, algoritmada kullanılan ve bilgiyi taşıyan işlenmemiş parçacıklardır. kısaca Bilginin işlenmemiş halidir 😊
Algoritma: Veri tanımında bahsettiğim algoritma ise bir problemin çözümü için uygulanması gerek adımların tümüdür.

Veri yapısı nedir?

Özetleyecek olursak ,Veri yapısı: verileri düzenlemek ve saklamak için kullanılan yapılardır. Kısa ama her şeyi anlatan bir tanım 😋.

Neden Verilere ihtiyaç duyuyoruz?

Modern dünyamızda kullandığımız bilgisayarlar, gündelik işlerde bile binlerce veri girdisi ve çıktısı ile uğraşıyor, programlama sırasında bu verileri daha etkin bir şekilde kullanabilmek ve düzenleyebilmek için Veri yapılarına ihtiyaç duyuyoruz ve bu yüzden bizim için çok önemli. 😊

Veri yapısı Türleri:

Array:

Array(dizi), belli boyuttaki verileri dizili ve doğrusal (linear) bir şekilde saklanmasına ve düzenlenmesine yarayan bir veri yapısıdır.


Dynamic Array:

Dynamic Array(dinamik dizi), array veri yapısı ile neredeyse aynıdır tek fark genişletilebilirdir yani belli bir boyutu yoktur arrayin aksine.


Stack:

Stack doğrusal (linear) bir veri yapısıdır ve adından da anlaşılabileceği üzere verileri yığın halinde saklar (ENG stack -> TR yığın). Stack veri yapısından bir veriyi almak istiyorsak o veri öncesindeki verileri stack’tan çıkarmamız gerekir bir yığın halinde saklanıldıkları için, ayrıca bir veriyi de sadece stack’ın üstüne ekleyebiliriz yani aralara veya sona veri ekleyemeyiz.

Stack veri yapısını daha önce de bir yazımda bahsettiğim gibi bir kitap yığını gibi düşünebilirsiniz, o yazı da da dediğim gibi sonuçta kitap yığınında istediğiniz bir kitabı düzgünce almak istiyorsanız o kitapın üstündeki kitapları da indirmeniz gerekir aynı stack veri yapısındaki gibi

Stack veri yapısı çalışma şekli.

-*-Linked List

Linked List (Bağlı liste), node/link diye adlandırılan yapılardan oluşur, bu yapılar veriyi ve kendisinden sonraki yapıyı tutar, bu sayede verileri doğrusal (linear) ve birbirine bağlı bir şekilde saklayıp kullanabiliriz.


Queue

Queue, verilerin sırayla kullanıldığı ve ilk giren verinin sıranın önünde olduğu için ilk çıktığı bir veri yapıdır. Tek tek ve sırayla işlenmesi gereken verilerde işe yarar bir veri yapısıdır. Ayrıca bir veriyi de sadece queue(sıra)’nın arkasına ekleyebiliriz yani aralara veya sıranın önüne veri ekleyemeyiz. Bu kısım stack’ı andırıyor biraz. 😊


Veri yapısı örnekleri (C++)

C++ STL(Standart Kütüphane) sinde çoğu veri yapısı implemente edilmiş halde bulunuyor, bu sayede çoğu veri yapısını c++ ile kullanabiliyoruz

Array:

#include <iostream>
int main()
{
   // arrayler statik olduğu için array boyutunu veriyoruz
   // ve array'i tanımlıyoruz.
   int arr[10] = {0,1,2,3,4,5,6,7,8,9}; 
   // şuan belirlediğimiz 10 eleman sınırı dolduğu için başka eleman sonradan ekleyemeyiz

   // range based bir for döngüsü ile array içindeki elemanlara erişelim.
   for(int& item : arr)
   {
        std::cout << item << std::endl;
   }
   /*
    Çıktı:
    *0
    *1
    *2
    *3
    *4
    *5
    *6
    *7
    *8
    *9
   */
}

Dynamic Array:

#include <iostream>
#include <vector>
int main()
{
   // dynamic arrayler adı üstünde dinamik olduğu için-
   // özellikle boyutunu belirtmeye gerek yok
   std::vector dynarr = {0,1,2,3,4,5,6,7,8};
   dynarr.push_back(9); // yeni eleman ekleyebiliyoruz boyut sınırı olmadığı için
   // range based bir for döngüsü ile dynamic arrayin içindeki elemanlara erişelim.
   for(int& item : dynarr )
   {
        std::cout << item << std::endl;
   }
   /*
    Çıktı:
    *0
    *1
    *2
    *3
    *4
    *5
    *6
    *7
    *8
    *9
   */

}

Stack:

#include <iostream>
#include <stack>
int main()
{
    std::stack<int> intStack;
    for(int i=0; i < 10; i++)
        intStack.push(i); // 10 a kadar olan sayıları ekliyoruz üst üste (sıfır dahil)
    std::cout << intStack.top() << std::endl; // çıktı: '9' çünkü on'a kadar sayıları ekledikten sonra en üstte(top) dokuz kalır.
    intStack.pop(); // en üstte sekiz kaldı dokuzu yığının üstünden indirdik
    std::cout << intStack.top() << std::endl; // çıktı: '8', sebepini yukarda belirttiğim gibi
}

Linked List

#include <iostream>
template<typename Typ>
struct link
{
    Typ data;
    link<Typ>* next;
    
};
int main()
{
    link<int> Lhead{0,NULL}; // Başı
    link<int> tail1{1,NULL}; // kuyruk 1
    link<int> tail2{2,NULL}; // kuyruk 2
    link<int> tail3{3,NULL}; // kuyruk 3
    // Ve birbirlerine bağla!!
    Lhead.next = &tail1;
    tail1.next = &tail2;
    tail2.next = &tail3;
    
    for(link<int>* lptr = &Lhead; lptr; lptr = lptr->next)
    {
        std::cout << lptr->data << '\n';
    }
    /*
    0
    1
    2
    3
    */
}

Queue

#include <iostream>
#include <queue>
int main()
{
    std::queue<int> myqueue;
    for(int i=0; i < 10; ++i)
    {
        myqueue.push(i); // sırayla 10 sayıyı ekle queue(sıra) ya
    }
    for(int i=0; i < 10; ++i)
    {
        std::cout << myqueue.front() << std::endl; // Sıradaki veriyi ekrana bastır
        myqueue.pop(); // Ve sıradan çıkar :)
    }
    /*
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    */
}

Umarım sizlere az da olsa faydam dokunmuştur 🙂 ,bu yazıma zamanınızı ayırdığınız çok teşekkür ederim, İyi çalışmalar! 😀


Beğendin mi? Arkadaşlarınla paylaş!

3
3 Puanlar
Efe Osman

4 Yorum

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