Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste

Slides:



Advertisements
Benzer bir sunumlar
Yığınlama Sıralaması (Heap Sort)
Advertisements

Ders İçeriği Ağaç Veri Modeli Tanım ve Gerçekleştirim İkili Ağaç
Saatte V km hız ile giden bir aracın t zamanda aldığı yolu bulan metodu yazınız. Metodu kullanacak bir program yazınız. ( yol=hız*zaman, x=V*t) — Metot.
Dizi Kullanan Örnekler
Diziler.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
Değişkenler ve bellek Değişkenler
Göstericiler (Pointers)
Listeler.
Yığın ve Kuyruk.
Veri ve Veri Yapıları Genel olarak bilgisayarlar.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Programlama-II (Java ile Bilgisayar Programlama)
Nesneye Dayalı Programlama
OOP UYGULAMA 5.
EDUTIME Java Day 4 Serdar TÜRKEL.
C++ STACK SINIFI.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Karar ifadeleri ve Döngüler
İkili Arama Ağaçları (Binary Search Trees) BST
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
Java Programlama Koleksiyon(Collection) Sınıfları
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler.
DİZİLER (Arrays) Yrd.Doç.dr. Cİhad demİrlİ
DİZİLER.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
C# Metot Overloading (Aşırı yükleme)
MIT503 Veri Yapıları ve algoritmalar Veri ağaçları
Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???
Görsel C# Programlama Güz 2009 (6. Hafta).
Chapter 6: Using Arrays.
P p 5. Bolum en cok kullanilan veri yapilarindan biri olan listeleri anlatmaktadir. p p Bu sunum da listeler uzerinde en cok yapilan islemleri aciklamaktadir.
Önceki Dersi Hatırlama !!
BİL551 – YAPAY ZEKA BİLGİSİZ ARAMA YÖNTEMLERİ
P Koleksiyon sınıfı bir grup öğeyi tutabilen bir veri tipidir. p Java da, koleksiyon sınıfları öğeleri ekleme,çıkarma,inceleme metodlarıyla birlikte bir.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
Kalıtım , Sınıf Asli Ergün.
JAVA’DA DİZİLER Dr.Galip AYDIN.
Dizi ve ArrayList.
Sınıflar ve Nesneler Sınıf: bir nesnenin şablonunu, kalıbını, şeklini, davranışını, kalıtımını değişkenleri, metodları ve ebeveynleri vasıtasıyla tanımlar.
Trees, Vectors, Iterators. ADT Abstract Data Type (ADT) vs implementation -Soyut Veri Türleri - Uygulamaları.
Ders İçeriği Liste Soyut veri yapısı (ADT)
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
Ders 1: ARRAYLIST Hazırlayan : Yrd. Doç. Dr. Barış GÖKÇE
NESNEYE YÖNELİK PROGRAMLAMA
Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
BAZI VERİ YAPILARI Yılmaz KILIÇASLAN.
BAZI VERİ YAPILARI Yılmaz KILIÇASLAN. Sunu Planı Bu derste, çizgeler gibi bazı teorik nesnelerin bellekte nasıl tutulduğunu ve algoritmalarca nasıl işlendiğini.
Bil 102 Bölüm 6 Diziler.
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
JAVA PROGRAMLAMA ORNEKLER
SINIFLAR ve NESNELER. İlk sınıfımızı ekleyelim class KrediHesap { public ulong HesapNo; public double Limit; public string KartSahibi; }
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Veri yapıları Hafta3 Dizi Yapıları.
KUYRUK (QUEUE).
Yığıt Soyut Veri Tipi (Stack ADT) Yığıt Veri Yapısı
AVL(Adel’son-Vel’skiĭ and Landis) Ağacı AVL ağacı, iki alt ağacının yükseklikleri farkının en fazla 1 olabildiği dengeli ikili arama ağacıdır. AVL ağacında.
Hafta2 Rekürsif Algoritmalar
Seriport String İletimi
DİZİLER Bellekte sıralı bir şekilde bulunan ve aynı türden bilgilerin saklandığı veri yapısına dizi (array) denir. Örneğin kullanıcıdan 7 kişinin not ortalamasını.
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
Kurucular(Yapıcılar), Yıkıcılar
Nesneye Dayalı Programlama 1
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
İleri Algoritma Analizi
MTM216 GÖRSEL PROGRAMLAMA
Sunum transkripti:

Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste Tanım ve Operasyonları İki Yönlü Bağlantılı Liste Tanım

