C'deki Veri Yapıları Nelerdir ve Nasıl Kullanılır?

Yayınlanan: 2021-02-26

İçindekiler

Tanıtım

Başlangıç ​​olarak, bir veri yapısı, tek bir ad veya başlık altında bir arada tutulan veri öğelerinin bir koleksiyonudur ve verilerin verimli bir şekilde kullanılabilmesi için verileri depolamanın ve birleştirmenin özel bir yoludur.

Türler

Veri Yapıları yaygındır ve hemen hemen her yazılım sisteminde kullanılmaktadır. Veri Yapılarının en yaygın örneklerinden bazıları diziler, kuyruklar, yığınlar, bağlantılı listeler ve ağaçlardır.

Uygulamalar

Derleyiciler, işletim sistemleri tasarlama, veritabanları oluşturma, Yapay Zeka uygulamaları ve daha pek çok konuda.

sınıflandırma

Veri Yapıları iki kategoriye ayrılır: ilkel veri yapıları ve ilkel olmayan veri yapıları.

1. İlkel: Bir programlama dili tarafından desteklenen temel veri türleridir. Bu sınıflandırmanın yaygın bir örneği tamsayılar, karakterler ve boole değeridir.

2. İlkel Olmayan: Bu veri yapıları kategorileri, ilkel veri yapıları kullanılarak oluşturulur. Örnekler, bağlantılı yığınları, bağlantılı listeleri, grafikleri ve ağaçları içerir.

diziler

Dizi, aynı veri türüne sahip basit bir veri öğeleri topluluğudur. Bu, bir tamsayı türü dizisinin yalnızca tamsayı değerlerini depolayabileceği anlamına gelir. Float veri tipi dizisi, float veri tipine karşılık gelen değerleri saklayabilir ve başka hiçbir şey tutamaz.

Bir dizide depolanan öğelere doğrusal olarak erişilebilir ve bir dizin kullanılarak başvurulabilecek bitişik bellek bloklarında bulunur.

Dizi Bildirmek

C'de bir dizi şu şekilde bildirilebilir:

data_type adı[uzunluk];

Örneğin,

int siparişler[10];

Yukarıdaki kod satırı, içinde bir tamsayı değerinin saklanabileceği 10 bellek bloğu dizisi oluşturur. C'de dizi indeks değeri 0'dan başlar. Dolayısıyla indeks değerleri 0 ile 9 arasında değişir. Eğer o dizideki herhangi bir belirli değere erişmek istiyorsak, şunu yazmamız yeterlidir:

printf(sipariş[index_number]);

Bir diziyi bildirmenin başka bir yolu da aşağıdaki gibidir:

data_type dizi_adı[boyut]={değer listesi};

Örneğin,

int işaretleri[5]={9, 8, 7, 9, 8};

Yukarıdaki komut satırı, blokların her birinde sabit değerlere sahip 5 bellek bloğuna sahip bir dizi oluşturur. 32 bitlik bir derleyicide, int veri türü tarafından kullanılan 32 bitlik bellek 4 bayttır. Yani, 5 blok bellek 20 bayt bellek alacaktır.

Dizileri başlatmanın başka bir yasal yolu şudur:

int işaretleri [5] = {9 , 45};

Bu komut, değeri 0 olan son 3 blok ile 5 bloktan oluşan bir dizi oluşturacaktır.

Başka bir yasal yol:

int işaretleri [] = {9 , 5, 2, 1, 3,4};

C derleyicisi, bu verileri bir diziye sığdırmak için yalnızca 5 bloğun gerekli olduğunu anlar. Bu nedenle, 5 boyutunda bir dizi isim işareti başlatacaktır.

Benzer şekilde, 2 boyutlu bir dizi aşağıdaki şekilde başlatılabilir.

int işaretler[2][3]={{9,7,7},{6, 2, 1}};

Yukarıdaki komut, 2 satır ve 3 sütun içeren 2 boyutlu bir dizi oluşturacaktır.

Okuyun: Veri Yapısı Proje Fikirleri ve Konuları

Operasyonlar

Diziler üzerinde yapılabilecek bazı işlemler vardır. Örneğin:

  1. bir diziyi geçmek
  2. Diziye eleman eklemek
  3. Dizide belirli bir elemanı aramak
  4. Diziden belirli bir elemanı silme
  5. İki diziyi birleştirmek ve
  6. Diziyi sıralama — artan veya azalan sırada.

