Soyut Veri Tipi ve Veri Yapısı


32

Bu şartları anlamak benim için oldukça zor. Google'da aradım ve Wikipedia'da biraz okudum ama hala emin değilim. Şimdiye dek belirledim:

Özet Veri Türü , yeni bir tür tanımı, özelliklerini ve işlemlerini açıklar.

Veri Yapısı bir ADT uygulamasıdır. Birçok ADT aynı Veri Yapısı olarak uygulanabilir.

Doğru düşünürsem, ADT olarak dizi, elemanların bir koleksiyonu ve Veri Yapısı olarak bir bellekte nasıl depolandığı anlamına gelir. Yığın, pop işlemleri ile ADT yığını, ancak algoritmamda bir dizi olarak uygulanan yığını kullandıysam yığın veri yapısını söyleyebilir miyiz? Ve neden yığın ADT değil? Ağaç veya bir dizi olarak uygulanabilir.


3
Önce siz okumak isteyebilirsiniz Array ve Bir Yığın arasındaki fark nedir?
Chrisaycock


Yanıtlar:


24

Basitçe söylemek gerekirse, bir Veri Yapısı somutken, bir ADT (Özet Veri Türü) daha mantıklı bir tanımdır.

Bir ADT'yi, verilerin ve işlemek ve değiştirmek için kullanılan işlemlerin bir resmi olarak düşünün.

Veri Yapısı gerçek, somut şeydir . Bir algoritma içinde uygulanabilir ve kullanılabilir.


ancak bir algoritma içerisinde bir Stack ve Queue de (ADT olan) uygulayabilirim. yok hayır?
FedericoCapaldo

Yığın ve Kuyruk, belirli bilgisayar bilimi anlamlarına sahip mantıksal gösterimlerdir. Ancak, C #, Java, Go veya [dilinizi adlandırın] içindeki bir Queue uygulaması biraz farklı olacaktır. Sıra kavramı ADT'dir, Java Sırası bir Veri Yapısıdır. C # Stack uygulaması ile aynı.
Berin Loritsch

53

ADT, bir veri yapısının sınıfa ne olduğunu ( nasıl yapar ) bir arayüze ( ne yapar ) etmektir .

Birkaç örnek:

ADT: List
DS:  ArrayList, LinkedList...

ADT: Map
DS:  HashMap, TreeMap...

Sanırım konuyu anladın.


ADT veri yapısının genel türü olarak söylenebilir mi?
Owais Qureshi

1
Bu işaretli cevap olmalıdır. Layman için daha basit olduğu söylenemezdi.
deppfx

teşekkürler @dagnelies basit ve etkili cevap için. Bu cevap olarak işaretlenmelidir.
Sarun UK

1
Emin değilim ama burada kelimelerde küçük yeniden düzenlemesi tercih nedenleri: ADT is to a Data Structure, what an Interface (what it does) is to a Class (how it does it). Örnekler çok açık.
Aditya MP,

10

Özet Veri Türü: ADT, herhangi bir özel uygulamadan bağımsız olarak tam olarak belirtilen bir dizi veri değeri ve ilgili işlemler olarak tanımlanabilir. Dolayısıyla, Soyut Veri Türü, organize bir bilgi toplama ve bu bilgiyi yönetmek için kullanılan bir dizi işlemdir. İşlem kümesi ADT'nin arayüzünü tanımlar. ADT, arayüzün koşullarını yerine getirdiği sürece, ADT'nin nasıl uygulandığı önemli değildir. ADT'de, veri değerleri ve işlemleri bir bilgisayar dilinde bir uygulama yerine matematiksel bir hassasiyetle tanımlandığından, işlemlerin etkileri, bir programın veri türünü uygulayıp uygulamaması gibi diğer soyut veri tipleriyle ilişkileri hakkında düşünebiliriz.

Soyut veri tipi (ADT) ile somut veri tipi arasındaki temel fark, ikincisinin somut gösterime bakmamıza izin vermesidir; Bir ADT saf ADT veya Güncellenebilir ADT olabilir. Saf bir ADT, tüm işlemlerin saf işlevler olduğu bir işlemdir. Bu, işlemlerin hiçbir yan etkisi olmadığı anlamına gelir. Özellikle, orada girdi argümanlarını değiştirmez veya güncellemezler. Yalnızca bu argümanları, ADT'nin (veya diğer türlerin) yeni değerleri olan çıktı üretmek için kullanırlar. Çoğu beton türü saftır. Örneğin, tamsayılar üzerinde işlem yapılmaması bir tamsayıyı değiştirmez. Bunun yerine, '+' gibi tüm işlemler yeni çıktılar üretir.

