Singly linked lists (Tek bağlı) Doubly linked lists (Çift bağlı) Circular lists Skip lists Self-organized lists Sparse tables Yrd.Doç.Dr. M. Ali Akcayol Singly linked lists 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 Metin Bağlı dizilerle bu problemler aşılabilmektedir. Mahmut Mehmet Melek Melike Murat Mustafa Mürsel 0 3 4 5 6 7
Singly linked lists Her dizi elemanı için ayrı hafıza alanı ayrılır. Bilgi kavramsal olarak sıralıdır ancak hafızada bulunduğu yer sıralı değildir. Herbir eleman (node) bir sonrakini gösterir. Bağlı liste Singly linked lists Listedeki herbir eleman data ve link kısmından oluşur. Data kısmı içerisinde saklanan bilgiyi ifade eder. Link kısmı ise kendisinden sonraki elemanı işaret eder. Data Link public class ListL istnode int data; public ListNode sonraki; Bir sonraki elemanı işaret eder.
Singly linked lists Listede bir başlangıç elemanı vardır (). Listenin birde sonuncu elemanı vardır (). Listede (current) eleman şu anda bilgilerine ulaşabileceğimiz elemandır. current Tek bir eleman Singly linked lists (İşlemler) Listeye eleman ekleme - Başa - Sona - Sıralı Listeden eleman silme - Baştan - Sondan - Tümünü - Belirlenen bilgiye sahip elemanı - İstenen sıradaki elemanı Arama Listeleme - İstenen bilgiye göre Kontrol -Boş liste - Liste boyutu 3
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 Node, Node; public LinkedList() Node = new ListNode(""); Node = new ListNode(" ); Node.sonraki = Node; Node.sonraki = Node; Singly linked lists (Eleman ekleme) ListNode yeninode = new ListNode( Mustafa"); yeninode.sonraki =.sonraki;.sonraki = yeninode; 4
Singly linked lists (Eleman ekleme) ListNode yeninode = new ListNode( Mustafa");.sonraki = yeninode; Node = yeninode; Singly linked lists (Eleman silme) while ((.sonraki!= bagliliste.node) && (.sonraki!= silineceknode)) =.sonraki;.sonraki =.sonraki.sonraki; 5
Singly linked lists (Eleman arama) while ((.sonraki!= bagliliste.node) && (.sonraki!= aranannode)) =.sonraki; Singly linked lists (Boş liste) if (.sonraki == ) listebos = true else listebos = False; Eleman sayısı: int i = 0; ListNode = bagliliste.node; while (.sonraki!= bagliliste.node) =.sonraki; i++; listeboyutu = i; 6
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 Node, Node; public LinkedList() Node = new ListNode(""); Node = new ListNode(" ); Node.onceki = Node; Node.sonraki = Node; Node.onceki = Node; Node.sonraki = Node; Doubly linked lists (Eleman ekleme) 4 3 3 4 ListNode yeninode = new ListNode( Mustafa"); yeninode.sonraki =.sonraki;.sonraki.onceki = yeninode;.sonraki = yeninode; yeninode.onceki = ; 7
Doubly linked lists (Eleman silme) 3 3 while ((.sonraki!= bagliliste.node) && (.sonraki!= silineceknode)) =.sonraki;.sonraki.sonraki.onceki = ;.sonraki =.sonraki.sonraki; Doubly linked lists (Eleman arama) while ((.sonraki!= bagliliste.node) && (.sonraki!= aranannode)) =.sonraki; while ((.onceki!= bagliliste.node) && (.onceki!= aranannode)) =.onceki; 8
Circular lists Sadece tane sabit node vardır (Node) Circular lists Listenin başına ve sonuna eleman ekleme 9
Skip lists Eleman ekleme ve silme zordur. Listenin yeniden seviyelendirilmesi gerekir. Arama işlemi çok hızlıdır. Sel-organizing lists Move-to-front: Erişilen elemenı listenin başına alır Transpoze: Erişilen elemanı önündekiyle yer değiştirir Count: Erişilme sayısına göre sıralar Ordering: İstenen kritere göre sıralar 0
Sparse tables Sparse tables Bağlı dizilerle gösterim
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ı Node içindeki bilgi olacak. - Her dersin kodu Node 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. - Bir öğrenciye yeni bir ders ekleme - Bir derse yeni bir öğrenci ekleme 3- Bir öğrencinin bir dersini silme 4- Bir dersteki bir öğrenciyi silme 5- Bir dersteki tüm öğrencileri numara sırasına göre sıralı listeleme 6- Bir öğrencinin aldığı tüm dersleri ders koduna göre sıralı listeleme
Gelecek Hafta Yığınlar (Stacks) 3