Dezavantajları

Diziye ayrılan bellek sabittir. Bu aslında bir sorun. Diyelim ki, 50 boyutunda bir dizi oluşturduk ve yalnızca 30 bellek bloğuna eriştik. Kalan 20 blok herhangi bir kullanım gerektirmeden hafızada yer kaplar. Bu nedenle, bu sorunu çözmek için bağlantılı bir listemiz var.

Bağlantılı liste

Bağlantılı Liste, diziler gibi verileri seri olarak depolar. Temel fark, her şeyi aynı anda saklamamasıdır. Bunun yerine verileri depolar veya gerektiğinde bir bellek bloğunu kullanılabilir hale getirir. Bağlantılı bir listede bloklar iki kısma ayrılır. İlk bölüm gerçek verileri içerir.

İkinci kısım, bağlantılı bir listedeki bir sonraki bloğa işaret eden bir işaretçidir. İşaretçi, verileri tutan bir sonraki bloğun adresini saklar. Baş işaretçi olarak bilinen bir işaretçi daha var. head, bağlantılı listedeki ilk bellek bloğuna işaret eder. Bağlantılı listenin gösterimi aşağıdadır. Bu bloklara ayrıca "düğümler" de denir.

kaynak

Bağlantılı Listeleri Başlatma

Bağlantı listesini başlatmak için bir yapı adları düğümü oluşturuyoruz. Yapının iki özelliği vardır. 1. Tuttuğu veriler ve 2. Bir sonraki düğüme işaret eden işaretçi. İşaretçinin veri türü, yapı düğümüne işaret ettiği için yapınınki olacaktır.

yapı düğümü

{

int verileri;

yapı düğümü *sonraki;

};

Bağlantılı bir listede, son düğümün işaretçisi hiçbir şeye işaret etmez veya basitçe boş işareti gösterir.

Ayrıca Okuyun: Veri Yapısındaki Grafikler

Bağlantılı Liste Geçişi

Bağlantılı bir listede, son düğümün işaretçisi hiçbir şeye işaret etmez veya basitçe boş işareti gösterir. Bu nedenle, bağlantılı bir listenin tamamını geçmek için, başlangıçta başa işaret eden boş bir işaretçi yaratırız. Ve bağlantılı listenin uzunluğu için işaretçi, boş değeri gösterene veya bağlantılı listenin son düğümüne ulaşana kadar ilerlemeye devam eder.

Düğüm Ekleme

Belirli bir düğümden önce bir düğüm ekleme algoritması aşağıdaki gibi olacaktır:

  1. başlangıçta başa işaret eden iki boş işaretçi (ptr ve preptr) ayarlayın
  2. ptr'yi, ptr.data, düğümü eklemeyi düşünmeden önceki verilere eşit olana kadar hareket ettirin. preptr, ptr'nin arkasında 1 düğüm olacaktır.
  3. Düğüm oluştur
  4. Sahte hazırlayıcının işaret ettiği düğüm, bu düğümün bir sonraki düğümü bu yeni düğümü gösterecektir.
  5. Yeni düğümün bir sonraki noktası ptr'ye işaret edecek.

Belirli bir veriden sonra bir düğüm ekleme algoritması benzer şekilde yapılır.

Bağlantılı Liste Avantajları

  1. Diziden farklı olarak dinamik boyut
  2. Ekleme ve silme işlemi, bağlantılı listede bir diziye göre daha kolaydır.

Sıra

Kuyruk, İlk Giren İlk Çıkar veya FIFO tipi bir sistemi takip eder. Bir dizi uygulamasında, Queue'nun kullanım durumunu göstermek için iki işaretçimiz olacak.

Kaynak

FIFO temel olarak yığına ilk giren değerin diziden ilk çıktığı anlamına gelir. Yukarıdaki sıra şemasında, işaretçi ön tarafı 7 değerini gösterir. İlk bloğu silersek (dequeue), ön taraf şimdi 2 değerini gösterir. konum 5. Ardından, arka işaretçi konum 5'i gösterecektir.

Taşma ve Taşma Koşulları

