z
Singly linked lists (Tek bağlı)
z
Doubly linked lists (Çift bağlı)
z
Circular lists
z
Skip lists
z
Self-organized lists
z
Sparse tables
Yrd.Doç.Dr. M. Ali Akcayol G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Singly linked lists
z
Dizilerin dezavantajları.
-
Boyut değiştirme zordur
-
Yeni bir eleman ekleme zordur
-
Bir elemanı silme zordur
-
Diziler tüm elemanları için hafızada yer ayırırlar
Bağlı dizilerle bu problemler aşılabilmektedir.
0
1
2
3
4
5
6
7 Mahmut
Mehmet
Melek
Melike
Murat
Mustafa
Mürsel Metin
Singly linked lists
z
Her dizi elemanı için ayrı hafıza alanı ayrılır.
z
Bilgi kavramsal olarak sıralıdır ancak hafızada bulunduğu yer sıralı değildir.
z
Herbir eleman (node) bir sonrakini gösterir.
Bağlı liste
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Singly linked lists
z Listedeki herbir eleman data ve link kısmından oluşur.
z Data kısmı içerisinde saklanan bilgiyi ifade eder.
z Link kısmı ise kendisinden sonraki elemanı işaret eder.
public class L
public class List istNode Node {
{int
int
data;data;
public ListNode
public ListNode
sonrakisonraki; ; }
}Data Link
Bir sonraki elemanı işaret eder.
Singly linked lists
z Listede bir başlangıç elemanı vardır (head).
z Listenin birde sonuncu elemanı vardır (tail).
z Listede aktif (current) eleman şu anda bilgilerine ulaşabileceğimiz elemandır.
Tek bir eleman
head tail
current
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Singly linked lists (İşlemler)
z Listeye eleman ekleme
-Başa
-Sona
-Sıralı
z Listeden eleman silme
-Baştan -Sondan -Tümünü
-Belirlenen bilgiye sahip elemanı -İstenen sıradaki elemanı
z Arama
z Listeleme - İstenen bilgiye göre z Kontrol
- Boş liste - Liste boyutu
Singly linked lists (Liste oluşturma) public class ListNode
{
public string adSoyad;
public ListNode sonraki;
public ListNode(string adSoyad) {
this.adSoyad = adSoyad;
} }
public class LinkedList {
public ListNode headNode, tailNode;
public LinkedList() {
headNode = new ListNode("head");
tailNode = new ListNode("tail”);
headNode.sonraki = tailNode;
tailNode.sonraki = tailNode;
} }
head tail
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Singly linked lists (Eleman ekleme)
ListNode yeniNode = new ListNode(“Mustafa");
yeniNode.sonraki = aktif.sonraki;
aktif.sonraki = yeniNode;
head aktif tail
1 2
2 1
Singly linked lists (Eleman ekleme)
ListNode yeniNode = new ListNode(“Mustafa");
aktif.sonraki = yeniNode;
tailNode = yeniNode;
head aktif tail
1 2
1 2
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Singly linked lists (Eleman silme)
while ((aktif.sonraki != bagliListe.tailNode) && (aktif.sonraki != silinecekNode)) {
aktif = aktif.sonraki;
}
aktif.sonraki = aktif.sonraki.sonraki;
head aktif tail
Singly linked lists (Eleman arama)
while ((aktif.sonraki != bagliListe.tailNode) && (aktif.sonraki != arananNode)) {
aktif = aktif.sonraki;
}
head aktif tail
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Singly linked lists (Boş liste)
if (head.sonraki == tail) listeBos = true else listeBos = False;
Eleman sayısı:
int i = 0;
ListNode aktif = bagliListe.headNode;
while (aktif.sonraki != bagliListe.tailNode) {
aktif = aktif.sonraki;
i++;
}
listeBoyutu = i;
head tail
Doubly linked lists (Liste oluşturma) public class ListNode {
public string adSoyad;
public ListNode onceki, sonraki;
public ListNode(string adSoyad) {
this.adSoyad = adSoyad;
} }
public class LinkedList {
public ListNode headNode, tailNode;
public LinkedList() {
headNode = new ListNode("head");
tailNode = new ListNode("tail”);
headNode.onceki = headNode;
headNode.sonraki = tailNode;
tailNode.onceki = headNode;
tailNode.sonraki = tailNode;
} }
head tail
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Doubly linked lists (Eleman ekleme)
ListNode yeniNode = new ListNode(“Mustafa");
yeniNode.sonraki = aktif.sonraki;
aktif.sonraki.onceki = yeniNode;
aktif.sonraki = yeniNode;
yeniNode.onceki = aktif;
head aktif tail
1 2 3 4
3 1 4 2
Doubly linked lists (Eleman silme)
while ((aktif.sonraki != bagliListe.tailNode) && (aktif.sonraki != silinecekNode)) {
aktif = aktif.sonraki;
}
aktif.sonraki.sonraki.onceki = aktif;
aktif.sonraki = aktif.sonraki.sonraki;
head aktif tail
1
2 3
1
2 3
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Doubly linked lists (Eleman arama)
while ((aktif.sonraki != bagliListe.tailNode) && (aktif.sonraki != arananNode)) {
aktif = aktif.sonraki;
}
while ((aktif.onceki != bagliListe.headNode) && (aktif.onceki != arananNode)) {
aktif = aktif.onceki;
}
head aktif tail
Circular lists
Sadece 1 tane sabit node vardır (tailNode)
aktif aktif
tail
tail
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Circular lists
Skip lists
Eleman ekleme ve silme zordur. Listenin yeniden seviyelendirilmesi gerekir.
Arama işlemi çok hızlıdır.
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Sel-organizing lists
Move-to-front: Erişilen elemenı listenin başına alır Transpoze: Erişilen elemanı önündekiyle yer değiştirir
Sparse tables
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Sparse tables Bağlı dizilerle gösterim
G. Ü. Bilgisayar Mühendisliği Bölümü
BAĞLI LİSTELER
Haftalık Ödev:
K adet ders için N adet öğrencinin numara ve harf ortalamalarını bağlı dizilerle gösteriniz.
- Herbir node öğrenci numarası, dersin kodu, dersin harf ortalaması bilgilerini bulunduracak.
- Her öğrencinin numarası headNode içindeki bilgi olacak.
- Her dersin kodu headNode içindeki bilgi olacak.
- Herbir node aynı dersteki bir sonraki öğrenciyi gösterecek.
- Herbir node aynı kişinin diğer dersini gösterecek.
- Program Windows application olarak hazırlanacak ve aşağıdaki işlemleri butonlarla yapacak.
1- Bir öğrenciye yeni bir ders ekleme 2- Bir derse yeni bir öğrenci ekleme 3- Bir öğrencinin bir dersini silme 4- Bir dersteki bir öğrenciyi silme
G. Ü. Bilgisayar Mühendisliği Bölümü