Dinamik dizi - Vikipedi
İçeriğe atla
Ana menü
Gezinti
  • Anasayfa
  • Hakkımızda
  • İçindekiler
  • Rastgele madde
  • Seçkin içerik
  • Yakınımdakiler
Katılım
  • Deneme tahtası
  • Köy çeşmesi
  • Son değişiklikler
  • Dosya yükle
  • Topluluk portalı
  • Wikimedia dükkânı
  • Yardım
  • Özel sayfalar
Vikipedi Özgür Ansiklopedi
Ara
  • Bağış yapın
  • Hesap oluştur
  • Oturum aç
  • Bağış yapın
  • Hesap oluştur
  • Oturum aç

İçindekiler

  • Giriş
  • 1 Diziler ve sabit boyutun dezavantajları
  • 2 Çalışma şekli
  • 3 Performans
  • 4 Diller ve dinamik diziler
  • 5 Kaynakça

Dinamik dizi

Bağlantı ekle
  • Madde
  • Tartışma
  • Oku
  • Değiştir
  • Kaynağı değiştir
  • Geçmişi gör
Araçlar
Eylemler
  • Oku
  • Değiştir
  • Kaynağı değiştir
  • Geçmişi gör
Genel
  • Sayfaya bağlantılar
  • İlgili değişiklikler
  • Kalıcı bağlantı
  • Sayfa bilgisi
  • Bu sayfayı kaynak göster
  • Kısaltılmış URL'yi al
  • Karekodu indir
Yazdır/dışa aktar
  • Bir kitap oluştur
  • PDF olarak indir
  • Basılmaya uygun görünüm
Diğer projelerde
  • Vikiveri ögesi
Görünüm
Vikipedi, özgür ansiklopedi
(Dinamik Dizi sayfasından yönlendirildi)
Bu madde, Vikipedi biçem el kitabına uygun değildir. Maddeyi, Vikipedi standartlarına uygun biçimde düzenleyerek Vikipedi'ye katkıda bulunabilirsiniz. Gerekli düzenleme yapılmadan bu şablon kaldırılmamalıdır. (Ağustos 2011)
Bellek tahsisi yaparken geometrik artırma yöntemi kullanılarak dinamik dizinin sonuna eleman ekleniyor. Boş kutular uzatılmış belleği ifade ediyor. Eklemeler sabit zamanlı (Θ(1)) ancak ekleme kapasitenin sonuna denk geldiğinde yeniden bellek tahsisi gerektirdiğinden yavaş (Θ(n) zaman) kalıyor (kaplumbağa ile gösterilmiştir). Dizinin boyu (logical size) ve kapasitesi (capacity) sonda gösterilmiştir.

Dinamik dizi, tutabileceği eleman sayısının derleme zamanında bilinmesine gerek olmayan dizidir. Dinamik dizi tanımlandığında, kapasitesini belirten bir bellek tahsis edilir ve kullanımda kapasiteye erişildiğinde yeniden bir dinamik bellek tahsisi yapılır. Dinamik diziye elemanlar eklenebilir, diziden elemanlar silinebilir; dizinin boyutu azaltılabilir ve arttırılabilir. Bazı programlama dillerinde vektör adıyla anılan bu yapıyı birçok modern programlama dili kendi kütüphaneleriyle sunmaktadır.

Diziler ve sabit boyutun dezavantajları

[değiştir | kaynağı değiştir]

İdeal veri yapılarının ortak özelliği değiştirilebilir ve esnek olmasıdır. İyi bir kullanıcının kullanacağı veri yapısı da bu özellikleri sağlamalıdır. Programlamanın temel veri yapısı olan diziler sabit boyutlu olmaları nedeniyle bu yeterliliğe erişememektedir. Bu sebeple programlama dillerinin gelişmesiyle paralel olarak farklı özelliklere ve esnekliklere sahip veri yapıları ortaya sunulmuş, kullanılmıştır.

Bazı kod dizilerinde sabit boyutlu bir dizi ihtiyacı karşılasa da bazı durumlarda yetersiz kalmaktadır. Kullanılacak veri sayısının belirsiz olması ya da önceden saptanamaması bu noktadaki temel problemdir. Bu probleme çözüm olarak klasik fakat verimsiz bir çözüm yolu sunulmaktadır. Bu çözüm yolu, ihtiyaç duyulandan daha fazla ya da anormal büyük boyutta bir dizi tanımlamaktır. Kimi zaman çözüm yolu olarak seçilen bu yöntem dizilerin yetersiz olması durumunu değiştirmemektedir. Çünkü, sabit boyuttaki bir dizinin bu boyutuna sığmayacak sayıda veri içermesi gerekliliği hiçbir zaman önceden saptanamaz. Diğer bir taraftan da bu çözüm yolu kod dizisinin çalışmak için ihtiyaç duyacağı hafıza miktarını arttıracaktır. Bu da kod dizisini hantallaştırmakla beraber çalışabilirliğini de düşürmektedir.

Çalışma şekli

[değiştir | kaynağı değiştir]

Dinamik dizilerdeki ekleme ve silme işlemlerinin temel mantığı dizilerdeki gibidir. Aradaki farklılık sabit boyutlu bir dizinin kapasitesi dolduğunda yeni veri ekleme işleminin hata ile sonuçlanması, dinamik dizilerde ise aynı işlemin yeni bellek tahsisi kullanılarak başarılı olmasıdır.