Bununla birlikte, kuyruğa bir veri değeri girmeden önce, taşma koşullarını kontrol etmeliyiz. Halihazırda dolu olan bir kuyruğa bir öğe ekleme girişimi olduğunda bir taşma meydana gelir. Arka = max_size–1 olduğunda bir sıra dolacaktır.

Aynı şekilde, kuyruktan veri silmeden önce, yetersiz akış koşullarını kontrol etmeliyiz. Halihazırda boş olan bir kuyruktan bir eleman silinmeye çalışıldığında bir taşma meydana gelir, yani ön = boş ve arka = boş ise, sıra boştur.

Yığın

Yığın, öğeleri yalnızca bir uçta eklediğimiz ve sildiğimiz bir veri yapısıdır ve yığının tepesi olarak da bilinir. Yığın uygulaması bu nedenle son giren ilk çıkar (LIFO) uygulaması olarak adlandırılır. Sıradan farklı olarak, yığın için yalnızca bir üst işaretçiye ihtiyacımız var.

Bir diziye eleman girmek (itmek) istersek, üstteki işaretçi 1 birim artar veya yukarı çıkar. Bir yığın üç temel işlemi destekler: itme, açma ve gözetleme. Peep işlemi, yığındaki en üstteki öğeyi görüntülemektir.

Kaynak

Dünyanın En İyi Üniversitelerinden Online Yazılım Kursları Öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

Çözüm

Bu yazıda, diziler, bağlantılı listeler, kuyruklar ve yığınlar olmak üzere 4 tür veri yapısından bahsettik. Umarım bu makaleyi beğenmişsinizdir ve daha ilginç okumalar için bizi izlemeye devam edin. Bir sonrakine kadar.

Javascript, full-stack geliştirme hakkında daha fazla bilgi edinmek istiyorsanız, upGrad & IIIT-B'nin çalışan profesyoneller için tasarlanmış ve 500+ saatlik zorlu eğitim, 9+ proje sunan Full-stack Yazılım Geliştirmede Yönetici PG Programına göz atın , ve ödevler, IIIT-B Mezun statüsü, pratik uygulamalı bitirme projeleri ve en iyi firmalarla iş yardımı.

Programlamada veri yapıları nelerdir?

Veri yapıları, bir programdaki verileri düzenleme şeklimizdir. En önemli iki veri yapısı diziler ve bağlantılı listelerdir. Diziler en tanıdık veri yapısıdır ve anlaşılması en kolay olanıdır. Diziler temel olarak ilgili öğelerin numaralandırılmış listeleridir. Anlamaları ve kullanmaları kolaydır, ancak büyük miktarda veriyle çalışırken çok verimli değildirler. Bağlantılı listeler daha karmaşıktır, ancak doğru kullanıldığında çok verimli olabilirler. Büyük bir listenin ortasındaki öğeleri eklemeniz veya çıkarmanız gerektiğinde veya geniş bir listedeki öğeleri aramanız gerektiğinde iyi seçimlerdir.

Bağlantılı liste ve diziler arasındaki farklar nelerdir?

Dizilerde, bir öğeye erişmek için bir dizin kullanılır. Dizideki öğeler sıralı düzende düzenlenir; bu, bir dizin kullanılıyorsa öğelere erişmeyi ve öğeleri değiştirmeyi kolaylaştırır. Dizi ayrıca sabit bir boyuta sahiptir. Öğeler, oluşturulduğu sırada tahsis edilir. Bağlantılı listede, bir öğeye erişmek için bir işaretçi kullanılır. Bağlantılı bir listenin öğeleri mutlaka sıralı sırada saklanmaz. Bağlantılı bir liste, oluşturulduğu sırada düğümler içerebileceğinden bilinmeyen bir boyuta sahiptir. Bir öğeye erişmek için bir işaretçi kullanılır, bu nedenle bellek ayırma daha kolaydır.

C'de bir işaretçi nedir?

İşaretçi, herhangi bir değişkenin veya işlevin adresini saklayan C'deki bir veri türüdür. Genellikle başka bir bellek konumuna referans olarak kullanılır. Bir işaretçi, bir dizinin, yapının, işlevin veya başka herhangi bir türün bellek adresini tutabilir. C, işlevlere değer iletmek ve işlevlerden değer almak için işaretçiler kullanır. İşaretçiler, bellek alanını dinamik olarak ayırmak için kullanılır.