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

Ders İçeriği

  • 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

Page 1: Ders İçeriği

1

Ders İçeriği• Bağlantılı Liste

– Tanım ve Operasyonları• İki Yönlü Bağlantılı Liste

– Tanım

Page 2: Ders İçeriği

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

Page 3: Ders İçeriği

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 */

Page 4: Ders İçeriği

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.

Page 5: Ders İçeriği

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

Page 6: Ders İçeriği

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

Page 7: Ders İçeriği

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

Page 8: Ders İçeriği

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

Page 9: Ders İçeriği

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

Page 10: Ders İçeriği

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

Page 11: Ders İçeriği

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

Page 12: Ders İçeriği

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

Page 13: Ders İçeriği

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

Page 14: Ders İçeriği

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

Page 15: Ders İçeriği

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

Page 16: Ders İçeriği

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

Page 17: Ders İçeriği

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)

Page 18: Ders İçeriği

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

Page 19: Ders İçeriği

İ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

Page 20: Ders İçeriği

İ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