Ders erii Liste Tanm ve Operasyonlar Soyut veri

  • Slides: 25
Download presentation
Ders İçeriği • Liste – Tanım ve Operasyonları • Soyut veri yapısı (ADT) –

Ders İçeriği • Liste – Tanım ve Operasyonları • Soyut veri yapısı (ADT) – Tanım & fonksiyonlar • Liste Gerçekleştirimi: Array. List • JAVA Koleksiyon API (Collections API) – Tekrarlayıcı (Iterator) • Uygulama – Java ile Array. List Gerçekleştirimi 1

 • Liste ? Liste(List) - Tanım – A 1, A 2, …, An

• Liste ? Liste(List) - Tanım – A 1, A 2, …, An şeklinde eleman dizisi. – Elemanlar rastgele olabilir, fakat aynı tüde olmalı ( hepsi tamsayı (int), hepsi ondalık sayı (double) vb) • Örnek 5 elemanlı liste (indis 0 -4 arasında) – 2, 6, 1, 2, 3 • • • 2’nin indisi 6’nın indisi 1’in indisi 2’nin indisi 3’ün indisi 0 1 2 3 4 2

Liste Operasyonları: ekleme • Listenin sonuna yeni eleman ekleme – 4, 6, 1, 4,

Liste Operasyonları: ekleme • Listenin sonuna yeni eleman ekleme – 4, 6, 1, 4, 5 ekle(8) 4, 6, 1, 4, 5, 8 • Elemanı listenin herhangi bir pozisyonuna ekleme – 4, 6, 1, 4, 5 ekle(2, 9) 4, 6, 9, 1, 4, 5 3

Liste Operasyonları: silme • Listede olan bir elemanı silme – – 4, 6, 1,

Liste Operasyonları: silme • Listede olan bir elemanı silme – – 4, 6, 1, 4, 5 sil(2) 4, 6, 4, 5 sil(0) 6, 1, 4, 5 sil(1) 4, 1, 4, 5 sil(4) 4, 6, 1, 4 4

Liste Operasyonları: indis & son. Indis • indis yordamı listedeki ilk eşleşen elemanın indisini

Liste Operasyonları: indis & son. Indis • indis yordamı listedeki ilk eşleşen elemanın indisini döndürür. – 4, 6, 1, 4, 5 indis(6) 1 – 4, 6, 1, 4, 5 indis(5) 4 – 4, 6, 1, 4, 5 indis(4) 0 • son. Indis yordamı ise listedeki eşleşen son elemanın indisini döndürür – 4, 6, 1, 4, 5 son. Indis(1) 2 – 4, 6, 1, 4, 5 son. Indis(4) 3 5

Liste Operasyonları: get & set • get yordamı parametre olarak verilen indisteki değeri döndürür.

Liste Operasyonları: get & set • get yordamı parametre olarak verilen indisteki değeri döndürür. – 4, 6, 1, 4, 5 get(1) 6 – 4, 6, 1, 4, 5 get(3) 4 – 4, 6, 1, 4, 5 get(0) 4 • set yordamı verilen indisteki değeri verilen değere atar. – 4, 6, 1, 4, 5 set(1, 9) 4, 9, 1, 4, 5 – 4, 6, 1, 4, 5 set(3, 5) 4, 9, 1, 5, 5 – 4, 6, 1, 4, 5 set(4, 7) 4, 9, 1, 4, 7 6

Soyut Veri Tipleri (Abstract Data Type - ADT) • Şimdiye kadar Soyut veri tiplerinin

Soyut Veri Tipleri (Abstract Data Type - ADT) • Şimdiye kadar Soyut veri tiplerinin (ADT) operasyonlarına baktık. – Operasyonlarda ADT’nin nasıl davrandığı gösterildi, fakat nasıl gerçekleştirildiği konusuna değinilmedi. – Çoğu zaman ADT’yi gerçekleştirmek için birden fazla yol vardır. 7

Soyut Veri Tipleri (ADT) - devam • Soyut veri tipleri operasyonları olan veri yapısıdır.

