ݺߣ

ݺߣShare a Scribd company logo
YZM 2116
Veri Yap?lar?
Yrd. Do?. Dr. Deniz KILIN?
Celal Bayar ?niversitesi
Hasan Ferdi Turgutlu Teknoloji Fakltesi
Yaz?l?m Mhendisli?i
B?L?M - 3
Bu b?lmde,
? Motivasyon: Neden Listeye ?htiya? Var?
? Ba?l? Liste (Linked List)Veri Yap?s?
konusuna de?inilecektir.
Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
3Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
? Dizi, bellek y?neticisi taraf?ndan atanan ve
uzunlu?u ba?tan belli ard???k bir haf?zada
saklan?r.
? int[] A = {6, 5, 4, 2} ?eklinde 4 elemanl?
int trnde bir dizi oldu?unu varsayal?m.
? Haf?zaya s?rayla
o int x = 8; say?s?n? ve
o daha sonra A dizisini
saklad???m?z? d?nelim.
Motivasyon: Neden Listeye ?htiya? Var?
4Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
int x = 8;
int[] A = {6, 5, 4, 2};
Motivasyon: Neden Listeye ?htiya? Var?
Haf?za
A_1
A_2
x
A_3
A_4
0
1
2
Adres
L0
L0 + c
L0 + 2c
L0 + 3c
L0 + 4c
c byte
Nas?l bir bellek organizasyonu
bekliyoruz?
5Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
? Dizi i?in ayr?lan b?lmn srekli adreslerden
olu?tu?una dikkat edelim.
? Bu diziye yeni bir eleman (?rne?in 3) eklemek
istedi?imizde
o 2den sonraki alan, yani 217 nolu haf?za dolu
oldu?u i?in haf?zay? geni?letme se?ene?imiz
yoktur.
? ??zm olarak ne yapabiliriz?
Motivasyon: Neden Listeye ?htiya? Var?
6Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
? ??zm olarak bir?ok haf?za de?i?imi ve i?lemi
gerektiren a?a??daki ad?mlar uygulan?r:
o Daha byk bir dizi i?in yer alan? olu?turulur.
o Eski dizideki elemanlar yeni diziye kopyalan?r ve
ta??ma (move) i?lemi ger?ekle?tirilir.
o Eski dizi haf?zadan silinir.
Motivasyon: Neden Listeye ?htiya? Var?
Eski Dizi
Yeni Dizi
7Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
? Bu problemi ??zmek i?in ne yapabiliriz?
Motivasyon: Neden Listeye ?htiya? Var?
o Byk bir haf?za alan?n? dizi i?in ay?rabiliriz.
o Ancak bu durumda da haf?zada saklanan eleman
say?s? azken haf?za bo?a i?gal edilmi? olur.
??Z?M 1: Byk Haf?za Alan?
o Haf?zay? ihtiya? halinde bytebilmektir.
o ?nceden alan ay?rmayarak haf?zay? verimli
kullanmak ad?na elemanlar? elemanlar? haf?zaya tek
tek yerle?tirmektir.
??Z?M 2: Ba?l? Liste
8Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
? int[] A = {6, 5, 4, 2} dizisini a?a??daki
gibi tutabildi?imizi varsayal?m.
? Elemanlar aras?nda bir ba?lant? sa?lanmas?
zorunludur. Neden?
Ba?l? Liste C ??zm
9Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
? Haf?za srekli olmad??? i?in dizi elemanlar?n?n
birbirleriyle ba?? yoktur. Bu nedenle her bir eleman
sonrakinin adresini g?steren bir referansla
ba?lanmal?d?r.
? Her eleman sonraki eleman?n adresini tutarken son
eleman?n adresi NULL olur.
? Bu ?ekilde elde edilen veri yap?s?, Ba?l? Liste (Linked
List) olarak adland?r?l?r.
Ba?l? Liste C ??zm (devam)
Ba?l? Liste C ??zm (devam)
Haf?za
0
1
2
A_1 Y
A_5 NULL
A_3 Z
A_2 X
A_4 W
Adres
T
W
X
Y
Z
Ba? = T
? Ba?l? listenin haf?za
organizasyonu ve
yerle?imi yandaki
gibi de olabilir.
11Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
? Listenin sonuna 3 say?s?n? eklersek,
? Yeni eleman NULLa i?aret ederken, yani listenin
son eleman? olurken,
? 2 art?k 252 ye (3n adresine) i?aret eder.
? A?a??daki ?ekilde dizinin ba?l? liste yap?s?
verilmi?tir.
Ba?l? Liste C ??zm (devam)
12Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
? Bir ba?l? liste, elemanlar?n?n bir sonraki (Next)
eleman?n haf?zadaki yerine i?aret etti?i zincir
?eklinde bir veri yap?s?d?r.
? 3 tip ba?l? liste bulunmaktad?r.
o Tek y?nl ba?l? liste
o ?ift y?nl ba?l? liste
o Dairesel ba?l? liste
Ba?l? Liste C ?zet
13Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
? Ba?l? listede her bir
elemana d?m (node)
ad? verilir.
? Her d?m
o Data: Veri (bir tamsay?,
bir dizi, bir nesne
olabilir)
o Next: Sonraki verinin
adresine i?aret eden bir
referanstan olu?ur.
Ba?l? Liste C ?zet (devam)
public class Node
{
public int Data;
public Node Next;
}
14Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
? ?lk d?mn adresini i?eren ve ba?lang?? (Head)
olarak adland?r?lan bir referans de?i?keni bulunur.
o Bir listeyi gezmek i?in bu adrese mutlaka ihtiya?
vard?r.
o Bo? bir listede Head NULLa i?aret eder.
? Ba?l? listede, son d?mde listenin sonuna
i?aret eden ?zel NULL (veya s?f?r) de?eri
bulunur.
Ba?l? Liste C ?zet (devam)
15Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C ADT
public abstract class LinkedListADT
{
public Node Head;
public int Size = 0;
public abstract void InsertFirst(int value);
public abstract void InsertLast(int value);
public abstract void InsertPos(int position, int value);
public abstract void DeleteFirst();
public abstract void DeleteLast();
public abstract void DeletePos(int position);
public abstract Node GetElement(int position);
public override string DisplayElements()
}
public class Node
{
public int Data;
public Node Next;
}
16Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C ADT (devam)
? InsertFirst(int value): Listenin ba??na bir node ekler.
? InsertLast(int value): Listenin sonuna bir node ekler.
? InsertPos(int position, int value): Listenin
belirtilen pozisyonuna bir node ekler.
? DeleteFirst(): Listenin ba??ndaki nodeu siler.
? DeleteLast(): Listenin sonundaki nodeu siler.
? DeletePos(int position): Listenin belirtilen
pozisyondaki nodeunu siler.
? GetElement(int position): Listenin belirtilen
pozisyondaki nodeunu getirir.
? int Size: Listedeki eleman say?s?n? d?ndrr.
? string DisplayElements(): Listedeki elemanlar?
geriye d?ndrr.
? Node Head: Listenin ilk eleman?n? verir.
17Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C Traverse (Gezinme)
? Head d?mnden ba?layarak, sonuncu d?me kadar
do?rusal ?ekilde nas?l ilerleriz? Algoritma, mant?k?
Node temp = Head;
while (temp != null)
{
if (temp.Next != null)
temp = temp.Next;
else
break;
}
34 11 122Head
NULL
18Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C InsertFirst
? Listenin ilk eleman? olan Headi yeni gelen
elemanla yer de?i?tirdi?imiz metottur.
? Traverse i?lemine gerek yoktur.
? A?a??daki listede Head 34tr.
? Listenin ba??na 45 eleman?n? eklemek istiyoruz.
Yani yeni Head 45 olmal?. Nas?l?
Head 34 11 122Head 45
NULL
19Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C InsertFirst (devam)
? S?zde kod:
a) Yeni Head d?m olu?turulur (tmpHead),
b) Head NULL ise (Liste BO?SA)
o Head ? tmpHead
c) Yeni d?mn i?aret?isi Heada i?aret eder,
o tmpHead.Next ? Head
d) Head yeni d?me i?aret eder.
o Head ? tmpHead
20Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C InsertFirst (devam)
public override void InsertFirst(int value)
{
Node tmpHead = new Node
{
Data = value
};
if (Head == null)
Head = tmpHead;
else
{
//En kritik nokta: tmpHead'in next'i
//eski Head'i g?stermeli
tmpHead.Next = Head;
//Yeni Head art?k tmpHead oldu
Head = tmpHead;
}
//Ba?l? listedeki eleman say?s? bir artt?
Size++;
}
21Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C InsertLast
? Listenin son eleman?n? yeni gelen elemanla yer
de?i?tirdi?imiz metottur.
? Traverse i?lemi gereklidir. Eski sonuncu eleman?n
bulunmas? gerekmektedir.
? A?a??daki listede Son eleman 122dir.
? Listenin sonuna 35 eleman?n? eklemek istiyoruz.
Nas?l?
34 11 122Head
NULL35 NULL
22Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C InsertLast (devam)
? S?zde kod:
a) Yeni d?m olu?turulur (newLast),
b) Head NULL ise (Liste BO?SA)
o InsertFirst()
c) Eski son d?m bulunur (oldLast),
d) Eski son d?m, eklenen d?me i?aret eder.
o oldLast.Next ? newLast
23Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C InsertPos
? Listenin i. pozisyonundaki eleman?n sonras?na yeni
gelen eleman?, ekleyen metottur.
? Traverse i?lemi gereklidir. i. Pozisyona sahip
eleman?n bulunmas? gerekmektedir.
? A?a??daki listede i=2 i?in 11 eleman? ile 142 eleman?
aras?na 122 eleman?n? ekleyelim. Nas?l?
34 11 142Head NULL122 NULL142
24Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C InsertPos (devam)
? S?zde kod:
a) Yeni d?m olu?turulur (newNode),
b) Head NULL ise (Liste BO?SA)
o InsertFirst()
c) i. Pos d?m bulunur (posNode),
d) posNode eleman?n?n Nexti tempNexte atan?r.
o tempNext ? posNode.Next
e) posNode eleman?n?n Nextine newNode atan?r.
o posNode.Next ? newNode
f) newNode eleman?n?n Nextine tempNext atan?r.
o newNode.Next ? tempNext
25Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C DeleteFirst
? Listenin ilk eleman? olan Headi silen metottur.
? Traverse i?lemine gerek yoktur.
? A?a??daki listede Head 45dir.
? Listenin ba??ndaki eleman? silmek istiyoruz.
? Yeni Head 34 olmal?. Nas?l?
Head 34 11 122Head 45
NULL
26Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C DeleteFirst (devam)
? S?zde kod:
a) Headin sonraki eleman? - Nexti temp bir de?i?kene
atan?r
o tempHeadNext ? Head.Next
b)tempHeadNext NULL ise Head NULL olur,
o Liste bo?al?r
c)tempHeadNext NULL de?ilse Head eleman?
tempHeadNext olur,
o Head ? tempHeadNext
27Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C DeleteLast
? Listenin son eleman?n? silen metottur.
? Traverse i?lemi gereklidir. Sonuncu eleman?n
bulunmas? gerekmektedir.
? A?a??daki listede Son eleman 35dir.
? Son eleman silindi?inde yeni son eleman 122
olmal?d?r. Nas?l?
34 11 122Head
NULL35 NULL
28Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C DeleteLast (devam)
? S?zde kod:
a) Son eleman bulunmas? i?in Headten itibaren do?rusal
ilerlenir.
b) Son eleman last de?i?kenine atan?r.
c) Son eleman bulundu?unda, sondan bir ?nceki eleman
bulunur ve bir de?i?kene atan?r (lastPrevNode).
d)lastPrevNode eleman?n?n Nextine NULL atan?r.
e)last de?i?kenine NULL atan?r.
29Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C DeletePos
? Listenin i. pozisyonundaki eleman?n? silen metottur.
? Traverse i?lemi gereklidir. i. Pozisyona sahip
eleman?n bulunmas? gerekmektedir.
? A?a??daki listede i=2 i?in 122 eleman?n? silelim ve 11
eleman? art?k 122yi de?il, 142yi i?aret etsin. Nas?l?
34 11 142Head
NULL122 NULL142
30Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste C DeletePos (devam)
? S?zde kod:
a) i. Pozisyondaki eleman?n bulunmas? i?in Headten
itibaren do?rusal ilerlenir.
b) i. Pozisyonundaki eleman pos de?i?kenine atan?r.
c) i. Pozisyonundaki eleman bulundu?unda, ondan bir
?nceki eleman?n Nextine posun Nexti atan?r.
d)pos de?i?kenine NULL atan?r.
31Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste ve Dizi Kar??la?t?rmas?
? Eri?im Maliyeti
o Dizinin 1. veya en sonuncu eleman?na eri?mek i?in
sadece base adresle ilgili eleman?n s?ras?n?n byte
de?eri (6. s?ra * 4 byte) toplan?r. Bu her eleman i?in
sabit bir zamand?r ve karma??kl??? O(1) olur.
o Ba?l? liste, srekli bir adreste tutulmad???ndan en
k?t durumda (worst-case) son eleman?n adresine
eri?mek i?in Head eleman?ndan ba?lanarak s?rayla her
d?mden bir sonraki adres elde edilir. Bu nedenle
karma??kl?k eleman say?s? n kadar ya da O(n) olur.
32Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste ve Dizi Kar??la?t?rmas? (devam..)
? Eri?im Maliyeti
33Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste ve Dizi Kar??la?t?rmas? (devam..)
? Veri Giri? (Insert) Maliyeti
o En Ba?a: Dizide tm elemanlar bir kayar O(n). Ba?l? listede
sabit bir i?lem O(1).
o En Sona: Dizi bo?sa O(1) de?ilse yeni bir dizi
gerekece?inden en k?t O(n). Ba?l? listede sonuncu elemana
en k?t O(n) le ula??l?r ve eklenir.
o i. Pozisyona: Dizide ilgili elemana ula?mak ve duruma g?re
elemanlar? kayd?rmak gerekece?i i?in en k?t durumda
O(n) zamana ihtiya? vard?r. Ba?l? listede ise kayd?rma
olmad??? halde bir elemana eri?mek i?in head adresinden
istenen adrese kadar gezmek gerekece?inden en k?t
durumda O(n) olur.
34Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste ve Dizi Kar??la?t?rmas? (devam..)
? Veri Giri? (Insert) Maliyeti
35Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste ve Dizi Kar??la?t?rmas? (devam..)
? Silme (Delete) Maliyeti
o Insert i?lemleri ile tamamen ayn? senaryolara ve ayn? Big-
O karma??kl?k maliyetlerine sahiptirler.
36Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Ba?l? Liste ve Dizi Kar??la?t?rmas? (devam..)
??lem Dizi Tabanl? Liste Ba?l? Liste
Access, Retrieve
(Eri?im)
O(1) O(n)
InsertFirst O(n) O(1)
InsertLast O(n) O(n)
Sonuncu elemana
pointer varsa = O(1)
InsertPos O(n) O(n)
DeleteFirst O(n) O(1)
DeleteLast O(n) O(n)
Sonuncu elemana
pointer varsa = O(1)
DeletePos O(n) O(n)
?Y? ?ALI?MALAR
Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
Yararlan?lan Kaynaklar
? Ders Kitab?:
? Data Structures through JAVA, V.V.Muniswamy
? Yard?mc? Okumalar:
? Data Structures and Algorithms in Java, Narashima
Karumanchi
? Data Structures, Algorithms and Applications in Java,
Sartaj Sahni
? Algorithms, Robert Sedgewick
Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?

