Veri Yapıları Nedir?

Öğrencilere eşit sayıda kalem dağıtma problemini 6 adımda çözdük. Buna algoritma diyoruz. Algoritma bir problemin adım adım çözümünü sağlarken veri yapıları algoritmada kullanılan verileri düzenlemeyi, işlemeyi ve depolamayı sağlar. Başka bir deyişle; verileri alma ve depolama tarzımızdır. Kalem probleminde kalem ve öğrenciler verileri oluşturmaktadır. Problemi çözmek için önce verileri yapılandırdık. Yani öğrenci ve kalem sayısını tespit ettik. Daha sonra bu verileri temel alarak problemi çözdük. Programcılıkta bu işleme veri yapıları denir.

Veri yapılarının ortak bazı özellikleri şunlardır;

  • Linear ve Linear Olmayan: Bu özellik verilerin kronolojik sıraya göre düzenlenmiş olup olmadığını açıklar. Array yapısında veriler linear saklanırken, graph yapısında veriler linear olmayan bir şekilde saklanır.
  • Statik ve dinamik olma durumu: Statik veri yapıları derleme zamanında sabit boyutlara, yapılara ve hafıza konumlarına sahipken, Dinamik veri yapıları, kullanıma bağlı olarak daralan veya genişleyebilen boyutlara, yapılara ve hafıza konumlarına sahiptir.
  • Homojen ve homojen olmayan: Belirli bir yapıdaki tüm verilerin aynı türde mi yoksa farklı türde mi olduğunu açıklar.

Array, string, list, linked list ve stack gibi yaygın veri yapıları ile birlikte sektörde kullanılan birçok veri yapısı bulunmaktadır. Mevcut veri yapılarını düzenleyerek veri yapısı oluşturacağımız gibi isterseniz bunları özelleştirebilirsiniz. Şimdi yaygın olarak kullanılan veri yapıları hakkında kısaca bilgi verelim.

Array: Uzunluğu sabit veya esnek olabilen ve genellikle aynı türde verilerin ortak bir bellek alanında depolandığı yapılardır. Verilere erişim index bilgileri ile sağlanır. Yaygın kullanılan veri yapılarıdır.

Stack: Verilerin linear olarak depolandığı ve LIFO yani son giren ilk çıkar yaklaşımı ile veriler üzerinde işlem yapmayı sağlayan veri yapısıdır. İster array ister linked list yapısında stack tanımlayabilirsiniz.

Queue: Stack yapısında veri depolayabilen ancak FIFO yani ilk giren ilk çıkar yaklaşımı ile veriler üzerinde işlem yapan veri yapısıdır.

Linked List: Verileri doğrusal olarak birbiriyle bağlantılı bir biçimde saklayan veri yapısıdır. Bu yapıda kullanılan node yani düğüm ile hem veri depolanır hem de bir sonraki veriye bir bağlantı kurularak verilerin doğrusal olarak bağlantılı olması sağlanır.

Tree: Veriler hiyerarşik ve doğrusal olmayan bir şekilde tutulur. Verilerin oluşturduğu düzen ağaca benzediği için bu yapıya ağaç denmiştir.

Graph: Verileri doğrusal olmayan bir şekilde saklar. Graflar, köşeler olarak da bilinen sınırlı bir düğüm grubundan ve bunları bağlayan çizgilerden oluşur. Bu veri yapısı bilgisayar ağları gibi gerçek hayattaki sistemleri temsil etmek için kullanışlıdır. Sosyal ağlar, şehirler arası en kısa yolun tespiti gibi işlemlerde graflar yaygın bir şekilde kullanılır.

Veri yapıları, veritabanlarında tutulan bilgiler veya indeksleme hizmetlerinde, büyük miktarda veriyi verimli bir şekilde yönetmeyi sağlar. Veri sistemlerinin uygun bir şekilde bakımı için bellek tahsisi, veri ilişkileri ve veri işlemlerinin tanımlanması gerekmektedir.

Projenizde sadece veri yapılarını kullanmak değil, projenize uygun veri yapısını seçmek çok daha önemlidir. Uygun olmayan bir veri yapısı seçmek, yavaş çalışma sürelerine veya yanıt vermeyen kodlara neden olabilir.

Bir veri yapısı seçerken şu kriterlere dikkat etmemiz gerekiyor

  • Ne tür bilgilerin depolanacağını,
  • Var olan verilerin nereye yerleştirileceğini,
  • Verilerin nasıl sıralanacağını ve
  • Veriler için ne kadar bellek ayrılması gerektiğini

Yukarıda verilen kriterler oldukça önemli olup mesele (Ramiz Dayı’dan🙂 ) sadece kod yazmak değil. Peki nedir asıl mesele?

Mesele şu son üç yazıda verilen kriterlere uyarak kod yazmaktır.

Birçok nedeni var ama (ürün kötüleme olmaması için ürün isim vermiyorum) sizce niçin aynı işlemi yapan iki yazılımdan biri diğerinden daha hızlıdır? Ya da bazı akıllı telefonlar diğerlerinden daha hızlı? Hatta işletim sistemlerinde bile hız farkı var. Bazı animasyon şirketlerinin hazırladığı animasyonlar niçin başka animasyon firmalarından daha çok izlenmekte ve beğenilmektedir. Bana sorarsanız başarılı olan firma veya kişilerin bu başarıyı elde etmesinin asıl nedeni yazılım ve programlama ile ilgili elde edilen tüm gelişmeleri akıllıca bir araya getirmek, performans ve kaynak tüketimini en aza indiren yöntemleri tercih etmektir.

Bu yazı ile ilgili düşünceleri yorum kısmında belirtebilirsiniz.

**Bana en büyük desteğiniz yazılarıma yorum yapmanız ve paylaşmanızdır.