Soyut Veri Tipleri (ADT) - devam • Soyut veri tipleri operasyonları olan veri yapısıdır. özellik (ADT durum) … … İşlemler (ADT Yordamları) islem 1(…) islem 2(…) islem 3(…) … … … 8

Liste class Liste { … void int bool int int add(int e); add(int pos,

Liste class Liste { … void int bool int int add(int e); add(int pos, int e); remove(int pos); index. Of(int e); last. Index. Of(int e); clear(); is. Empty(); first(); last(); get(int pos); size(); // // // sona ekle belirli pozisyona ekle sil baştan arama sondan arama Tüm elemanları sil liste boş mu? ilk eleman son eleman belirli pozisyondaki değer listedeki eleman sayısı } 9

Liste Kullanımı Public static void main(String[] args){ List list = new List(); // boş

Liste Kullanımı Public static void main(String[] args){ List list = new List(); // boş bir liste oluştur list. add(10); list. add(5); list. add(1, 7); list. add(2, 9); // // 10 10, 5 10, 7, 9, 5 list. index. Of(7); list. get(3); list. remove(1); list. size(); list. is. Empty(); // // // 1 döndürür 5 döndürür 10, 9, 5 3 döndürür false döndürür list. remove(0); list. clear(); // 9, 5 // boş liste delete list; }/* bitti-main */ // Liste nesnesini sil 10

Liste: Gerçekleştirim • İki tür gerçekleştirim vardır: – Dizi tabanlı – Bağlantılı liste •

Liste: Gerçekleştirim • İki tür gerçekleştirim vardır: – Dizi tabanlı – Bağlantılı liste • ADT operasyonlarının farklı gerçekleştirimlerinin çalışma zamanını karşılaştıralım. 11

Liste: Dizi tabanlı gerçekleştirim • Temel fikir: – – Büyük bir dizi için yer

Liste: Dizi tabanlı gerçekleştirim • Temel fikir: – – Büyük bir dizi için yer açın (MAX) N ile ilk boş yeri tutun N = 0 ise liste boş Silme veya ekleme işleminde elemanları kaydırın. 0 1 2 3 ……… N-1 A_2 A_3 A_4 ……… A_N-1 MAX

Array. List – Java Array. List ADT class Array. List { private int kapasite;

Array. List – Java Array. List ADT class Array. List { private int kapasite; private int elem. Sayisi; private int[] items; // Yapıcı yordam: // Boş liste oluştur public Array. List(){ int[] items = new int[4]; kapasite = 4; elem. Sayisi = 0; } // bitti-Array. List (); //Yapıcı y. void add(int pos, int e); void remove(int pos); int index. Of(int e); bool is. Empty(); int first(); int last(); int get(int pos); int size(); } 13

Liste Operasyonları : add • add(pizisyon P, Eleman. Türü E) – Örnek: add(2, X):

Liste Operasyonları : add • add(pizisyon P, Eleman. Türü E) – Örnek: add(2, X): X’i 2 nolu pozisyona ekle • Temel Fikir: Yeni elemanı eklemek için elemanları 1 birim sağa kaydır. 0 1 2 3 ……… N-1 A_2 A_3 A_4 ……… A_N MAX • X eklendikten sonraki görüntü. • Çalışma zamanı: O(N) 0 1 2 3 ……… A_1 A_2 X A_3 ……… N-1 N A_N-1 A_N MAX

Add – Dolu Dizi • Eğer dizi doluysa ne yapılabilir? – Hata döndürülebilir. •

Add – Dolu Dizi • Eğer dizi doluysa ne yapılabilir? – Hata döndürülebilir. • – Tercih edilmez. Genel olarak aşağıdakiler yapılır: (1) Daha büyük bir dizi oluştur (genellikle kapasite 2 kat arttırılır) (2) Eski dizideki tüm elemanları yeni diziye kopyala (3) Eski diziyi sil (4) Yeni diziyi kullanmaya başla – Bu dinamik dizi gerçekleştiriminde ayrıca kapasiteyi de kontrol altında tutulması gerekmektedir.

Liste Operasyonları: silme • remove(pozisyon P) – Örnek: remove(1): 1 nolu pozisyondaki elamanı sil

Liste Operasyonları: silme • remove(pozisyon P) – Örnek: remove(1): 1 nolu pozisyondaki elamanı sil • Temel fikir: Elemanı sil ve elemanları sola bir adım kaydır. 0 1 2 3 ……… N-1 A_2 A_3 A_4 ……… A_N MAX • Listenin son durumu. Çalışma zamanı: O(N) 0 1 2 3 ……… N-2 A_1 A_3 A_4 A_5 ……… A_N N-1 MAX

Liste Operasyonları: index. Of • index. Of(eleman. Türü E) – Örnek: index. Of(X): Listede

Liste Operasyonları: index. Of • index. Of(eleman. Türü E) – Örnek: index. Of(X): Listede X’i arama 0 1 2 3 ……… N-1 A_2 A_3 A_4 ……… A_N • Doğrusal arama yapılmalı – Çalışma zamanı: O(N) MAX

Liste Operasyonları: is. Empty • is. Empty() – Eğer liste boşsa true döndür –

Liste Operasyonları: is. Empty • is. Empty() – Eğer liste boşsa true döndür – Eğer liste doluysa false döndür 0 1 2 3 ……… N-1 A_2 A_3 A_4 ……… A_N • Eğer N == 0 ise true döndür – Çalışma zamanı: O(1) MAX_SIZE

Lists Operations: first, last, get • first(): Return A[0] • last(): Return A[N-1] •

Lists Operations: first, last, get • first(): Return A[0] • last(): Return A[N-1] • get(pozisyon K): Return A[K] 0 1 2 3 ……… N-1 A_2 A_3 A_4 ……… A_N • first – Running time: O(1) • last – Running time: O(1) • get – Running time: O(1) MAX_SIZE

JAVA Koleksiyon (Collection) API • Veri yapıları: veri üzerinde izin verilerin ve operasyonların gösterilmesidir.

JAVA Koleksiyon (Collection) API • Veri yapıları: veri üzerinde izin verilerin ve operasyonların gösterilmesidir. • Genel veri yapıları verileri toplar ve bu veriler üzerinde ekleme, silme, erişme gibi işlemlere izin verir. • JAVA Collections API arayüzü genel veri yapılarını ve bu veri yapıları üzerinde genel işlemleri destekler. 20

JAVA Koleksiyon(Collections) API 21

JAVA Koleksiyon(Collections) API 21

JAVA Koleksiyon(Collections) API 22

JAVA Koleksiyon(Collections) API 22

Tekrarlayıcı (Iterator) • Ö. ğ. Array. List elemanları ekrana yazdırma. – liste nesnesinin Array.

Tekrarlayıcı (Iterator) • Ö. ğ. Array. List elemanları ekrana yazdırma. – liste nesnesinin Array. List olduğu düşünülürse for(int i=0 ; i < liste. size() ; i++) System. out. println( liste. get(i) ); • Burada i iterasyon nesnemiz. – Çünkü, tekrarı kontrol eden nesnemiz. 23

Tekrarlayıcı (Iterator) • Dizideki elemanları ekrana yazdırma. Iterator i = liste. iterator(); while( i.

Tekrarlayıcı (Iterator) • Dizideki elemanları ekrana yazdırma. Iterator i = liste. iterator(); while( i. has. Next() ) System. out. println( i. next() ); 24

Uygulama • Array. List sınıfı gerçekleştirimi • Aşağıdaki yordamları yazınız. – 5 kapasiteli dizi

Uygulama • Array. List sınıfı gerçekleştirimi • Aşağıdaki yordamları yazınız. – 5 kapasiteli dizi oluşturan yapıcı yordam – – – void int bool int int add(int e); add(int pos, int e); //isteğe bağlı remove(int pos); //isteğe bağlı index. Of(int e); last. Index. Of(int e); clear(); //isteğe bağlı is. Empty(); first(); last(); get(int pos); size(); 25