SlideShare uma empresa Scribd logo
1 de 38
YZM 2116
Veri Yapıları
Yrd. Doç. Dr. Deniz KILINÇ
Celal Bayar Üniversitesi
Hasan Ferdi Turgutlu Teknoloji Fakültesi
Yazılım Mühendisliği
BÖLÜM - 3
Bu bölümde,
• Motivasyon: Neden Listeye İhtiyaç Var?
• Bağlı Liste (Linked List)Veri Yapısı
konusuna değinilecektir.
Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
3Celal Bayar Üniversitesi – 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 türünde 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 – 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 – YZM 2116 Veri Yapıları
• Dizi için ayrılan bölümün sürekli adreslerden
oluştuğuna dikkat edelim.
• Bu diziye yeni bir eleman (örneğin 3) eklemek
istediğimizde
o 2’den sonraki alan, yani 217 nolu hafıza dolu
olduğu için hafızayı genişletme seçeneğimiz
yoktur.
• Çözüm olarak ne yapabiliriz?
Motivasyon: Neden Listeye İhtiyaç Var?
6Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Çözüm olarak birçok hafıza değişimi ve işlemi
gerektiren aşağıdaki adımlar uygulanır:
o Daha büyük 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 – YZM 2116 Veri Yapıları
• Bu problemi çözmek için ne yapabiliriz?
Motivasyon: Neden Listeye İhtiyaç Var?
o Büyük 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: Büyük Hafıza Alanı
o Hafızayı ihtiyaç halinde büyütebilmektir.
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 – 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 – Çözüm
9Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• Hafıza sürekli 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 – Çözüm (devam…)
Bağlı Liste – Çözüm (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 – YZM 2116 Veri Yapıları
• Listenin sonuna “3” sayısını eklersek,
• Yeni eleman NULL’a işaret ederken, yani listenin
son elemanı olurken,
• 2 artık “252” ye (3’ün adresine) işaret eder.
• Aşağıdaki şekilde dizinin bağlı liste yapısı
verilmiştir.
Bağlı Liste – Çözüm (devam…)
12Celal Bayar Üniversitesi – 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 – Özet
13Celal Bayar Üniversitesi – 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 – Özet (devam…)
public class Node
{
public int Data;
public Node Next;
}
14Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
• İlk düğümün 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 NULL’a 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 – Özet (devam…)
15Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste – 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 – YZM 2116 Veri Yapıları
Bağlı Liste – 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 node’u siler.
 DeleteLast(): Listenin sonundaki node’u siler.
 DeletePos(int position): Listenin belirtilen
pozisyondaki node’unu siler.
 GetElement(int position): Listenin belirtilen
pozisyondaki node’unu getirir.
 int Size: Listedeki eleman sayısını döndürür.
 string DisplayElements(): Listedeki elemanları
geriye döndürür.
 Node Head: Listenin ilk elemanını verir.
17Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste – Traverse (Gezinme)
• Head düğümünden 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 – YZM 2116 Veri Yapıları
Bağlı Liste – InsertFirst
• Listenin ilk elemanı olan Head’i yeni gelen
elemanla yer değiştirdiğimiz metottur.
• Traverse işlemine gerek yoktur.
• Aşağıdaki listede Head 34’tür.
• Listenin başına 45 elemanını eklemek istiyoruz.
Yani yeni Head 45 olmalı. Nasıl?
Head 34 11 122Head 45
NULL
19Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste – 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üğümün işaretçisi Head’a işaret eder,
o tmpHead.Next  Head
d) Head yeni düğüme işaret eder.
o Head  tmpHead
20Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste – 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 – YZM 2116 Veri Yapıları
Bağlı Liste – 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 122’dir.
• Listenin sonuna 35 elemanını eklemek istiyoruz.
Nasıl?
34 11 122Head
NULL35 NULL
22Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste – 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 – YZM 2116 Veri Yapıları
Bağlı Liste – 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 – YZM 2116 Veri Yapıları
Bağlı Liste – 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 Next’i tempNext’e atanır.
o tempNext  posNode.Next
e) posNode elemanının Next’ine newNode atanır.
o posNode.Next  newNode
f) newNode elemanının Next’ine tempNext atanır.
o newNode.Next  tempNext
25Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste – DeleteFirst
• Listenin ilk elemanı olan Head’i silen metottur.
• Traverse işlemine gerek yoktur.
• Aşağıdaki listede Head 45’dir.
• Listenin başındaki elemanı silmek istiyoruz.
• Yeni Head 34 olmalı. Nasıl?
Head 34 11 122Head 45
NULL
26Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste – DeleteFirst (devam…)
• Sözde kod:
a) Head’in sonraki elemanı - Next’i 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 – YZM 2116 Veri Yapıları
Bağlı Liste – DeleteLast
• Listenin son elemanını silen metottur.
• Traverse işlemi gereklidir. Sonuncu elemanın
bulunması gerekmektedir.
• Aşağıdaki listede Son eleman 35’dir.
• Son eleman silindiğinde yeni son eleman 122
olmalıdır. Nasıl?
34 11 122Head
NULL35 NULL
28Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste – DeleteLast (devam…)
• Sözde kod:
a) Son eleman bulunması için Head’ten 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 Next’ine NULL atanır.
e)last değişkenine NULL atanır.
29Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste – 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 122’yi değil, 142’yi işaret etsin. Nasıl?
34 11 142Head
NULL122 NULL142
30Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste – DeletePos (devam…)
• Sözde kod:
a) i. Pozisyondaki elemanın bulunması için Head’ten
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 Next’ine pos’un Next’i atanır.
d)pos değişkenine NULL atanır.
31Celal Bayar Üniversitesi – 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, sürekli 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 – YZM 2116 Veri Yapıları
Bağlı Liste ve Dizi Karşılaştırması (devam..)
• Erişim Maliyeti
33Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
Bağlı Liste ve Dizi Karşılaştırması (devam..)
• Veri Giriş (Insert) Maliyeti
o En Başa: Dizide tüm 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 – YZM 2116 Veri Yapıları
Bağlı Liste ve Dizi Karşılaştırması (devam..)
• Veri Giriş (Insert) Maliyeti
35Celal Bayar Üniversitesi – 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 – 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 – 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 – YZM 2116 Veri Yapıları