En basit dinamik dizi yapısında arka planda çalışan iki dizi kullanılmaktadır. Bunlardan ilki veriyi tutmaktadır, ikincisi ise tampon bölge olarak görev yapmaktadır. Birinci bölge oluşturulduğunda dizi yeni oluşturulan daha büyük boyutlu bir diziye kopyalanarak ilk dizi silinmektedir.

Sınır durumdaki ekleme işlemi hakkında bir irdeleme yapılmalı ve dinamik dizinin ne zaman genişletilmesi gerektiğine çok iyi karar verilmelidir. Çünkü genişletme, eklemeye göre daha masraflı bir işlemdir. Birkaç elemandan oluşan dizilerde bu masraf göz ardı edilebilecek kadar düşük bir maliyette olsa da dizinin eleman sayısı arttıkça bu maliyette artmaktadır.

Performans

[değiştir | kaynağı değiştir]
Operasyon Bağlı liste Dizi Dinamik dizi
Erişim ve güncelleme Θ(n) Θ(1) Θ(1)
Ekleme Θ(1) Θ(1) Θ(1)
Genişleme gerektiren ekleme Θ(1) - Θ(n)
Gereksiz hafıza kullanımı 0 Θ(n) Θ(n)

Dinamik diziler performans olarak dizilere benzer performans gösterseler de genişleme durumlarındaki eklemelerde maliyet üst seviyelere varmaktadır.

  • Dizi içindeki bir elemana ulaşma ya da elemanı değiştirme performansı sabittir (Θ(1)).
  • Ekleme işlemi de aynı performanstadır ve sabittir (Θ(1)).
  • Genişleme gerektiren ekleme ise dizi içerisindeki eleman sayısına bağlı olarak artan bir performansa sahiptir (Θ(n)).
  • Gereksiz hafıza kullanımı genişlemeden önceki durumda minimumdur, diğer durumlarda yüksektir.

Dizilere bakarak erişim, güncelleme, ekleme açısından aynı performanstadır. Genişleme gerektiren ekleme yüksek maliyete sahiptir.

Bağlı listelerle kıyaslandığında ise erişim ve güncelleme daha hızlıdır. Genişleme gerektiren ekleme daha yüksek bi maliyete sahiptir. Bağlı listelerde sıfır olan gereksiz hafıza kullanımı dinamik dizilerde yüksektir.

Diller ve dinamik diziler

[değiştir | kaynağı değiştir]
  • C ve pascal dilinde dinamik dizi sağlanmamaktadır. Fakat kullanıcı bunu simüle edebilir.
  • C++ dilindeki std::vector dinamik dizi implementasyonu sağlar.
  • C# dilinde List<> sınıfı dizi kullanımı sağlar.
  • Delphi ve D dilleri dinamik dizi kullanımı sağlamaktadır.
  • Java dilinde dinamik diziler, java.util paketinde bulunan Vector ve ArrayList sınıfları tarafından sağlanır.
  • Python list yapısını sağlar.
  • Rust std::vec::Vec yapısını sağlar.

Kaynakça

[değiştir | kaynağı değiştir]
  • Veri Yapıları ve Algoritma, M.Ümit Karakaş, Beta Basım Yayın, 2000
  • Algoritma Geliştirme ve Veri Yapıları, Bülent Çobanoğlu, Pusula Yayıncılık, 2008
  • Data Structures and Algorithms, Alfred V. Aho, Jeffrey D. Ullman, John E. Hopcroft, Addison-Wesley, 2005
  • g
  • t
  • d
Veri yapıları
Türler
Kapsayıcı · Koleksiyon
Soyut
Liste · İlişkisel dizi · Çoklu harita · Küme · Çoklu küme · Çift uçlu kuyruk · Kuyruk · Öncelik kuyruğu · Yığın
Diziler
Dinamik dizi · Seyrek dizi · Dairesel arabellek · Bit dizisi · Komut çizelgesi
Bağlı
Bağlı liste · Açılmış bağlı liste · XOR bağlı liste · Atlama listesi
Ağaçlar
B-ağaç · Ağaç sıralaması (kendini dengeleyen: AA, AVL, kırmızı-siyah, şevli) · Öbek (ikili, binom, Fibonacci) · Önek ağacı
Çizgeler
Yönlendirilmiş çizge · Yönlendirilmiş asiklik çizge · İkili karar diyagramı · Hiperçizge
Veri yapıları listesi
"https://tr.wikipedia.org/w/index.php?title=Dinamik_dizi&oldid=35797631" sayfasından alınmıştır
Kategori:
  • Veri yapıları
Gizli kategori:
  • Düzenlenmesi gereken maddeler Ağustos 2011
  • Sayfa en son 08.47, 9 Ağustos 2025 tarihinde değiştirildi.
  • Metin Creative Commons Atıf-AynıLisanslaPaylaş Lisansı altındadır ve ek koşullar uygulanabilir. Bu siteyi kullanarak Kullanım Şartlarını ve Gizlilik Politikasını kabul etmiş olursunuz.
    Vikipedi® (ve Wikipedia®) kâr amacı gütmeyen kuruluş olan Wikimedia Foundation, Inc. tescilli markasıdır.
  • Gizlilik politikası
  • Vikipedi hakkında
  • Sorumluluk reddi
  • Davranış Kuralları
  • Geliştiriciler
  • İstatistikler
  • Çerez politikası
  • Mobil görünüm
  • Wikimedia Foundation
  • Powered by MediaWiki
Dinamik dizi
Konu ekle