1 / 20

Ders İçeriği

Ders İçeriği. Bağlantılı Liste Tanım ve Operasyonları İki Yönlü Bağlantılı Liste Tanım . List e. Liste nedir ? A1, A2, …, AN şeklinde sıralı eleman dizisi. class List e { …. void add ( int e); void add ( int po z , int e); void remove ( int po z );

hedy
Download Presentation

Ders İçeriği

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ders İçeriği • Bağlantılı Liste • Tanım ve Operasyonları • İki Yönlü Bağlantılı Liste • Tanım

  2. Liste • Liste nedir? • A1, A2, …, AN şeklinde sıralı eleman dizisi class Liste{ … void add(int e); void add(intpoz, int e); void remove(intpoz); intindexOf(int e); intlastIndexOf(int e); boolclear(); boolIsEmpty(); intfirst(); intlast(); intget(intpoz); intsize(); }

  3. Liste Kullanımı publicstaticvoid main(String[] args){ Liste liste = new Liste(); liste.add(10); // 10 liste.add(5); // 10, 5 liste.add(1, 7); // 10, 7, 5 liste.add(2, 9); // 10, 7, 9, 5 liste.indexOf(7); // Returns 1 liste.get(3); // Return 5 liste.remove(1); // 10, 9, 5 liste.size(); // Returns 3 liste.isEmpty(); // Returns false liste.remove(0); // 9, 5 liste.clear(); // boş liste }/* bitt-main */

  4. Liste: Gerçekleştirim • 2 tür gerçekleştirim var: • Dizi tabanlı - ArrayList • Bağlantılı liste - LinkedList • Dersin sonunda bu iki farklı gerçekleştirimin çalışma zamanlarını karşılaştıracagız.

  5. Liste: Dizi Tabanlı Gerçekleştirim • Temel fikir: • Büyük bir dizi için yer açın (MAX) • N değişkeni ile ilk boş yeri tutun • N = 0 ise liste boş • Silme veya ekleme işleminde elemanları kaydırın. • Dizi doluysa ne yapılabilir? • Daha büyük bir dizi için yer ayırın • Eski dizideki elemanları yeni diziye kopyalayın • Eski diziyi hafızadan silin • Bu işlemler birçok hafıza değişimine/işlemine neden olmaktadır 3 ……… 0 1 2 N-1 MAX_SIZE A_4 ……… A_1 A_2 A_3 A_N-1

  6. Bağlantılı Liste • Aynı kümeye ait veri parçalarının birbirine, bellek üzerinde, sanal olarak bağlanmasıyla oluşturulur. • Tüm veri, bir tren katarı gibi birbirine bağlı parçalardan oluşur. • Bağlantılı listede birisi veri, diğeri bağlantı bilgisi olmak üzere temelde iki kısım bulunur. • Veri kısmında o uygulama için gerekli olan bilgi bulunur. • Bağlantı kısmında bağlantının nereye yapılacağını gösteren bir veya birkaç adres bilgisi bulunabilir.

  7. Liste: Bağlantılı Liste • Temel fikir: • Her eleman için bir düğüm oluşturun • Düğünler hafızada sıralı değildirler. Hafızada farklı yerlerde tutulurlar. • Her eleman kendini takip eden bir sonraki elemanın hafızadaki yerini tutar • İlk elemanın yerini tutmanız gerekir. Liste basi Liste sonu 0 3 1 2 bag bag bag bag A_1 A_2 A_3 A_4 düğüm 4 elemanlı bir liste (düğüm)

  8. Hafıza 0 1 2 A_1 A_2 X W Z Y NULL A_3 A_5 A_4 Adres L0 A_1 c bytes L0 + c A_2 L0 + 2c A_3 L0 + 3c A_4 L0 + 4c A_5 Liste: BitişikveBağlı Gerçekleştirim Adres Hafıza 0 1 2 Baş = T T W X Y Z Bitişik olmayan(Bağlı) Bitişik

  9. Bağlantılı Liste: Genel Bakış düğüm public class Dugum { publicDugumbag; publicintveri; } veri bağ Liste düğümüne genel bakış son = W bas = T 3 4 0 1 2 Z A_1 Y X W A_4 A_5 NULL A_2 A_3 T, W, X, Y ve Z hafızada farklı yerlerdir

  10. Bağlı Liste – Java 3 0 1 2 classBagliListe{ privateDugumbas; privateDugumson; privateinteleSayisi; A_1 A_2 A_3 A_4 NULL publicBagliListe(){ bas=son=null; eleSayisi=0; } publicvoid add(intpoz, int e); publicvoid remove(intpoz); publicintindexOf(int e); publicboolisEmpty(); publicintfirst(); publicintlast(); publicintget(intpoz); publicintsize(); ... }

  11. ListeOperasyonları: add • add(Pozisyon P, Eleman Türü E) • Örnek: add(2, X):2 nolu pozisyona X elemanını ekle • Algoritma: (1) X’in nereye ekleneceğini bul (p’den sonra) (2) X elemanını içeren yeni bir düğüm oluştur (3) Düğümde bag kısmını güncelle 0 1 2 Liste Başı bag bag A_1 A_2 A_3 NULL p Yeni düğüm Çalışma Zamanı? O(N) – yeri bulmak için O(1) – eklemek için bag X düğüm

  12. ListeOperasyonları: remove • remove(Pozisyon P) • Örnek: remove(2):2 nolu yerdeki elemanı sil • Öncelikle sileceğimiz elemanın yerini bulmamız lazım. • p ile gösterilen düğümü silebilir miyim? • Bir önceki düğümü de tutman gerekir • Sileceğim düğümü bulurken bir önceki düğümü de izlemem gerekir(q değişkeni p değişkenini liste boyunca izler) • Şimdi düğümün bag kısmını güncellemem gerekiyor • q.bag = p.bag 1 0 2 3 Liste Başı bag bag bag A_1 A_2 A_4 NULL A_3 p q

  13. Liste Operasyonları: remove • remove(Pozisyon P) • Örnek: remove(2):2 nolu yerdeki elemanı sil 1 0 2 3 Liste Başı bag bag bag A_1 A_2 A_4 NULL A_3 1 0 2 p p q q Liste Başı bag bag bag A_1 A_2 A_4 NULL A_3 Çalışma zamanı? elemanı bulmak – O(N), silmek – O(1)

  14. ListeOperasyonları: indexOf • indexOf(Eleman Türü E) • Örnek: indexOf(X): listede X’i arama • Doğrusal Arama yapılmalı • Çalışma zamanı: O(N) 1 0 2 3 Liste başı bag bag bag A_1 A_2 A_4 NULL A_3

  15. Liste Operasyonları: isEmpty • isEmpty() • Liste boşsa true döndür • bas == NULL ise true döndür • Çalışma zamanı: O(1) 1 0 2 3 Liste Başı bag bag bag A_1 A_2 A_4 NULL A_3

  16. Liste Operasyonları: first, last, get • first() • last() • get(Pozisyon K) • first – Çalışma zamanı: O(1) • last – Çalışma zamanı: O(1) – listenin sonunu tutarsak • get – Çalışma zamanı: O(N) Liste sonu 1 0 2 3 Liste Başı bag bag bag A_1 A_2 A_4 NULL A_3

  17. Liste: Çalışma Zamanı Karşılaştırması

  18. Silme İşlemi • Sileceğimiz düğüm elimizde zaten varsa ne yapabiliriz? • remove(Dugum p); • Hala bir önceki düğümü tutmamız lazım • Bir önceki pozisyonu bulmak için çalışma zamanı O(N) • Bu işlemi daha hızlı yapabilir miyiz? • Eğer bir önceki elemanın yerini tutarsak. EVET! • İki yönlü bağlantılı liste (Double Linked List) 1 0 2 3 Liste başı bag bag bag A_1 A_2 A_4 NULL A_3 p

  19. İki Yönlü Bağlantılı Liste Liste Sonu Liste Başı once sonra once sonra once sonra A_3 A_1 A_2 NULL NULL public class Dugum { publicDugumonce; publicDugumsonra; publicintveri; } Dugumbas; Dugumson;

  20. İki Yönlü Bağlantılı Liste Liste Sonu Liste Başı once sonra once sonra once sonra A_3 A_1 A_2 NULL NULL • Avantajları: • remove(Dugum p)  O(1) • previous(Dugum p)  O(1) • Liste üzerinde ileri ve geri gitmeyi sağlar • Dezavantajları: • Hafıza kullanımı (her düğümde fazladan bir yer tutulması) • Güncelleme işlemlerinde daha fazla işlem ve karmaşıklık

More Related