Liste Liste nedir? A1, A2, …, AN şeklinde sıralı eleman dizisi class Liste { … void add(int e); void add(int poz, int e); void remove(int poz); int indexOf(int e); int lastIndexOf(int e); bool clear(); bool IsEmpty(); int first(); int last(); int get(int poz); int size(); }

Liste Kullanımı public static void main(String[] args){ Liste liste = new Liste(); liste.add(10); // 10 liste.add(5); // 10, 5 liste.add(1, 7); // 10, 7, 5 liste.add(2, 9); // 10, 7, 9, 5 liste.indexOf(7); // Returns 1 liste.get(3); // Return 5 liste.remove(1); // 10, 9, 5 liste.size(); // Returns 3 liste.isEmpty(); // Returns false liste.remove(0); // 9, 5 liste.clear(); // boş liste }/* bitt-main */

Liste: Gerçekleştirim 2 tür gerçekleştirim var: Dizi tabanlı - ArrayList Bağlantılı liste - LinkedList Dersin sonunda bu iki farklı gerçekleştirimin çalışma zamanlarını karşılaştıracagız.

Liste: Dizi Tabanlı Gerçekleştirim Temel fikir: Büyük bir dizi için yer açın (MAX) N değişkeni ile ilk boş yeri tutun N = 0 ise liste boş Silme veya ekleme işleminde elemanları kaydırın. Dizi doluysa ne yapılabilir? Daha büyük bir dizi için yer ayırın Eski dizideki elemanları yeni diziye kopyalayın Eski diziyi hafızadan silin Bu işlemler birçok hafıza değişimine/işlemine neden olmaktadır 1 2 ……… N-1 MAX_SIZE A_1 A_2 A_3 A_N-1 3 A_4

Bağlantılı Liste Aynı kümeye ait veri parçalarının birbirine, bellek üzerinde, sanal olarak bağlanmasıyla oluşturulur. Tüm veri, bir tren katarı gibi birbirine bağlı parçalardan oluşur. Bağlantılı listede birisi veri, diğeri bağlantı bilgisi olmak üzere temelde iki kısım bulunur. Veri kısmında o uygulama için gerekli olan bilgi bulunur. Bağlantı kısmında bağlantının nereye yapılacağını gösteren bir veya birkaç adres bilgisi bulunabilir.

Liste: Bağlantılı Liste Temel fikir: Her eleman için bir düğüm oluşturun Düğünler hafızada sıralı değildirler. Hafızada farklı yerlerde tutulurlar. Her eleman kendini takip eden bir sonraki elemanın hafızadaki yerini tutar İlk elemanın yerini tutmanız gerekir. Liste basi Liste sonu 1 2 3 bag bag bag bag A_1 A_2 A_3 A_4 düğüm 4 elemanlı bir liste (düğüm)

Liste: Bitişik ve Bağlı Gerçekleştirim Hafıza A_1 A_2 A_5 A_3 A_4 1 2 Adres L0 L0 + c L0 + 2c L0 + 3c L0 + 4c c bytes Adres Hafıza 1 2 Baş = T T A_1 Y W A_5 NULL X A_3 Z Y A_2 X Z A_4 W Bitişik Bitişik olmayan(Bağlı)

Bağlantılı Liste: Genel Bakış düğüm public class Dugum { public Dugum bag; public int veri; } veri bağ Liste düğümüne genel bakış bas = T son = W 1 2 3 4 A_1 Y A_2 X A_3 Z A_4 W A_5 NULL T, W, X, Y ve Z hafızada farklı yerlerdir

Bağlı Liste – Java class BagliListe { private Dugum bas; 1 2 3 class BagliListe { private Dugum bas; private Dugum son; private int eleSayisi; A_1 A_2 A_3 A_4 NULL public BagliListe(){ bas=son=null; eleSayisi=0; } public void add(int poz, int e); public void remove(int poz); public int indexOf(int e); public bool isEmpty(); public int first(); public int last(); public int get(int poz); public int size(); ...

Liste Operasyonları: add add(Pozisyon P, Eleman Türü E) Örnek: add(2, X): 2 nolu pozisyona X elemanını ekle Algoritma: (1) X’in nereye ekleneceğini bul (p’den sonra) (2) X elemanını içeren yeni bir düğüm oluştur (3) Düğümde bag kısmını güncelle 1 2 Liste Başı bag bag A_1 A_2 A_3 NULL p Çalışma Zamanı? O(N) – yeri bulmak için O(1) – eklemek için X düğüm bag Yeni düğüm

Liste Operasyonları: remove remove(Pozisyon P) Örnek: remove(2): 2 nolu yerdeki elemanı sil Öncelikle sileceğimiz elemanın yerini bulmamız lazım. p ile gösterilen düğümü silebilir miyim? Bir önceki düğümü de tutman gerekir Sileceğim düğümü bulurken bir önceki düğümü de izlemem gerekir(q değişkeni p değişkenini liste boyunca izler) Şimdi düğümün bag kısmını güncellemem gerekiyor q.bag = p.bag 1 2 3 Liste Başı bag bag bag A_1 A_2 A_3 A_4 NULL q p

Liste Operasyonları: remove remove(Pozisyon P) Örnek: remove(2): 2 nolu yerdeki elemanı sil 1 2 3 Liste Başı bag bag bag A_1 A_2 A_3 A_4 NULL q p Liste Başı bag A_1 A_2 A_4 p NULL A_3 q 1 2 Çalışma zamanı? elemanı bulmak – O(N), silmek – O(1)

Liste Operasyonları: indexOf indexOf(Eleman Türü E) Örnek: indexOf(X): listede X’i arama Doğrusal Arama yapılmalı Çalışma zamanı: O(N) 1 2 3 Liste başı bag bag bag A_1 A_2 A_3 A_4 NULL

Liste Operasyonları: isEmpty Liste boşsa true döndür bas == NULL ise true döndür Çalışma zamanı: O(1) 1 2 3 Liste Başı bag bag bag A_1 A_2 A_3 A_4 NULL

Liste Operasyonları: first, last, get get(Pozisyon K) first – Çalışma zamanı: O(1) last – Çalışma zamanı: O(1) – listenin sonunu tutarsak get – Çalışma zamanı: O(N) Liste sonu 1 2 3 Liste Başı bag bag bag A_1 A_2 A_3 A_4 NULL

Liste: Çalışma Zamanı Karşılaştırması Operasyon Dizi Tabanlı Liste Bağlantılı Liste add O(N) O(N) or O(1) remove indexOf isEmpty O(1) first last get size

Silme İşlemi Sileceğimiz düğüm elimizde zaten varsa ne yapabiliriz? remove(Dugum p); Hala bir önceki düğümü tutmamız lazım Bir önceki pozisyonu bulmak için çalışma zamanı O(N) Bu işlemi daha hızlı yapabilir miyiz? Eğer bir önceki elemanın yerini tutarsak. EVET! İki yönlü bağlantılı liste (Double Linked List) 1 2 3 Liste başı bag bag bag A_1 A_2 A_3 A_4 NULL p

İki Yönlü Bağlantılı Liste Sonu once sonra once sonra once sonra A_1 A_2 A_3 NULL NULL public class Dugum { public Dugum once; public Dugum sonra; public int veri; } Dugum bas; Dugum son;

İki Yönlü Bağlantılı Liste Sonu Liste Başı once sonra once sonra once sonra A_1 A_2 A_3 NULL NULL Avantajları: remove(Dugum p)  O(1) previous(Dugum p)  O(1) Liste üzerinde ileri ve geri gitmeyi sağlar Dezavantajları: Hafıza kullanımı (her düğümde fazladan bir yer tutulması) Güncelleme işlemlerinde daha fazla işlem ve karmaşıklık