Mais conteúdo relacionado

Mais procurados

Yzm 2116 Bölüm 11 - Graph - Çizge
Yzm 2116   Bölüm 11 - Graph - ÇizgeYzm 2116   Bölüm 11 - Graph - Çizge
Yzm 2116 Bölüm 11 - Graph - ÇizgeDeniz KILINÇ
 
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
Yzm 2116  - Bölüm 2 (Algoritma Analizi)Yzm 2116  - Bölüm 2 (Algoritma Analizi)
Yzm 2116 - Bölüm 2 (Algoritma Analizi)Deniz KILINÇ
 
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı Ömer Özselçuk
 
SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?Andrej Pashchenko
 
Search tree,Tree and binary tree and heap tree
Search tree,Tree  and binary tree and heap treeSearch tree,Tree  and binary tree and heap tree
Search tree,Tree and binary tree and heap treezia eagle
 
Data Structure and Algorithms Binary Search Tree
Data Structure and Algorithms Binary Search TreeData Structure and Algorithms Binary Search Tree
Data Structure and Algorithms Binary Search TreeManishPrajapati78
 
Why you should care about data layout in the file system with Cheng Lian and ...
Why you should care about data layout in the file system with Cheng Lian and ...Why you should care about data layout in the file system with Cheng Lian and ...
Why you should care about data layout in the file system with Cheng Lian and ...Databricks
 
16. Java stacks and queues
16. Java stacks and queues16. Java stacks and queues
16. Java stacks and queuesIntro C# Book
 
Polymorphic Table Functions in 18c
Polymorphic Table Functions in 18cPolymorphic Table Functions in 18c
Polymorphic Table Functions in 18cAndrej Pashchenko
 
Oracle sql joins
Oracle sql joinsOracle sql joins
Oracle sql joinsredro
 
What is Stack, Its Operations, Queue, Circular Queue, Priority Queue
What is Stack, Its Operations, Queue, Circular Queue, Priority QueueWhat is Stack, Its Operations, Queue, Circular Queue, Priority Queue
What is Stack, Its Operations, Queue, Circular Queue, Priority QueueBalwant Gorad
 
Data structure and algorithm using java
Data structure and algorithm using javaData structure and algorithm using java
Data structure and algorithm using javaNarayan Sau
 

Mais procurados (20)

Yzm 2116 Bölüm 11 - Graph - Çizge
Yzm 2116   Bölüm 11 - Graph - ÇizgeYzm 2116   Bölüm 11 - Graph - Çizge
Yzm 2116 Bölüm 11 - Graph - Çizge
 
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
Yzm 2116  - Bölüm 2 (Algoritma Analizi)Yzm 2116  - Bölüm 2 (Algoritma Analizi)
Yzm 2116 - Bölüm 2 (Algoritma Analizi)
 
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
Bağli li̇steler (Linked List) – Yiğinlar (Stack) - Kuyruklar Konu Anlatımı
 
SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?
 
Search tree,Tree and binary tree and heap tree
Search tree,Tree  and binary tree and heap treeSearch tree,Tree  and binary tree and heap tree
Search tree,Tree and binary tree and heap tree
 
Data Structure and Algorithms Binary Search Tree
Data Structure and Algorithms Binary Search TreeData Structure and Algorithms Binary Search Tree
Data Structure and Algorithms Binary Search Tree
 
Why you should care about data layout in the file system with Cheng Lian and ...
Why you should care about data layout in the file system with Cheng Lian and ...Why you should care about data layout in the file system with Cheng Lian and ...
Why you should care about data layout in the file system with Cheng Lian and ...
 
16. Java stacks and queues
16. Java stacks and queues16. Java stacks and queues
16. Java stacks and queues
 
Polymorphic Table Functions in 18c
Polymorphic Table Functions in 18cPolymorphic Table Functions in 18c
Polymorphic Table Functions in 18c
 
Insertion and merge sort
Insertion and merge sortInsertion and merge sort
Insertion and merge sort
 
Avl trees final
Avl trees finalAvl trees final
Avl trees final
 
Oracle sql joins
Oracle sql joinsOracle sql joins
Oracle sql joins
 
Sql query patterns, optimized
Sql query patterns, optimizedSql query patterns, optimized
Sql query patterns, optimized
 
Stack project
Stack projectStack project
Stack project
 
AVL Tree Data Structure
AVL Tree Data StructureAVL Tree Data Structure
AVL Tree Data Structure
 
Binary search trees
Binary search treesBinary search trees
Binary search trees
 
What is Stack, Its Operations, Queue, Circular Queue, Priority Queue
What is Stack, Its Operations, Queue, Circular Queue, Priority QueueWhat is Stack, Its Operations, Queue, Circular Queue, Priority Queue
What is Stack, Its Operations, Queue, Circular Queue, Priority Queue
 
Merge sort
Merge sortMerge sort
Merge sort
 
Sorting algorithms
Sorting algorithmsSorting algorithms
Sorting algorithms
 
Data structure and algorithm using java
Data structure and algorithm using javaData structure and algorithm using java
Data structure and algorithm using java
 

