BAĞLAÇLI LİSTELER LINKED LISTS

Benzer belgeler
BAĞLAÇLI LİSTELER LINKED LISTS

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

YMT219 VERİ YAPILARI ÖDEV-1

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

KUYRUKLAR. Doç. Dr. Aybars UĞUR

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Bölüm 5. Ağaç. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 73

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

D İ Z İ L E R A R R A Y S

YZM 2116 Veri Yapıları

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

Ağaç (Tree) Veri Modeli

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

AĞAÇLAR. Doç. Dr. Aybars UĞUR

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Yrd. Doç. Dr. Caner ÖZCAN

Algoritma Geliştirme ve Veri Yapıları 7 Liste ve Bağlantılı Liste. Mustafa Kemal Üniversitesi

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

Göstericiler (Pointers)

Week 6: Bağlı Liste (Linked List) BAĞLI LİSTE KAVRAMI TEKİL (SINGLE) BAĞLI LİSTE ÇİFT (DOUBLE) BAĞLI LİSTE DAİRESEL (CIRCULAR) BAĞLI LİSTE

BAĞLI LİSTELER BAĞLI LİSTELER

Veri Modelleri. Ağaç Veri Modeli. Ağaç Veri Modeli

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Veri Yapıları Laboratuvarı

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Pointer Kavramı. Veri Yapıları

SIRALAMA SORTING. Yrd. Doç. Dr. Aybars UĞUR

Class LinkedList java.lang.object java.util.abstractcollection java.util.abstractlist java.util.abstractsequentiallist java.util.

Arasınav Örnek Soruları Bahar 2018

AĞAÇLAR TREES. Doç. Dr. Aybars UĞUR

Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1

Yigin & Kuyruk {\} /\ Suhap SAHIN Onur GÖK

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Dizi ( Array ) ve Dizgi ( String )

Yrd. Doç. Dr. Caner ÖZCAN

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Balon & Banka Teslim tarihi: 17 Kasım 2008

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

YZM 2116 Veri Yapıları

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

Örnek1: #include <iostream> #include <string> using namespace std;

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 9. UYGULAMA

Örnek 1: Programı yazın ve çalıştırın.

Soru 1: Fahrenheit cinsinden verilen sıcaklığı Kelvin'e çeviren bir program yazınız. Aşağıdaki dönüşüm formülünü kullanabilirsiniz:

Algoritma Geliştirme ve Veri Yapıları 2 Veri Modelleri. Mustafa Kemal Üniversitesi

JAVADA DİZİ İŞLEMLERİ

YZM 2116 Veri Yapıları

YZM 2116 Veri Yapıları

Java String İşlemleri

Standard Template Library

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

YZM 2116 Veri Yapıları

BIL222 Veri Yapıları ve Algoritmalar

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>

Insertion Sort. (Sokuşturma Sıralaması)

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

ArrayList Uygulamaları

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

Yrd. Doç. Dr. Caner ÖZCAN

EMT2226 Nesne Yönelimli Programlamaya Giriş

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Sınav Dağılım & IMKB Endeks

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

Merge Sort Bireşen Sıralama

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler:

1. Her marka için 3 aylık satış toplamı nedir? (Tablodaki satır toplamları)

Veri Yapıları. Yrd. Doç. Dr. Şadi Evren ŞEKER

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

HASH(KARMA) TABLOSU VERİ YAPISI

Nesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