More Related Content

YZM 2116 - B?lm 3 - Listeler

  • 1. YZM 2116 Veri Yap?lar? Yrd. Do?. Dr. Deniz KILIN? Celal Bayar ?niversitesi Hasan Ferdi Turgutlu Teknoloji Fakltesi Yaz?l?m Mhendisli?i
  • 2. B?L?M - 3 Bu b?lmde, ? Motivasyon: Neden Listeye ?htiya? Var? ? Ba?l? Liste (Linked List)Veri Yap?s? konusuna de?inilecektir. Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
  • 3. 3Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? ? Dizi, bellek y?neticisi taraf?ndan atanan ve uzunlu?u ba?tan belli ard???k bir haf?zada saklan?r. ? int[] A = {6, 5, 4, 2} ?eklinde 4 elemanl? int trnde bir dizi oldu?unu varsayal?m. ? Haf?zaya s?rayla o int x = 8; say?s?n? ve o daha sonra A dizisini saklad???m?z? d?nelim. Motivasyon: Neden Listeye ?htiya? Var?
  • 4. 4Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? int x = 8; int[] A = {6, 5, 4, 2}; Motivasyon: Neden Listeye ?htiya? Var? Haf?za A_1 A_2 x A_3 A_4 0 1 2 Adres L0 L0 + c L0 + 2c L0 + 3c L0 + 4c c byte Nas?l bir bellek organizasyonu bekliyoruz?
  • 5. 5Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? ? Dizi i?in ayr?lan b?lmn srekli adreslerden olu?tu?una dikkat edelim. ? Bu diziye yeni bir eleman (?rne?in 3) eklemek istedi?imizde o 2den sonraki alan, yani 217 nolu haf?za dolu oldu?u i?in haf?zay? geni?letme se?ene?imiz yoktur. ? ??zm olarak ne yapabiliriz? Motivasyon: Neden Listeye ?htiya? Var?
  • 6. 6Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? ? ??zm olarak bir?ok haf?za de?i?imi ve i?lemi gerektiren a?a??daki ad?mlar uygulan?r: o Daha byk bir dizi i?in yer alan? olu?turulur. o Eski dizideki elemanlar yeni diziye kopyalan?r ve ta??ma (move) i?lemi ger?ekle?tirilir. o Eski dizi haf?zadan silinir. Motivasyon: Neden Listeye ?htiya? Var? Eski Dizi Yeni Dizi
  • 7. 7Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? ? Bu problemi ??zmek i?in ne yapabiliriz? Motivasyon: Neden Listeye ?htiya? Var? o Byk bir haf?za alan?n? dizi i?in ay?rabiliriz. o Ancak bu durumda da haf?zada saklanan eleman say?s? azken haf?za bo?a i?gal edilmi? olur. ??Z?M 1: Byk Haf?za Alan? o Haf?zay? ihtiya? halinde bytebilmektir. o ?nceden alan ay?rmayarak haf?zay? verimli kullanmak ad?na elemanlar? elemanlar? haf?zaya tek tek yerle?tirmektir. ??Z?M 2: Ba?l? Liste
  • 8. 8Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? ? int[] A = {6, 5, 4, 2} dizisini a?a??daki gibi tutabildi?imizi varsayal?m. ? Elemanlar aras?nda bir ba?lant? sa?lanmas? zorunludur. Neden? Ba?l? Liste C ??zm
  • 9. 9Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? ? Haf?za srekli olmad??? i?in dizi elemanlar?n?n birbirleriyle ba?? yoktur. Bu nedenle her bir eleman sonrakinin adresini g?steren bir referansla ba?lanmal?d?r. ? Her eleman sonraki eleman?n adresini tutarken son eleman?n adresi NULL olur. ? Bu ?ekilde elde edilen veri yap?s?, Ba?l? Liste (Linked List) olarak adland?r?l?r. Ba?l? Liste C ??zm (devam)
  • 10. Ba?l? Liste C ??zm (devam) Haf?za 0 1 2 A_1 Y A_5 NULL A_3 Z A_2 X A_4 W Adres T W X Y Z Ba? = T ? Ba?l? listenin haf?za organizasyonu ve yerle?imi yandaki gibi de olabilir.
  • 11. 11Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? ? Listenin sonuna 3 say?s?n? eklersek, ? Yeni eleman NULLa i?aret ederken, yani listenin son eleman? olurken, ? 2 art?k 252 ye (3n adresine) i?aret eder. ? A?a??daki ?ekilde dizinin ba?l? liste yap?s? verilmi?tir. Ba?l? Liste C ??zm (devam)
  • 12. 12Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? ? Bir ba?l? liste, elemanlar?n?n bir sonraki (Next) eleman?n haf?zadaki yerine i?aret etti?i zincir ?eklinde bir veri yap?s?d?r. ? 3 tip ba?l? liste bulunmaktad?r. o Tek y?nl ba?l? liste o ?ift y?nl ba?l? liste o Dairesel ba?l? liste Ba?l? Liste C ?zet
  • 13. 13Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? ? Ba?l? listede her bir elemana d?m (node) ad? verilir. ? Her d?m o Data: Veri (bir tamsay?, bir dizi, bir nesne olabilir) o Next: Sonraki verinin adresine i?aret eden bir referanstan olu?ur. Ba?l? Liste C ?zet (devam) public class Node { public int Data; public Node Next; }
  • 14. 14Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? ? ?lk d?mn adresini i?eren ve ba?lang?? (Head) olarak adland?r?lan bir referans de?i?keni bulunur. o Bir listeyi gezmek i?in bu adrese mutlaka ihtiya? vard?r. o Bo? bir listede Head NULLa i?aret eder. ? Ba?l? listede, son d?mde listenin sonuna i?aret eden ?zel NULL (veya s?f?r) de?eri bulunur. Ba?l? Liste C ?zet (devam)
  • 15. 15Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C ADT public abstract class LinkedListADT { public Node Head; public int Size = 0; public abstract void InsertFirst(int value); public abstract void InsertLast(int value); public abstract void InsertPos(int position, int value); public abstract void DeleteFirst(); public abstract void DeleteLast(); public abstract void DeletePos(int position); public abstract Node GetElement(int position); public override string DisplayElements() } public class Node { public int Data; public Node Next; }
  • 16. 16Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C ADT (devam) ? InsertFirst(int value): Listenin ba??na bir node ekler. ? InsertLast(int value): Listenin sonuna bir node ekler. ? InsertPos(int position, int value): Listenin belirtilen pozisyonuna bir node ekler. ? DeleteFirst(): Listenin ba??ndaki nodeu siler. ? DeleteLast(): Listenin sonundaki nodeu siler. ? DeletePos(int position): Listenin belirtilen pozisyondaki nodeunu siler. ? GetElement(int position): Listenin belirtilen pozisyondaki nodeunu getirir. ? int Size: Listedeki eleman say?s?n? d?ndrr. ? string DisplayElements(): Listedeki elemanlar? geriye d?ndrr. ? Node Head: Listenin ilk eleman?n? verir.
  • 17. 17Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C Traverse (Gezinme) ? Head d?mnden ba?layarak, sonuncu d?me kadar do?rusal ?ekilde nas?l ilerleriz? Algoritma, mant?k? Node temp = Head; while (temp != null) { if (temp.Next != null) temp = temp.Next; else break; } 34 11 122Head NULL
  • 18. 18Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C InsertFirst ? Listenin ilk eleman? olan Headi yeni gelen elemanla yer de?i?tirdi?imiz metottur. ? Traverse i?lemine gerek yoktur. ? A?a??daki listede Head 34tr. ? Listenin ba??na 45 eleman?n? eklemek istiyoruz. Yani yeni Head 45 olmal?. Nas?l? Head 34 11 122Head 45 NULL
  • 19. 19Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C InsertFirst (devam) ? S?zde kod: a) Yeni Head d?m olu?turulur (tmpHead), b) Head NULL ise (Liste BO?SA) o Head ? tmpHead c) Yeni d?mn i?aret?isi Heada i?aret eder, o tmpHead.Next ? Head d) Head yeni d?me i?aret eder. o Head ? tmpHead
  • 20. 20Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C InsertFirst (devam) public override void InsertFirst(int value) { Node tmpHead = new Node { Data = value }; if (Head == null) Head = tmpHead; else { //En kritik nokta: tmpHead'in next'i //eski Head'i g?stermeli tmpHead.Next = Head; //Yeni Head art?k tmpHead oldu Head = tmpHead; } //Ba?l? listedeki eleman say?s? bir artt? Size++; }
  • 21. 21Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C InsertLast ? Listenin son eleman?n? yeni gelen elemanla yer de?i?tirdi?imiz metottur. ? Traverse i?lemi gereklidir. Eski sonuncu eleman?n bulunmas? gerekmektedir. ? A?a??daki listede Son eleman 122dir. ? Listenin sonuna 35 eleman?n? eklemek istiyoruz. Nas?l? 34 11 122Head NULL35 NULL
  • 22. 22Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C InsertLast (devam) ? S?zde kod: a) Yeni d?m olu?turulur (newLast), b) Head NULL ise (Liste BO?SA) o InsertFirst() c) Eski son d?m bulunur (oldLast), d) Eski son d?m, eklenen d?me i?aret eder. o oldLast.Next ? newLast
  • 23. 23Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C InsertPos ? Listenin i. pozisyonundaki eleman?n sonras?na yeni gelen eleman?, ekleyen metottur. ? Traverse i?lemi gereklidir. i. Pozisyona sahip eleman?n bulunmas? gerekmektedir. ? A?a??daki listede i=2 i?in 11 eleman? ile 142 eleman? aras?na 122 eleman?n? ekleyelim. Nas?l? 34 11 142Head NULL122 NULL142
  • 24. 24Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C InsertPos (devam) ? S?zde kod: a) Yeni d?m olu?turulur (newNode), b) Head NULL ise (Liste BO?SA) o InsertFirst() c) i. Pos d?m bulunur (posNode), d) posNode eleman?n?n Nexti tempNexte atan?r. o tempNext ? posNode.Next e) posNode eleman?n?n Nextine newNode atan?r. o posNode.Next ? newNode f) newNode eleman?n?n Nextine tempNext atan?r. o newNode.Next ? tempNext
  • 25. 25Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C DeleteFirst ? Listenin ilk eleman? olan Headi silen metottur. ? Traverse i?lemine gerek yoktur. ? A?a??daki listede Head 45dir. ? Listenin ba??ndaki eleman? silmek istiyoruz. ? Yeni Head 34 olmal?. Nas?l? Head 34 11 122Head 45 NULL
  • 26. 26Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C DeleteFirst (devam) ? S?zde kod: a) Headin sonraki eleman? - Nexti temp bir de?i?kene atan?r o tempHeadNext ? Head.Next b)tempHeadNext NULL ise Head NULL olur, o Liste bo?al?r c)tempHeadNext NULL de?ilse Head eleman? tempHeadNext olur, o Head ? tempHeadNext
  • 27. 27Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C DeleteLast ? Listenin son eleman?n? silen metottur. ? Traverse i?lemi gereklidir. Sonuncu eleman?n bulunmas? gerekmektedir. ? A?a??daki listede Son eleman 35dir. ? Son eleman silindi?inde yeni son eleman 122 olmal?d?r. Nas?l? 34 11 122Head NULL35 NULL
  • 28. 28Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C DeleteLast (devam) ? S?zde kod: a) Son eleman bulunmas? i?in Headten itibaren do?rusal ilerlenir. b) Son eleman last de?i?kenine atan?r. c) Son eleman bulundu?unda, sondan bir ?nceki eleman bulunur ve bir de?i?kene atan?r (lastPrevNode). d)lastPrevNode eleman?n?n Nextine NULL atan?r. e)last de?i?kenine NULL atan?r.
  • 29. 29Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C DeletePos ? Listenin i. pozisyonundaki eleman?n? silen metottur. ? Traverse i?lemi gereklidir. i. Pozisyona sahip eleman?n bulunmas? gerekmektedir. ? A?a??daki listede i=2 i?in 122 eleman?n? silelim ve 11 eleman? art?k 122yi de?il, 142yi i?aret etsin. Nas?l? 34 11 142Head NULL122 NULL142
  • 30. 30Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste C DeletePos (devam) ? S?zde kod: a) i. Pozisyondaki eleman?n bulunmas? i?in Headten itibaren do?rusal ilerlenir. b) i. Pozisyonundaki eleman pos de?i?kenine atan?r. c) i. Pozisyonundaki eleman bulundu?unda, ondan bir ?nceki eleman?n Nextine posun Nexti atan?r. d)pos de?i?kenine NULL atan?r.
  • 31. 31Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste ve Dizi Kar??la?t?rmas? ? Eri?im Maliyeti o Dizinin 1. veya en sonuncu eleman?na eri?mek i?in sadece base adresle ilgili eleman?n s?ras?n?n byte de?eri (6. s?ra * 4 byte) toplan?r. Bu her eleman i?in sabit bir zamand?r ve karma??kl??? O(1) olur. o Ba?l? liste, srekli bir adreste tutulmad???ndan en k?t durumda (worst-case) son eleman?n adresine eri?mek i?in Head eleman?ndan ba?lanarak s?rayla her d?mden bir sonraki adres elde edilir. Bu nedenle karma??kl?k eleman say?s? n kadar ya da O(n) olur.
  • 32. 32Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste ve Dizi Kar??la?t?rmas? (devam..) ? Eri?im Maliyeti
  • 33. 33Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste ve Dizi Kar??la?t?rmas? (devam..) ? Veri Giri? (Insert) Maliyeti o En Ba?a: Dizide tm elemanlar bir kayar O(n). Ba?l? listede sabit bir i?lem O(1). o En Sona: Dizi bo?sa O(1) de?ilse yeni bir dizi gerekece?inden en k?t O(n). Ba?l? listede sonuncu elemana en k?t O(n) le ula??l?r ve eklenir. o i. Pozisyona: Dizide ilgili elemana ula?mak ve duruma g?re elemanlar? kayd?rmak gerekece?i i?in en k?t durumda O(n) zamana ihtiya? vard?r. Ba?l? listede ise kayd?rma olmad??? halde bir elemana eri?mek i?in head adresinden istenen adrese kadar gezmek gerekece?inden en k?t durumda O(n) olur.
  • 34. 34Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste ve Dizi Kar??la?t?rmas? (devam..) ? Veri Giri? (Insert) Maliyeti
  • 35. 35Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste ve Dizi Kar??la?t?rmas? (devam..) ? Silme (Delete) Maliyeti o Insert i?lemleri ile tamamen ayn? senaryolara ve ayn? Big- O karma??kl?k maliyetlerine sahiptirler.
  • 36. 36Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar? Ba?l? Liste ve Dizi Kar??la?t?rmas? (devam..) ??lem Dizi Tabanl? Liste Ba?l? Liste Access, Retrieve (Eri?im) O(1) O(n) InsertFirst O(n) O(1) InsertLast O(n) O(n) Sonuncu elemana pointer varsa = O(1) InsertPos O(n) O(n) DeleteFirst O(n) O(1) DeleteLast O(n) O(n) Sonuncu elemana pointer varsa = O(1) DeletePos O(n) O(n)
  • 37. ?Y? ?ALI?MALAR Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?
  • 38. Yararlan?lan Kaynaklar ? Ders Kitab?: ? Data Structures through JAVA, V.V.Muniswamy ? Yard?mc? Okumalar: ? Data Structures and Algorithms in Java, Narashima Karumanchi ? Data Structures, Algorithms and Applications in Java, Sartaj Sahni ? Algorithms, Robert Sedgewick Celal Bayar ?niversitesi C YZM 2116 Veri Yap?lar?

Editor's Notes

  • #10: (Not: Pratik olarak [6 | 217 ] d?mnde her int de?i?keni haf?zada 4 bytel?k yer tutarken, di?er verinin adresine i?aret eden 4 bytel?k bir alanla birlikte 8 bytel?k yer tutar).