Upload
hedy
View
60
Download
0
Embed Size (px)
DESCRIPTION
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 ); - PowerPoint PPT Presentation
Citation preview
1
Ders İçeriği• Bağlantılı Liste
– Tanım ve Operasyonları• İki Yönlü Bağlantılı Liste
– Tanım
2
Liste
class Liste { …
void add(int e); void add(int poz, int e); void remove(int poz); int indexOf(int e); int lastIndexOf(int e); bool clear(); bool IsEmpty(); int first(); int last(); int get(int poz); int size(); }
• Liste nedir?– A1, A2, …, AN şeklinde sıralı eleman dizisi
3
Liste Kullanımıpublic static void 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.
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
0 1 2 ……… N-1 MAX_SIZEA_1 A_2 A_3 ……… A_N-1
3A_4
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. 6
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
4 elemanlı bir liste (düğüm)
bagA_1 bagA_2 bagA_3 bagA_4düğüm
0 1 2 3Liste sonu
Liste: Bitişik ve Bağlı GerçekleştirimHafıza
A_1A_2
A_5
A_3A_4
012
AdresL0
L0 + cL0 + 2cL0 + 3cL0 + 4c
c bytes
Hafıza012
A_1 Y
A_5 NULL
A_3 Z
A_2 XA_4 W
Adres
T
W
X
YZ
Bitişik Bitişik olmayan(Bağlı)
Baş = T
son = W
9
Bağlantılı Liste: Genel Bakış
Liste düğümüne genel bakış
T, W, X, Y ve Z hafızada farklı yerlerdir
public class Dugum { public Dugum bag; public int veri;}
veridüğüm
bağ
bas = T
A_1 A_2 A_3 A_5A_4Y X Z W NULL
0 1 2 3 4
10
Bağlı Liste – Javaclass BagliListe { private Dugum bas; private Dugum son; private int eleSayisi;
public BagliListe(){ bas=son=null; eleSayisi=0; } public void add(int poz, int e); public void remove(int poz); public int indexOf(int e); public bool isEmpty(); public int first(); public int last(); public int get(int poz); public int size(); ...}
A_1 A_2 A_3 A_4NULL
0 1 2 3
Liste Operasyonları: 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
Liste Başı
bagA_1 bagA_2 A_3
p
NULL
X
düğüm
bagYeni düğüm Çalışma Zamanı?
O(N) – yeri bulmak içinO(1) – eklemek için
0 1 2
Liste Operasyonları: 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
Liste Başı
bagA_1 bagA_2 A_4
p
NULLbagA_3
q
0 1 2 3
Liste Operasyonları: remove• remove(Pozisyon P)
– Örnek: remove(2): 2 nolu yerdeki elemanı sil
Liste Başı
bagA_1 bagA_2 A_4
p
NULLbagA_3
q
Liste Başı
bagA_1 bagA_2 A_4
p
NULLbagA_3
q
Çalışma zamanı?elemanı bulmak – O(N), silmek – O(1)
0 1 2 3
0 1 2
Liste Operasyonları: indexOf• indexOf(Eleman Türü E)
– Örnek: indexOf(X): listede X’i arama
• Doğrusal Arama yapılmalı– Çalışma zamanı: O(N)
Liste başı
bagA_1 bagA_2 A_4 NULLbagA_30 1 2 3
Liste Operasyonları: isEmpty• isEmpty()
– Liste boşsa true döndür
• bas == NULL ise true döndür– Çalışma zamanı: O(1)
Liste Başı
bagA_1 bagA_2 A_4 NULLbagA_3
0 1 2 3
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 Başı
bagA_1 bagA_2 A_4 NULLbagA_3
Liste sonu
0 1 2 3
17
Liste: Çalışma Zamanı Karşılaştırması
Operasyon Dizi Tabanlı Liste Bağlantılı Liste
add O(N) O(N) or O(1)
remove O(N) O(N)
indexOf O(N) O(N)
isEmpty O(1) O(1)
first O(1) O(1)
last O(1) O(1)
get O(1) O(N)
size O(1) O(1)
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)
Liste başı
bagA_1 bagA_2 A_4
p
NULLbagA_3
0 1 2 3
İki Yönlü Bağlantılı ListeListe Başı
onceA_1 sonra onceA_2 sonra onceA_3 sonraNULL NULL
public class Dugum { public Dugum once; public Dugum sonra; public int veri;}
Dugum bas; Dugum son;
Liste Sonu
İki Yönlü Bağlantılı ListeListe Başı
onceA_1 sonra onceA_2 sonra onceA_3 sonraNULL NULL
Liste Sonu
• 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