YZM 2116 - Bölüm 3 - Listeler

  • 1. YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği
  • 2. BÖLÜM - 3 Bu bölümde, • Motivasyon: Neden Listeye İhtiyaç Var? • Bağlı Liste (Linked List)Veri Yapısı konusuna değinilecektir. Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları
  • 3. 3Celal Bayar Üniversitesi – 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 türünde 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 – 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 – YZM 2116 Veri Yapıları • Dizi için ayrılan bölümün sürekli adreslerden oluştuğuna dikkat edelim. • Bu diziye yeni bir eleman (örneğin 3) eklemek istediğimizde o 2’den sonraki alan, yani 217 nolu hafıza dolu olduğu için hafızayı genişletme seçeneğimiz yoktur. • Çözüm olarak ne yapabiliriz? Motivasyon: Neden Listeye İhtiyaç Var?
  • 6. 6Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Çözüm olarak birçok hafıza değişimi ve işlemi gerektiren aşağıdaki adımlar uygulanır: o Daha büyük 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 – YZM 2116 Veri Yapıları • Bu problemi çözmek için ne yapabiliriz? Motivasyon: Neden Listeye İhtiyaç Var? o Büyük 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: Büyük Hafıza Alanı o Hafızayı ihtiyaç halinde büyütebilmektir. 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 – 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 – Çözüm
  • 9. 9Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • Hafıza sürekli 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 – Çözüm (devam…)
  • 10. Bağlı Liste – Çözüm (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 – YZM 2116 Veri Yapıları • Listenin sonuna “3” sayısını eklersek, • Yeni eleman NULL’a işaret ederken, yani listenin son elemanı olurken, • 2 artık “252” ye (3’ün adresine) işaret eder. • Aşağıdaki şekilde dizinin bağlı liste yapısı verilmiştir. Bağlı Liste – Çözüm (devam…)
  • 12. 12Celal Bayar Üniversitesi – 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 – Özet
  • 13. 13Celal Bayar Üniversitesi – 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 – Özet (devam…) public class Node { public int Data; public Node Next; }
  • 14. 14Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları • İlk düğümün 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 NULL’a 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 – Özet (devam…)
  • 15. 15Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Bağlı Liste – 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 – YZM 2116 Veri Yapıları Bağlı Liste – 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 node’u siler.  DeleteLast(): Listenin sonundaki node’u siler.  DeletePos(int position): Listenin belirtilen pozisyondaki node’unu siler.  GetElement(int position): Listenin belirtilen pozisyondaki node’unu getirir.  int Size: Listedeki eleman sayısını döndürür.  string DisplayElements(): Listedeki elemanları geriye döndürür.  Node Head: Listenin ilk elemanını verir.
  • 17. 17Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Bağlı Liste – Traverse (Gezinme) • Head düğümünden 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 – YZM 2116 Veri Yapıları Bağlı Liste – InsertFirst • Listenin ilk elemanı olan Head’i yeni gelen elemanla yer değiştirdiğimiz metottur. • Traverse işlemine gerek yoktur. • Aşağıdaki listede Head 34’tür. • 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 – YZM 2116 Veri Yapıları Bağlı Liste – 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üğümün işaretçisi Head’a işaret eder, o tmpHead.Next  Head d) Head yeni düğüme işaret eder. o Head  tmpHead
  • 20. 20Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Bağlı Liste – 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 – YZM 2116 Veri Yapıları Bağlı Liste – 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 122’dir. • Listenin sonuna 35 elemanını eklemek istiyoruz. Nasıl? 34 11 122Head NULL35 NULL
  • 22. 22Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Bağlı Liste – 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 – YZM 2116 Veri Yapıları Bağlı Liste – 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 – YZM 2116 Veri Yapıları Bağlı Liste – 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 Next’i tempNext’e atanır. o tempNext  posNode.Next e) posNode elemanının Next’ine newNode atanır. o posNode.Next  newNode f) newNode elemanının Next’ine tempNext atanır. o newNode.Next  tempNext
  • 25. 25Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Bağlı Liste – DeleteFirst • Listenin ilk elemanı olan Head’i silen metottur. • Traverse işlemine gerek yoktur. • Aşağıdaki listede Head 45’dir. • Listenin başındaki elemanı silmek istiyoruz. • Yeni Head 34 olmalı. Nasıl? Head 34 11 122Head 45 NULL
  • 26. 26Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Bağlı Liste – DeleteFirst (devam…) • Sözde kod: a) Head’in sonraki elemanı - Next’i 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 – YZM 2116 Veri Yapıları Bağlı Liste – DeleteLast • Listenin son elemanını silen metottur. • Traverse işlemi gereklidir. Sonuncu elemanın bulunması gerekmektedir. • Aşağıdaki listede Son eleman 35’dir. • Son eleman silindiğinde yeni son eleman 122 olmalıdır. Nasıl? 34 11 122Head NULL35 NULL
  • 28. 28Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Bağlı Liste – DeleteLast (devam…) • Sözde kod: a) Son eleman bulunması için Head’ten 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 Next’ine NULL atanır. e)last değişkenine NULL atanır.
  • 29. 29Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Bağlı Liste – 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 122’yi değil, 142’yi işaret etsin. Nasıl? 34 11 142Head NULL122 NULL142
  • 30. 30Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Bağlı Liste – DeletePos (devam…) • Sözde kod: a) i. Pozisyondaki elemanın bulunması için Head’ten 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 Next’ine pos’un Next’i atanır. d)pos değişkenine NULL atanır.
  • 31. 31Celal Bayar Üniversitesi – 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, sürekli 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 – YZM 2116 Veri Yapıları Bağlı Liste ve Dizi Karşılaştırması (devam..) • Erişim Maliyeti
  • 33. 33Celal Bayar Üniversitesi – YZM 2116 Veri Yapıları Bağlı Liste ve Dizi Karşılaştırması (devam..) • Veri Giriş (Insert) Maliyeti o En Başa: Dizide tüm 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 – YZM 2116 Veri Yapıları Bağlı Liste ve Dizi Karşılaştırması (devam..) • Veri Giriş (Insert) Maliyeti
  • 35. 35Celal Bayar Üniversitesi – 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 – 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 – 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 – YZM 2116 Veri Yapıları

Notas do Editor

  1. (Not: Pratik olarak [6 | 217 ] düğümünde her int değişkeni hafızada 4 byte’lık yer tutarken, diğer verinin adresine işaret eden 4 byte’lık bir alanla birlikte 8 byte’lık yer tutar).