ALGORTMA ve PROGRAMLAMA - II (C# Sürümü) DERS NOTLARI

Çanakkale Onsekiz Mart Üniversitesi. Bilgisayar Mühendisliği Bölümü

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

// hataları işaret eden referans

YZM 2105 Nesneye Yönelik Programlama

ALGORİTMA VE PROGRAMLAMA II

Algoritma Geliştirme ve Veri Yapıları 3 Veri Yapıları. Mustafa Kemal Üniversitesi

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Class HashMap. Class HashMap java.lang.object java.util.abstractmap java.util.hashmap. Kılgıladığı Arayüzler: Cloneable, Map, Serializable

Transkript:

BAĞLAÇLI LİSTELER LINKED LISTS

Liste Günlük yaşamda listeler pek çok yerde kullanılmaktadır. Alışveriş listeleri, adres listeleri, davetli listeleri gibi. Bilgisayar programlarında da listeler yararlı ve yaygın olarak kullanılan veri yapılarındandırlar. Programlama açısından liste, aralarında doğrusal ilişki olan veriler topluluğu olarak görülebilir. Yığıt ve kuyrukların genişletilmesi yani üzerlerindeki sınırlamaların kaldırılması ile liste yapısına ulaşılır. Veri yapılarında değişik biçimlerde listeler kullanılmakta ve üzerlerinde değişik işlemler yapılmaktadır. Veri Yapıları : 07 Bağlaçlı Listeler 2

Listeler Üzerindeki Bazıİşlemler ve Tanımları 1. EmptyList(List) : returns Boolean Listenin boş olup olmadığını belirleyen fonksiyon. 2. FullList(List) : returns Boolean Listenin dolu olup olmadığını belirleyen fonksiyon. 3. LengthList(List) : returns integer Listedeki eleman sayısını bulan fonksiyon. 4. InsertElement(List, NewElement) Listeye yeni bir eleman ekleyen fonksiyon. 5. DeleteElement(List, Element) Listeden bir elemanı arayarak çıkartan fonksiyon. 6. DestroyList(List) Listedeki tüm elemanları silerek boş liste bırakan fonksiyon. 7. GetNextItem(List, Element) Etkin elemandan bir sonrakini döndüren fonksiyon 8. RetrieveElement(List, Element, Found) Elemanın listede olup olmadığını bulan ve döndüren fonksiyon Veri Yapıları : 07 Bağlaçlı Listeler 3

Bağlaçlı (Bağlı) Listeler Kendi tipindeki bir yapıyı gösteren bir işaretçi üyesine sahip yapılara self-referential structures adı verilir. Örnek olarak : struct node { char info; struct node *next; ; yapısı, info adlı karakter tipli bilgi elemanının yanında, bir düğüm yapısında bir bellek bölgesine işaret eden next işaretçisine sahiptir. Bu tür yapıların arka arkaya birbirine bağlanması mantığı listelerde, yığıtlarda, kuyruklarda ve ağaçlarda oldukça yararlıdır. Veri Yapıları : 07 Bağlaçlı Listeler 4

Doğrusal Bağlaçlı Liste Listedeki her düğümde bir sonraki düğümün adresinin tutulduğu veri yapısı (doğrusal) bağlı liste olarak adlandırılır. Listenin her bir elemanına düğüm (node) adı verilir. Düğümler, bilgi ve bağ (adres) sahalarından oluşmaktadırlar. Bağ sahalarında işaretçiler kullanılmaktadır. Listenin ilk elemanına dışarıdan bir işaretçi (list) ile erişilmektedir. Diğer düğümlere de bağlar yardımı ile ulaşılabilmektedir. Son düğümün sonraki adres (next) sahası NULL değerini içerir. NULL bağı, liste sonunu belirtir. Elemanı olmayan liste boş liste olarak adlandırılır. Herhangi bir boyuta dinamik olarak genişletilip daraltılabilen yığıt ve kuyrukların gerçekleştirimi bağlı listeler üzerinde yapılmaktadır. Veri Yapıları : 07 Bağlaçlı Listeler 5

Yığıt ve Kuyruk Gerçekleştiriminde Bağlaçlı Listeler Yığıtlarda ve kuyrukların gerçekleştiriminde sıralı bellek kullanımının (dizi) en büyük dezavantajı, hiç kullanılmasa veya az kullanılsa bile sabit miktardaki belleğin bu yapılara ayrılmış olarak tutulmasıdır. Ayrıca sabit bellek miktarı aşıldığında da taşma oluşması ve eleman ekleme işleminin yapılamamasıdır. Bağlı listeler üzerinde gerçekleştirildiklerinde ise bu problemler ortadan kalkmaktadır. Bellekten sadece gerektiği kadar yer ayrılmakta ve bellek boyutu bitene kadar bu yapılara ekleme işlemi yapılabilmektedir. Veri Yapıları : 07 Bağlaçlı Listeler 6

Bağlaçlı Liste Veri Yapısı ve Avantajı Bağlı listeler, başka veri yapılarının gerçekleştiriminde kullanılabildikleri gibi kendileri de veri yapısıdırlar. Bağlı listelerde elemanların eklenme ve çıkarılmasında bir sınırlama yoktur. Başa ve sona olduğu gibi araya da eleman eklenebilir; baştan ve sondan olduğu gibi ortadan da eleman çıkarılabilir. Bağlı liste dolaşılarak herhangi bir elemanına erişilebilir. Bir bağlı listenin n. elemanına erişmek için n tane işlem yapmak yani kendinden önceki (n-1) eleman üzerinden geçmek gerekmektedir. Elemanların bellekteki yerleri dizilerdeki gibi sıralı olmadığından elemanlar ve sıraları ile yerleştikleri bellek bölgeleri arasında bir ilişki yoktur. Bağlı listelerin diziler üzerine avantajı, bir grup eleman arasına eleman eklemede ve bir grup eleman arasından eleman çıkarmada ortaya çıkar. Dizilerde bir eleman silerken arada boşluk kalmasını engellemek için ilerisindeki (sağındaki) tüm elemanları bir geriye (sola) kaydırmak gerekir. Eleman eklemede de yer açmak için konulacağı yerdeki ve ilerisindeki elemanları bir ileriye (sağa) kaydırmak gerekecektir. Kaç tane elemanın yer değiştireceği (birer kaydırılacağı) dizi boyutuna bağlı olarak ve eklenecek elemanın yerine bağlı olarak değişecektir. Bağlı listelerde ise eleman ekleme ve çıkarma için yapılan iş liste boyutundan bağımsızdır. Veri Yapıları : 07 Bağlaçlı Listeler 7

Yığıtın Bağlaçlı Liste Gösterimi Eleman Ekleme ve Çıkarma Veri Yapıları : 07 Bağlaçlı Listeler 8

Kuyrukların Bağlaçlı Liste Gösterimi Eleman Ekleme ve Çıkarma Veri Yapıları : 07 Bağlaçlı Listeler 9

Öncelik Kuyruklarının Bağlaçlı Liste Gerçekleştirimi Yöntem 1 : (Sıralı liste tutularak) (Artan sıralı öncelik kuyruğunda) Eleman ekleme, eklenecek elemanın listeyi sıralı tutacak şekilde liste üzerinde dolaşılarak araya eklenmesi şeklinde gerçekleştirilir. Eleman çıkarma da, listenin ilk elemanının (en küçük değer) çıkarılması ile gerçekleştirilir. Yöntem 2 : (Sıralı olmayan liste) (Artan sıralı öncelik kuyruğunda) Eleman ekleme kuyruğun herhangi bir yerine yapılabilir. Eleman çıkarma ise eleman bulunana kadar tüm kuyruk boyunca dolaşılması ve elemanın listeden çıkarılması ile gerçekleştirilir. Öncelik kuyruklarında listelerin sıralanarak kullanımı sıralanmadan kullanımına göre daha etkindir. Veri Yapıları : 07 Bağlaçlı Listeler 10

Diğer Bazı Liste Yapıları Dairesel Bağlaçlı Listeler Circular Linked Lists Çift Bağlaçlı Listeler Doubly Linked Lists Dairesel Çift Bağlaçlı Listeler Circular Doubly Linked Lists Veri Yapıları : 07 Bağlaçlı Listeler 11

Dairesel Bağlaçlı Listeler Tüm düğümlerin bir sonraki düğümü gösterdiği bağlı listelerdir. Son elemanın bağı NULL değildir; ilk elemanı gösterir. Böylece dairesel bir yapı oluşur. Veri Yapıları : 07 Bağlaçlı Listeler 12

Çift Bağlaçlı Listeler Her düğümü iki bağ içerdiği bağlı listelerdir. İlk bağ kendinden önceki düğümü gösterirken ikincisi de kendinden sonraki düğümü gösterir. Çift bağlı listelerde, tek bağlı listelerdeki geriye doğru listeleme ve dolaşmadaki zorluklar ortadan kalkar. Veri Yapıları : 07 Bağlaçlı Listeler 13

Dairesel Çift Bağlaçlı Listeler Hem dairesellik hem de çift bağlılık özelliklerine sahip listelerdir. İlk düğümden önceki düğüm son, son düğümden sonraki düğüm de ilk düğümdür. Veri Yapıları : 07 Bağlaçlı Listeler 14

Java Programlama Dilinde Bağlaçlı Liste Örneği ve Kullanımı Bağlaçlı Liste Düğüm Yapısı ve Sınıfı class Dugum { public int veri; // değişik tiplerde çoğaltılabilir public Dugum sonraki; // sonraki düğümün referansı (adresi) public Dugum(int gelenveri) // Yapıcı metot { veri = gelenveri; // Düğüm yaratılırken değerini // aktarır public void yazdir() // Düğümün verisini yazdırır { System.out.print(" "+veri); Veri Yapıları : 07 Bağlaçlı Listeler 15

Bağlaçlı Liste Yapısı ve Sınıfı class BListe { // Listenin ilk düğümünün adresini tutar private Dugum bas; public BListe() // Bir BListe nesnesi { bas = null; // boş liste olarak açılır. public void listele() { // Bağlı Listeyi Baştan Sona Listeler System.out.println(); System.out.print("Bastan Sona Liste : "); Dugum etkin = bas; while(etkin!=null) { etkin.yazdir(); etkin=etkin.sonraki; Veri Yapıları : 07 Bağlaçlı Listeler 16

Bağlaçlı Liste Metotları //Listede anahtar değerini bulur public Dugum bul(int anahtar) { Dugum etkin = bas; while(etkin.veri!= anahtar) { if(etkin.sonraki==null) return null; else etkin = etkin.sonraki; ; return etkin; public void basaekle(int yenieleman) { // Liste başına eleman ekler Dugum yenidugum = new Dugum(yeniEleman); yenidugum.sonraki = bas; bas = yenidugum; public Dugum sil(int anahtar) { // Verilen anahtar değerindeki düğümü siler Dugum etkin = bas; Dugum onceki = bas; while(etkin.veri!=anahtar) { if(etkin.sonraki==null) return null; else { onceki = etkin; etkin = etkin.sonraki; if(etkin==bas) bas = bas.sonraki; else onceki.sonraki = etkin.sonraki; return etkin; Veri Yapıları : 07 Bağlaçlı Listeler 17

BListe sınıfını kullanarak bir bağlaçlı liste oluşturan ve test eden sınıf class BListeTest { public static void main(string args[]) { // liste adlı bir bağlı liste nesnesi yaratır BListe liste = new BListe(); liste.basaekle(9); for(int i=8; i>=1; --i) liste.basaekle(i); liste.listele(); Ekran Ekran Çıktısı Çıktısı :: // // Bastan Bastan Sona Sona Liste Liste : : 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 // // 55 Bulundu Bulundu // // Bastan Bastan Sona Sona Liste Liste : : 1 1 2 2 3 3 4 4 6 6 7 7 8 8 9 9 int deger = 5; Dugum d = liste.bul(deger); if(d==null) System.out.println("\n"+deger+" Listede Yok"); else System.out.println("\n"+deger+" Bulundu"); Dugum s = liste.sil(5); liste.listele(); Veri Yapıları : 07 Bağlaçlı Listeler 18

Alıştırmalar Tamsayı elemanlardan oluşan bir bağlaçlı liste sınıfına, elemanları küçükten büyüğe sıralı tutacak şekilde eleman ekleyen ekle metodunu yazınız. Aynı metodun listeyi büyükten küçüğe sıralı tutacak sürümünü yazınız. Tamsayı elemanlardan oluşan bir çift bağlaçlı liste sınıfı ile metotlarını (listele, ara, ekle, sil, güncelle) yazınız. Yolcu (ad, soyad, yas) nesnelerinden oluşan, ada göre sıralı bir tek bağlaçlı liste sınıfını ve listele, ara (ada göre), ekle, sil ve güncelle metotlarını yazınız. Veri Yapıları : 07 Bağlaçlı Listeler 19

Java daki Hazır LinkedList sınıfının import java.util.*; public class LinkedListExample { public static void main(string args[]) { LinkedList <Integer> liste = new LinkedList<Integer>(); int size; Iterator iterator; // Listeye Eleman Ekleme liste.add(5); liste.add(7); liste.add(3); liste.add(4); size = liste.size(); // Listenin dolaşılması System.out.print( "Elemanlar: "); iterator = liste.iterator(); while (iterator.hasnext()){ kullanımı System.out.print(iterator.next()+" "); Veri Yapıları : 07 Bağlaçlı Listeler 20 System.out.println(); // İlk eleman olarak 15 değerini ekleme liste.addfirst(15); listele(liste); // Üçüncü Konuma (2. indise) 25 değerinin eklenmesi liste.add(2,25); listele(liste); public static void listele(linkedlist<integer> liste) { Iterator iterator; iterator = liste.iterator(); while (iterator.hasnext()) { System.out.print(iterator.next()+" "); System.out.println(); Elemanlar: 5 7 3 4 15 5 7 3 4 15 5 25 7 3 4

Java daki Hazır LinkedList sınıfının kullanımı - Eleman Silme (Devam) int soneleman = liste.removelast(); listele(liste); System.out.println("Son Eleman : " + soneleman); int ikinci = liste.remove(1); System.out.println("İkinci konumdan silinen eleman : " + ikinci); Son Eleman : 4 kinci konumdan silinen eleman : 5 Veri Yapıları : 07 Bağlaçlı Listeler 21