Veri yapısı, bilgisayar ortamında verilerin etkin olarak saklanması ve işlenmesi için kullanılan yapı.
Veri yapıları, verilerin düzenlenme biçimini belirleyen yapıtaşlarıdır. Bir yazılım bile basit bir veri yapısı olarak kabul edilebilir. Değişik algoritmalarda verilerin diziler, listeler, yığıtlar, kuyruklar, ağaçlar ve gibi veri modellerine uydurularak düzenlenmesi gerekebilir. Veri, yapı ve algoritma bir yazılımın birbirinden ayrılmaz bileşenleridir. Algoritması hazırlanmış her yapı için verilerin düzenli bir şekilde kullanımı önemlidir. Çünkü yapı iyi kurulduğunda, etkin, doğru, anlaşılır ve hızlı çalışıp az kaynak kullanan algoritma geliştirmek kolaylaşır.
Bilgisayar biliminde veri yapısı, genellikle verilere verimli erişim için seçilen bir veri organizasyonu ve depolama biçimidir. Daha doğrusu veri yapısı, veri değerlerinin, bunlar arasındaki ilişkilerin ve verilere uygulanabilecek işlevlerin veya işlemlerin bir koleksiyonudur; yani verilere ilişkin cebirsel bir yapıdır.
Kullanım
Veri yapıları soyut veri türlerinin (ADT (abstract data types)) temelini oluşturur. ADT, veri tipinin mantıksal formunu tanımlar. Veri yapısı veri tipinin fiziksel formunu uygular.
Farklı türdeki veri yapıları, farklı türdeki uygulamalara uygundur ve bazıları belirli görevlere oldukça uzmanlaşmıştır. Örneğin, ilişkisel veritabanları genellikle veri alımı için B-ağacı dizinlerini kullanırken, derleyici uygulamaları genellikle tanımlayıcıları aramak için karma tabloları kullanır.
Veri yapıları, büyük veritabanları ve internet indeksleme hizmetleri gibi kullanımlar için büyük miktarlardaki verileri verimli bir şekilde yönetmeye yönelik bir araç sağlar. Genellikle verimli veri yapıları, verimli algoritmalar tasarlamanın anahtarıdır. Bazı resmi tasarım yöntemleri ve programlama dilleri, yazılım tasarımında anahtar düzenleme faktörü olarak algoritmalardan ziyade veri yapılarını vurgular. Veri yapıları, hem ana bellekte hem de ikincil bellekte saklanan bilgilerin depolanmasını ve alınmasını düzenlemek için kullanılabilir.
Uygulama
Veri yapıları, çeşitli programlama dilleri ve teknikleri kullanılarak uygulanabilir, ancak hepsi, verileri verimli bir şekilde organize etmek ve depolamak gibi ortak bir hedefi paylaşır. Veri yapıları genellikle bir bilgisayarın, kendisi de bellekte saklanabilen ve program tarafından değiştirilebilen, bir bellek adresini temsil eden bir bit dizisi olan bir işaretçi tarafından belirtilen, belleğindeki herhangi bir yere veri getirme ve saklama becerisine dayanır. Dolayısıyla dizi ve kayıt veri yapıları, veri öğelerinin adreslerinin aritmetik işlemlerle hesaplanmasına dayanırken, bağlantılı veri yapıları, veri öğelerinin adreslerinin yapının kendisi içinde saklanmasına dayanır. Veri yapılandırmasına yönelik bu yaklaşımın, algoritmaların verimliliği ve ölçeklenebilirliği üzerinde derin etkileri vardır. Örneğin, dizilerdeki bitişik bellek tahsisi, hızlı erişim ve değişiklik işlemlerini kolaylaştırarak sıralı veri işleme senaryolarında performansın optimize edilmesini sağlar.
Bir veri yapısının uygulanması genellikle o yapının örneklerini yaratan ve işleyen bir dizi prosedür yazmayı gerektirir. Bir veri yapısının verimliliği bu işlemlerden ayrı olarak analiz edilemez. Bu gözlem, soyut bir veri türü, üzerinde gerçekleştirilebilecek işlemlerle dolaylı olarak tanımlanan bir veri yapısı ve bu işlemlerin matematiksel özellikleri (yer ve zaman maliyetleri dahil) şeklindeki teorik kavramı motive eder.
Örnekler
Genellikle daha basit ilkel veri türleri üzerine inşa edilen çok sayıda veri yapısı türü vardır. İyi bilinen örnekler şunlardır:
- Dizi, belirli bir sıradaki, genellikle hepsi aynı türde olan bir dizi öğedir (dile bağlı olarak, tek tek öğelerin tümü aynı türde olmaya zorlanabilir veya hemen hemen her türde olabilir). Hangi öğenin gerekli olduğunu belirtmek için öğelere bir tam sayı dizini kullanılarak erişilir. Tipik uygulamalar dizilerin elemanları için bitişik hafıza kelimeleri tahsis eder (ancak bu her zaman bir zorunluluk değildir). Diziler sabit uzunlukta veya yeniden boyutlandırılabilir olabilir.
- Bağlantılı liste (aynı zamanda liste olarak da adlandırılır), her düğümün kendine ait bir değere sahip olduğu ve bağlantılı listedeki bir sonraki düğüme işaret ettiği, düğüm adı verilen herhangi bir türdeki veri öğelerinin doğrusal bir koleksiyonudur. Bağlantılı listenin diziye göre temel avantajı, listenin geri kalanının yeri değiştirilmeden değerlerin her zaman verimli bir şekilde eklenip çıkarılabilmesidir. Ancak belirli bir öğeye rastgele erişim gibi diğer bazı işlemler, listelerde dizilere göre daha yavaştır.
- Bir kayıt (aynı zamanda tuple veya yapı olarak da adlandırılır), toplu bir veri yapısıdır. Kayıt, genellikle sabit sayı ve sırayla diğer değerleri içeren ve genellikle adlara göre dizine eklenen bir değerdir. Kayıtların öğelerine genellikle alanlar veya üyeler denir. Nesne yönelimli programlama bağlamında kayıtlar, onları nesnelerden ayıran düz eski veri yapıları olarak bilinir.
- Hash haritaları olarak da bilinen hash tabloları, anahtarlara dayalı olarak değerlerin hızlı bir şekilde alınmasını sağlayan veri yapılarıdır. Anahtarları bir dizideki indekslere eşlemek için bir karma işlevi kullanırlar ve ortalama durumda sabit zamanlı erişime izin verirler. Hash tabloları sözlüklerde, önbelleklerde ve veritabanı indekslemede yaygın olarak kullanılır. Ancak performanslarını etkileyebilecek karma çarpışmalar meydana gelebilir. Çarpışmaların üstesinden gelmek için zincirleme ve açık adresleme gibi teknikler kullanılır.
- Grafikler, varlıklar arasındaki ilişkileri temsil eden, kenarlarla birbirine bağlanan düğümlerin koleksiyonlarıdır. Grafikler, diğer şeylerin yanı sıra sosyal ağları, bilgisayar ağlarını ve ulaşım ağlarını modellemek için kullanılabilir. Köşelerden (düğümler) ve kenarlardan (düğümler arasındaki bağlantılar) oluşurlar. Grafikler yönlü veya yönsüz olabilir, döngülere sahip olabilir veya döngüsel olmayabilir. Grafik geçiş algoritmaları, genişlik öncelikli aramayı ve derinlik öncelikli aramayı içerir.
- Yığınlar ve kuyruklar, diziler veya bağlantılı listeler kullanılarak uygulanabilen soyut veri türleridir. Bir yığının iki temel işlemi vardır: Son Giren İlk Çıkar (LIFO) prensibini takip eden push (yığının en üstüne bir öğe ekler) ve pop (yığından en üstteki öğeyi kaldırır). Kuyrukların iki ana işlemi vardır: Enqueue (sıranın arkasına bir öğe ekler) ve dequeue (sıranın önünden bir öğeyi kaldırır), İlk Giren İlk Çıkar (FIFO) ilkesini izler.
- Ağaçlar öğelerin hiyerarşik organizasyonunu temsil eder. Bir ağaç, kenarlarla birbirine bağlanan düğümlerden oluşur; bir düğüm köktür ve diğer tüm düğümler alt ağaçları oluşturur. Ağaçlar çeşitli algoritmalarda ve veri depolama senaryolarında yaygın olarak kullanılmaktadır. İkili ağaçlar (özellikle yığınlar), AVL ağaçları ve B ağaçları bazı popüler ağaç türleridir. Verilerin verimli ve optimum şekilde aranmasını, sıralanmasını ve hiyerarşik temsilini sağlarlar.
- Önek ağacı olarak da bilinen bir trie, dizelerin verimli bir şekilde alınması için kullanılan özel bir ağaç veri yapısıdır. Her kenar bir karakteri temsil edecek şekilde bir dizenin karakterlerini düğümler halinde depolamaya çalışır. Otomatik tamamlama, yazım denetimi ve sözlük uygulamaları gibi metin işleme senaryolarında özellikle kullanışlıdırlar. Denemeler, dizelerde hızlı arama ve önek tabanlı işlemleri mümkün kılar.
Dil desteği
Çoğu montaj dili ve BCPL (Temel Kombine Programlama Dili) gibi bazı düşük seviyeli diller, veri yapıları için yerleşik destekten yoksundur. Öte yandan, birçok üst düzey programlama dili ve MASM gibi bazı üst düzey montaj dilleri, kayıtlar ve diziler gibi belirli veri yapıları için özel sözdizimine veya diğer yerleşik desteğe sahiptir. Örneğin, C (BCPL'nin doğrudan soyundan gelen) ve Pascal dilleri, vektörlere (tek boyutlu diziler) ve çok boyutlu dizilere ek olarak sırasıyla yapıları ve kayıtları destekler.
Çoğu programlama dili, veri yapısı uygulamalarının farklı programlar tarafından yeniden kullanılmasına izin veren bir tür kütüphane mekanizmasına sahiptir. Modern diller genellikle en yaygın veri yapılarını uygulayan standart kütüphanelerle birlikte gelir. Örnekler C++ Standart Şablon Kitaplığı, Java Koleksiyon Çerçevesi ve Microsoft .NET Çerçevesidir.
Modern diller ayrıca genellikle modüler programlamayı, yani bir kütüphane modülünün arayüzü ile bunun uygulanması arasındaki ayrımı destekler. Bazıları, istemcilerin uygulama ayrıntılarını gizlemesine olanak tanıyan opak veri türleri sağlar. C++, Java ve Smalltalk gibi nesne yönelimli programlama dilleri genellikle bu amaç için sınıfları kullanır.
Bilinen birçok veri yapısının, birden fazla bilgi işlem iş parçacığının bir veri yapısının tek bir somut örneğine aynı anda erişmesine izin veren eşzamanlı versiyonları vardır.
Ayrıca bakınız
- Soyut veri türü
- Eşzamanlı veri yapısı
- Veri örneği
- Dinamizasyon
- Bağlantılı veri yapısı
- Veri yapılarının listesi
- Kalıcı veri yapısı
- Düz eski veri yapısı
- Queap
- Kısa ve öz veri yapısı
- Ağaç (veri yapısı)
Kaynakça
- Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009). Introduction to Algorithms, Third Edition (3rd ed.). The MIT Press. ISBN 978-0262033848.
Kaynakça
- Peter Brass, Advanced Data Structures, Cambridge University Press, 2008, ISBN 978-0521880374
Daha fazla okuma
- Alfred Aho, John Hopcroft, and Jeffrey Ullman, Data Structures and Algorithms, Addison-Wesley, 1983, ISBN 0-201-00023-7
Dış bağlantılar
- Descriptions from the Dictionary of Algorithms and Data Structures
Bilgisayar ile ilgili bu madde seviyesindedir. Madde içeriğini genişleterek Vikipedi'ye katkı sağlayabilirsiniz. |
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Veri yapisi bilgisayar ortaminda verilerin etkin olarak saklanmasi ve islenmesi icin kullanilan yapi Veri yapilari verilerin duzenlenme bicimini belirleyen yapitaslaridir Bir yazilim bile basit bir veri yapisi olarak kabul edilebilir Degisik algoritmalarda verilerin diziler listeler yigitlar kuyruklar agaclar ve gibi veri modellerine uydurularak duzenlenmesi gerekebilir Veri yapi ve algoritma bir yazilimin birbirinden ayrilmaz bilesenleridir Algoritmasi hazirlanmis her yapi icin verilerin duzenli bir sekilde kullanimi onemlidir Cunku yapi iyi kuruldugunda etkin dogru anlasilir ve hizli calisip az kaynak kullanan algoritma gelistirmek kolaylasir Bilgisayar biliminde veri yapisi genellikle verilere verimli erisim icin secilen bir veri organizasyonu ve depolama bicimidir Daha dogrusu veri yapisi veri degerlerinin bunlar arasindaki iliskilerin ve verilere uygulanabilecek islevlerin veya islemlerin bir koleksiyonudur yani verilere iliskin cebirsel bir yapidir KullanimVeri yapilari soyut veri turlerinin ADT abstract data types temelini olusturur ADT veri tipinin mantiksal formunu tanimlar Veri yapisi veri tipinin fiziksel formunu uygular Farkli turdeki veri yapilari farkli turdeki uygulamalara uygundur ve bazilari belirli gorevlere oldukca uzmanlasmistir Ornegin iliskisel veritabanlari genellikle veri alimi icin B agaci dizinlerini kullanirken derleyici uygulamalari genellikle tanimlayicilari aramak icin karma tablolari kullanir Veri yapilari buyuk veritabanlari ve internet indeksleme hizmetleri gibi kullanimlar icin buyuk miktarlardaki verileri verimli bir sekilde yonetmeye yonelik bir arac saglar Genellikle verimli veri yapilari verimli algoritmalar tasarlamanin anahtaridir Bazi resmi tasarim yontemleri ve programlama dilleri yazilim tasariminda anahtar duzenleme faktoru olarak algoritmalardan ziyade veri yapilarini vurgular Veri yapilari hem ana bellekte hem de ikincil bellekte saklanan bilgilerin depolanmasini ve alinmasini duzenlemek icin kullanilabilir UygulamaVeri yapilari cesitli programlama dilleri ve teknikleri kullanilarak uygulanabilir ancak hepsi verileri verimli bir sekilde organize etmek ve depolamak gibi ortak bir hedefi paylasir Veri yapilari genellikle bir bilgisayarin kendisi de bellekte saklanabilen ve program tarafindan degistirilebilen bir bellek adresini temsil eden bir bit dizisi olan bir isaretci tarafindan belirtilen bellegindeki herhangi bir yere veri getirme ve saklama becerisine dayanir Dolayisiyla dizi ve kayit veri yapilari veri ogelerinin adreslerinin aritmetik islemlerle hesaplanmasina dayanirken baglantili veri yapilari veri ogelerinin adreslerinin yapinin kendisi icinde saklanmasina dayanir Veri yapilandirmasina yonelik bu yaklasimin algoritmalarin verimliligi ve olceklenebilirligi uzerinde derin etkileri vardir Ornegin dizilerdeki bitisik bellek tahsisi hizli erisim ve degisiklik islemlerini kolaylastirarak sirali veri isleme senaryolarinda performansin optimize edilmesini saglar Bir veri yapisinin uygulanmasi genellikle o yapinin orneklerini yaratan ve isleyen bir dizi prosedur yazmayi gerektirir Bir veri yapisinin verimliligi bu islemlerden ayri olarak analiz edilemez Bu gozlem soyut bir veri turu uzerinde gerceklestirilebilecek islemlerle dolayli olarak tanimlanan bir veri yapisi ve bu islemlerin matematiksel ozellikleri yer ve zaman maliyetleri dahil seklindeki teorik kavrami motive eder OrneklerGenellikle daha basit ilkel veri turleri uzerine insa edilen cok sayida veri yapisi turu vardir Iyi bilinen ornekler sunlardir Dizi belirli bir siradaki genellikle hepsi ayni turde olan bir dizi ogedir dile bagli olarak tek tek ogelerin tumu ayni turde olmaya zorlanabilir veya hemen hemen her turde olabilir Hangi ogenin gerekli oldugunu belirtmek icin ogelere bir tam sayi dizini kullanilarak erisilir Tipik uygulamalar dizilerin elemanlari icin bitisik hafiza kelimeleri tahsis eder ancak bu her zaman bir zorunluluk degildir Diziler sabit uzunlukta veya yeniden boyutlandirilabilir olabilir Baglantili liste ayni zamanda liste olarak da adlandirilir her dugumun kendine ait bir degere sahip oldugu ve baglantili listedeki bir sonraki dugume isaret ettigi dugum adi verilen herhangi bir turdeki veri ogelerinin dogrusal bir koleksiyonudur Baglantili listenin diziye gore temel avantaji listenin geri kalaninin yeri degistirilmeden degerlerin her zaman verimli bir sekilde eklenip cikarilabilmesidir Ancak belirli bir ogeye rastgele erisim gibi diger bazi islemler listelerde dizilere gore daha yavastir Bir kayit ayni zamanda tuple veya yapi olarak da adlandirilir toplu bir veri yapisidir Kayit genellikle sabit sayi ve sirayla diger degerleri iceren ve genellikle adlara gore dizine eklenen bir degerdir Kayitlarin ogelerine genellikle alanlar veya uyeler denir Nesne yonelimli programlama baglaminda kayitlar onlari nesnelerden ayiran duz eski veri yapilari olarak bilinir Hash haritalari olarak da bilinen hash tablolari anahtarlara dayali olarak degerlerin hizli bir sekilde alinmasini saglayan veri yapilaridir Anahtarlari bir dizideki indekslere eslemek icin bir karma islevi kullanirlar ve ortalama durumda sabit zamanli erisime izin verirler Hash tablolari sozluklerde onbelleklerde ve veritabani indekslemede yaygin olarak kullanilir Ancak performanslarini etkileyebilecek karma carpismalar meydana gelebilir Carpismalarin ustesinden gelmek icin zincirleme ve acik adresleme gibi teknikler kullanilir Grafikler varliklar arasindaki iliskileri temsil eden kenarlarla birbirine baglanan dugumlerin koleksiyonlaridir Grafikler diger seylerin yani sira sosyal aglari bilgisayar aglarini ve ulasim aglarini modellemek icin kullanilabilir Koselerden dugumler ve kenarlardan dugumler arasindaki baglantilar olusurlar Grafikler yonlu veya yonsuz olabilir dongulere sahip olabilir veya dongusel olmayabilir Grafik gecis algoritmalari genislik oncelikli aramayi ve derinlik oncelikli aramayi icerir Yiginlar ve kuyruklar diziler veya baglantili listeler kullanilarak uygulanabilen soyut veri turleridir Bir yiginin iki temel islemi vardir Son Giren Ilk Cikar LIFO prensibini takip eden push yiginin en ustune bir oge ekler ve pop yigindan en ustteki ogeyi kaldirir Kuyruklarin iki ana islemi vardir Enqueue siranin arkasina bir oge ekler ve dequeue siranin onunden bir ogeyi kaldirir Ilk Giren Ilk Cikar FIFO ilkesini izler Agaclar ogelerin hiyerarsik organizasyonunu temsil eder Bir agac kenarlarla birbirine baglanan dugumlerden olusur bir dugum koktur ve diger tum dugumler alt agaclari olusturur Agaclar cesitli algoritmalarda ve veri depolama senaryolarinda yaygin olarak kullanilmaktadir Ikili agaclar ozellikle yiginlar AVL agaclari ve B agaclari bazi populer agac turleridir Verilerin verimli ve optimum sekilde aranmasini siralanmasini ve hiyerarsik temsilini saglarlar Onek agaci olarak da bilinen bir trie dizelerin verimli bir sekilde alinmasi icin kullanilan ozel bir agac veri yapisidir Her kenar bir karakteri temsil edecek sekilde bir dizenin karakterlerini dugumler halinde depolamaya calisir Otomatik tamamlama yazim denetimi ve sozluk uygulamalari gibi metin isleme senaryolarinda ozellikle kullanislidirlar Denemeler dizelerde hizli arama ve onek tabanli islemleri mumkun kilar Dil destegiCogu montaj dili ve BCPL Temel Kombine Programlama Dili gibi bazi dusuk seviyeli diller veri yapilari icin yerlesik destekten yoksundur Ote yandan bircok ust duzey programlama dili ve MASM gibi bazi ust duzey montaj dilleri kayitlar ve diziler gibi belirli veri yapilari icin ozel sozdizimine veya diger yerlesik destege sahiptir Ornegin C BCPL nin dogrudan soyundan gelen ve Pascal dilleri vektorlere tek boyutlu diziler ve cok boyutlu dizilere ek olarak sirasiyla yapilari ve kayitlari destekler Cogu programlama dili veri yapisi uygulamalarinin farkli programlar tarafindan yeniden kullanilmasina izin veren bir tur kutuphane mekanizmasina sahiptir Modern diller genellikle en yaygin veri yapilarini uygulayan standart kutuphanelerle birlikte gelir Ornekler C Standart Sablon Kitapligi Java Koleksiyon Cercevesi ve Microsoft NET Cercevesidir Modern diller ayrica genellikle moduler programlamayi yani bir kutuphane modulunun arayuzu ile bunun uygulanmasi arasindaki ayrimi destekler Bazilari istemcilerin uygulama ayrintilarini gizlemesine olanak taniyan opak veri turleri saglar C Java ve Smalltalk gibi nesne yonelimli programlama dilleri genellikle bu amac icin siniflari kullanir Bilinen bircok veri yapisinin birden fazla bilgi islem is parcaciginin bir veri yapisinin tek bir somut ornegine ayni anda erismesine izin veren eszamanli versiyonlari vardir Ayrica bakinizSoyut veri turu Eszamanli veri yapisi Veri ornegi Dinamizasyon Baglantili veri yapisi Veri yapilarinin listesi Kalici veri yapisi Duz eski veri yapisi Queap Kisa ve oz veri yapisi Agac veri yapisi KaynakcaCormen Thomas H Leiserson Charles E Rivest Ronald L Stein Clifford 2009 Introduction to Algorithms Third Edition 3rd ed The MIT Press ISBN 978 0262033848 KaynakcaPeter Brass Advanced Data Structures Cambridge University Press 2008 ISBN 978 0521880374Daha fazla okumaAlfred Aho John Hopcroft and Jeffrey Ullman Data Structures and Algorithms Addison Wesley 1983 ISBN 0 201 00023 7Dis baglantilarDescriptions from the Dictionary of Algorithms and Data StructuresBilgisayar ile ilgili bu madde taslak seviyesindedir Madde icerigini genisleterek Vikipedi ye katki saglayabilirsiniz