Güncellenebilir bir ADT, bazı işlemlerin ADT'nin değerlerini gerçekten değiştirdiği işlemdir. Örneğin, bir yığını argüman olarak alan ve değiştiren 'pop' adında bir işlem yaptığımızı varsayalım. (“Yerinde”, “yıkıcı”) en yüksek öncelikli maddeyi kaldırarak. Bu işlem saf değildir ve ADT'nin tamamı da saf olmazdı. Bir ADT kullanıcı tanımlı ADT olabilir.

Soyut Veri Türünün aşağıdaki iki koşulu karşılayan bir veri türü olduğunu biliyoruz:

  1. Tip ve işlemlerin temsili veya tanımı tek bir sözdizimsel birimde bulunur.

  2. Türün nesnelerinin temsili, türü kullanan program birimlerinden gizlenir, bu nedenle yalnızca bu nesneler üzerinde doğrudan işlem yapılması, türün tanımında sağlananlardır.

Kullanıcı tarafından tanımlanan Özet Veri Türü şunları sağlamalıdır:

  1. Program birimlerinin türün değişkenlerini bildirmesine izin veren, ancak bu değişkenlerin gösterimini gizleyen bir tür tanımı.

  2. Türdeki nesneleri işlemek için yapılan işlemler kümesi.

Kullanıcı tanımlı bir soyut veri tipine örnek yapıdır. 'C' dört temel tür sağlar: int, char, float ve double. Bununla birlikte, 'C' programcıya kendi türlerini tanımlayabilme yeteneği de sunar. Yapı böyle bir örnektir. Yapı, her bir parçanın varolan bir türden olduğu farklı parçaların toplamıdır.

struct abc

{int x;

float y;

};

Yukarıdaki yapı tanımı herhangi bir değişken oluşturmaz, aksine yeni bir tür oluşturur. Bu tür değişkenler, yerleşik bir tür değişkenlere benzer şekilde oluşturulabilir.

struct abc a;

Typedef anahtar sözcüğü, yeni türlerimiz için yeni tür adları oluşturmamızı sağlar.

Örneğin:

typedef struct abc AB;

AB, şimdi yeni türler oluşturmak için kullanılabilecek yeni bir tür adıdır.

AB b;

Veri Yapıları: Veri yapılarının karakteristik özellikleri aşağıdadır:

  1. Atom veya başka bir veri yapısı (hala bir etki alanı) olabilen bileşen veri öğelerini içerir.

  2. Bir veya daha fazla bileşen öğesinde işlem kümesi.

  3. Bileşenlerin birbirleriyle ve yapı ile bir bütün olarak nasıl ilişkili olduğuna dair kuralları tanımlar (iddialar).

Veri Yapıları:

Bir veri yapısı statik veya dinamik olabilir. Statik veri yapısının sabit bir boyutu vardır. Bu anlam statik değiştiricinin anlamından farklıdır. Diziler statiktir; Sahip olabileceği element sayısını tanımladığımızda, sayı değişmez. Dinamik bir veri yapısı yürütme zamanında içeriğinin gerektirdiği şekilde büyür ve küçülür. Bağlantılar kullanılarak dinamik bir veri yapısı uygulanır.

Veri yapıları ayrıca doğrusal veri yapıları ve doğrusal olmayan veri yapıları olarak kategorize edilebilir. Doğrusal veri yapılarında, ilk ve son elemanlar hariç, her bir bileşenin benzersiz bir öncül ve halefi vardır; bu tür türleri temsil eder.


0

Her şeyden önce, veri yapılarındaki terminolojiler çok kafa karıştırıcı olabilir.

ADT , bir veri yapısının nasıl davranması gerektiğini, ne tür işlemleri desteklemesi gerektiğini vb. Anlatan teori veya model veya kılavuz vb. Gibidir. Üç temel soyut veri tipi konteynerler, sözlükler ve öncelik sıralarıdır. Örneğin sözlük, bu ADT sözlüğünü uygulayan her veri yapısının anahtar-değer çiftlerini desteklemesi, anahtarlara göre arama, öğelerin eklenmesi, halefi bulma ve verilen bir anahtarın öncüsü vb.

Şimdi bunu ADT'yi uygulayan her şey Veri yapısıdır (DS) , Veri yapısı problemlerinize uyguladığınız ve kütüphanelerin içinde bulduğunuz gerçek şeylerdir. Sözlük durumunda, Dizi veya Bağlantılı liste üzerinden uygulamayı seçebilirsiniz.

Bence birileri DS'lerini ADT olarak adlandırdığında, örneğin bazı insanlar yukarıda belirtilen DS'lerini tamamen yasal olan DictImplementation yerine 'Sözlük' olarak adlandırırlarsa, gerçek karışıklık ortaya çıkar.

Ref: Skiena: Algoritma tasarım kılavuzu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.