250 likes | 432 Views
Ders İçeriği. List e Tanım ve Operasyonları Soyut veri yapısı (ADT) Tanım & fonksiyonlar Li ste Gerçekleştirimi : ArrayList JAVA Koleksiyon API (Collections API) Tekrarlayıcı (Iterator) Uygulama – Java ile ArrayList Gerçekleştirimi. List e(List) - Tanım. Liste ?
E N D
Ders İçeriği • Liste • Tanım ve Operasyonları • Soyut veri yapısı (ADT) • Tanım & fonksiyonlar • Liste Gerçekleştirimi: ArrayList • JAVA Koleksiyon API (Collections API) • Tekrarlayıcı (Iterator) • Uygulama – Java ile ArrayList Gerçekleştirimi
Liste(List) - Tanım • Liste ? • A1, A2, …, An şeklinde eleman dizisi. • Elemanlar rastgele olabilir, fakat aynı tüde olmalı ( hepsitamsayı (int), hepsi ondalık sayı (double)vb) • Örnek5 elemanlı liste (indis 0-4 arasında) • 2, 6, 1, 2, 3 • 2’nin indisi 0 • 6’nın indisi 1 • 1’in indisi 2 • 2’nin indisi 3 • 3’ün indisi 4
ListeOperasyonları: 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
Liste Operasyonları: silme • Listede olan bir elemanı silme • 4, 6, 1, 4, 5 sil(2) 4, 6, 4, 5 • 4, 6, 1, 4, 5 sil(0) 6, 1, 4, 5 • 4, 6, 1, 4, 5 sil(1) 4, 1, 4, 5 • 4, 6, 1, 4, 5 sil(4) 4, 6, 1, 4
Liste Operasyonları: indis & sonIndis • indisyordamı listedeki ilk eşleşen elemanın indisini döndürür. • 4, 6, 1, 4, 5 indis(6) • 4, 6, 1, 4, 5 indis(5) • 4, 6, 1, 4, 5 indis(4) • sonIndisyordamı ise listedeki eşleşen son elemanın indisini döndürür • 4, 6, 1, 4, 5 sonIndis(1) • 4, 6, 1, 4, 5 sonIndis(4) 1 4 0 2 3
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 • setyordamı 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
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.
Soyut Veri Tipleri (ADT) - devam • Soyut veri tipleri operasyonları olan veri yapısıdır. özellik (ADT durum) … … İşlemler (ADT Yordamları) islem1(…) islem2(…) islem3(…) … … …
Liste class Liste{ … void add(int e); // sona ekle void add(int pos, int e); // belirli pozisyona ekle void remove(int pos); // sil intindexOf(int e); // baştan arama intlastIndexOf(int e); // sondan arama boolclear(); // Tüm elemanları sil boolisEmpty(); // liste boş mu? intfirst(); // ilk eleman intlast(); // son eleman intget(int pos); // belirli pozisyondaki değer intsize(); // listedeki eleman sayısı }
Liste Kullanımı Publicstaticvoid main(String[] args){ Listlist = new List(); // boş bir liste oluştur list.add(10); // 10 list.add(5); // 10, 5 list.add(1, 7); // 10, 7, 5 list.add(2, 9); // 10, 7, 9, 5 list.indexOf(7); // 1 döndürür list.get(3); // 5 döndürür list.remove(1); // 10, 9, 5 list.size(); // 3 döndürür list.isEmpty(); // false döndürür list.remove(0); // 9, 5 list.clear(); // boş liste delete list; // Liste nesnesini sil }/* bitti-main */
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.
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. 3 ……… 0 1 2 N-1 MAX A_4 ……… A_1 A_2 A_3 A_N-1
ArrayList – Java ArrayList ADT classArrayList{ privateintkapasite; privateintelemSayisi; privateint[]items; // Yapıcı yordam: // Boş liste oluştur publicArrayList(){ int[] items = new int[4]; kapasite = 4; elemSayisi = 0; } // bitti-ArrayList ArrayList ();//Yapıcı y. void add(int pos, int e); void remove(int pos); intindexOf(int e); boolisEmpty(); intfirst(); intlast(); intget(int pos); intsize(); }
Liste Operasyonları : add • add(pizisyon P, ElemanTü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. • X eklendikten sonraki görüntü. • Çalışma zamanı: O(N) 3 ……… 0 1 2 N-1 MAX A_4 ……… A_1 A_2 A_3 A_N 0 1 2 N-1 N 3 ……… MAX A_1 A_2 X A_N-1 A_N A_3 ………
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: • Daha büyük bir dizi oluştur (genellikle kapasite 2 kat arttırılır) • Eski dizideki tüm elemanları yeni diziye kopyala • Eski diziyi sil • Yeni diziyi kullanmaya başla • Bu dinamik dizi gerçekleştiriminde ayrıca kapasiteyi de kontrol altında tutulması gerekmektedir.
ListeOperasyonları: silme • remove(pozisyon P) • Örnek: remove(1):1 nolu pozisyondaki elamanı sil • Temel fikir: Elemanı sil ve elemanları sola bir adım kaydır. • Listenin son durumu. Çalışma zamanı: O(N) 3 ……… 0 1 2 N-1 MAX A_4 ……… A_1 A_2 A_3 A_N 0 1 2 N-2 N-1 3 ……… MAX A_1 A_3 A_4 A_N A_5 ………
Liste Operasyonları: indexOf • indexOf(elemanTürü E) • Örnek: indexOf(X): Listede X’i arama • Doğrusal arama yapılmalı • Çalışma zamanı: O(N) 3 ……… 0 1 2 N-1 MAX A_4 ……… A_1 A_2 A_3 A_N
Liste Operasyonları: isEmpty • isEmpty() • Eğer liste boşsa true döndür • Eğer liste doluysa false döndür • Eğer N == 0 ise true döndür • Çalışma zamanı: O(1) 3 ……… 0 1 2 N-1 MAX_SIZE A_4 ……… A_1 A_2 A_3 A_N
Lists Operations: first, last, get • first(): Return A[0] • last(): Return A[N-1] • get(pozisyon K): Return A[K] • first – Running time: O(1) • last – Running time: O(1) • get – Running time: O(1) 3 ……… 0 1 2 N-1 MAX_SIZE A_4 ……… A_1 A_2 A_3 A_N
JAVA Koleksiyon (Collection) API • Veri yapıları: veri üzerinde izin verilen 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.
Tekrarlayıcı (Iterator) • Ö.ğ. ArrayList elemanları ekrana yazdırma. • liste nesnesinin ArrayList olduğu düşünülürse for(int i=0 ; i < liste.size() ; i++) System.out.println( liste.get(i) ); • Burada i iterasyonnesnemiz. • Çünkü, tekrarı kontrol eden nesnemiz.
Tekrarlayıcı (Iterator) • Dizideki elemanları ekrana yazdırma. Iterator i = liste.iterator(); while( i.hasNext() ) System.out.println( i.next() );
Uygulama • ArrayList sınıfı gerçekleştirimi • Aşağıdaki yordamları yazınız. • 5 kapasiteli dizi oluşturan yapıcı yordam • void add(int e); • void add(intpos, int e); //isteğe bağlı • void remove(intpos); //isteğe bağlı • intindexOf(int e); • intlastIndexOf(int e); • boolclear(); //isteğe bağlı • boolisEmpty(); • intfirst(); • intlast(); • intget(intpos); • intsize();