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

Benzer belgeler
YZM 2116 Veri Yapıları

Yrd. Doç. Dr. Caner ÖZCAN

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

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

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

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

C++ ile Nesneye Dayalı Programlama

YZM 2116 Veri Yapıları

Yrd. Doç. Dr. Caner ÖZCAN

Week 7. Düğüm bulma Tekli bağlı liste: phead ve ptail Dairesel bağlı liste Çift bağlı liste

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

BAĞLAÇLI LİSTELER LINKED LISTS

BAĞLAÇLI LİSTELER LINKED LISTS

YZM 2116 Veri Yapıları

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

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

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

YZM 2116 Veri Yapıları

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

Veri Yapıları. Öğr.Gör.Günay TEMÜR Düzce Üniversitesi Teknolojis Fakültesi

VERİ YAPILARI VE PROGRAMLAMA

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

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

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

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

BIL222 Veri Yapıları ve Algoritmalar

DOSYA ORGANİZASYONU. Ağaç Yapıları ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

BMB204. Veri Yapıları Ders 9. B+ Ağacı, Hash, Heap. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

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

Ağaç (Tree) Veri Modeli

ALGORİTMA VE PROGRAMLAMA II

Yrd. Doç. Dr. Caner ÖZCAN

YZM 2116 Veri Yapıları

YZM 2116 Veri Yapıları

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

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

Standard Template Library

Algoritma Geliştirme ve Veri Yapıları 8 Kuyruk ve Yığın Yapısı. Mustafa Kemal Üniversitesi

Alıştırma 1: Yineleme

Veri Yapıları ve Algoritmalar dönem

Yrd. Doç. Dr. Caner ÖZCAN

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

DOSYA ORGANİZASYONU. Çarpışma çözümleme yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

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İ

VERİ YAPILARI DERS NOTLARI BÖLÜM 5 QUEUE (KUYRUK) Yard. Doç. Dr. Deniz KILINÇ

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

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

Yrd. Doç. Dr. Ümit ATİLA

Final Sınavı Soruları Bahar 2018

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

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

Week 9: Trees 1. TREE KAVRAMI 3. İKİLİ AĞAÇ DİZİLİMİ 4. İKİLİ ARAMA AĞACI 2. İKİLİ AĞAÇ VE SUNUMU > =

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

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

Veri Yapıları Laboratuvarı

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

ALGORİTMA VE PROGRAMLAMA I

7.Hafta Dengeli Arama Ağaçları (Red - Black Tree)

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

Ağaçlar (Trees) Ağaçlar (Trees)

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

BIP116-H14-1 BTP104-H014-1

ALGORİTMA VE PROGRAMLAMA I

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

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Yrd. Doç. Dr. Caner ÖZCAN

Pointers (İşaretçiler)

Fiziksel Veritabanı Modelleme

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Algoritmalar ve Karmaşıklık

Veri Yapıları ve Algoritmalar

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Algoritmalar. Arama Problemi ve Analizi. Bahar 2016 Doç. Dr. Suat Özdemir 1

BİLG Dr. Mustafa T. Babagil 1

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

Algoritmalar. İkili Arama Ağaçları. Bahar 2016 Doç. Dr. Suat Özdemir 1

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

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

Adresleme Yöntemleri MİKROİŞLEMCİ SİSTEMLERİ. Örnek MİB ile Adresleme. Adresleme Yöntemleri. Doğal Adresleme. İvedi Adresleme

Dosyalarda Farklı Yaklaşımlar. Kütük Organizasyonu 1

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

1 PROGRAMLAMAYA GİRİŞ

DOSYA ORGANİZASYONU. Sıralı erişimli dosya organizasyonu yöntemleri ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Özyineleme (Recursion)

Programlama Dilleri 3

Algoritmaların Karşılaştırılması. Doç. Dr. Aybars UĞUR

I Java Veri Yapıları 1

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

Skip List veri yapısında Seviye Optimizasyonu

Yrd. Doç. Dr. Caner ÖZCAN

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

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

BİL1001 Bilgisayar Bilimlerine Giriş 1

const objects & const member functions

ALGORİTMA VE PROGRAMLAMA II

2 PYTHON A GIRIŞ 13 PyCharm İle Python Projesi Oluşturma 15 Projenin Çalıştırılması 18 İlk Python Programımız 19 Açıklama Satırları 21

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

int main(void) { int num = 0; int input = 1; int retval = 0; struct NODE *nodepointer; nodepointer = (struct NODE *)malloc(sizeof(struct NODE));

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Transkript:

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

Bağlı Listeler Aynı kümeye ait veri parçalarının birbirlerine bellek üzerinde, sanal olarak bağlanmasıyla oluşturulurlar. Dizilerden sonra en sık kullanılan veri depolama yapısıdır. 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.

Diziler vs. Bağlı Listeler Dizilerin boyutu genellikle program tasarım esnasında (statik olarak) belirlenir. Bellekte dizi için ayrılan blok, çalışma zamanında kullanılmasa bile yer işgal eder. Diziler, elemanlarını ayrılan blok içerisinde ardışık olarak tutarlar. Dizi elemanlarına erişim indeks numarası ile olur. Böylece işaretçi değişkene gerek kalmaz. Arama: Sıralı bir dizi de arama yapma zaman karmaşıklığı O(log n) dir. Fakat sıralı olmayan bir dizi de arama yapma O(n) dir. Ekleme: Sıralı bir diziye ekleme yapma için önce eklenecek yer belirlenmeli ondan sonra boş yer açmak için elemanlar bir kaydırmalıdır. Bu ise O(n) zaman gerektirir. Sıralı olmayan diziye ekleme ise O(1) zamanında olur. Silme: Hem sıralı hem de sıralı olmayan diziden silme işlemi arama gerektirir. Sonrasında sıralı diziden silme gerçekleştirildikten sonra boş yerin doldurulması için elemanlar bir sıra kaydırılır. Her ikisinin de zaman karmaşıklığı O(n) dir. Bağlı listeler ise belleğin sadece bir bloğunu değil ihtiyaç duyduğu kadarını kullanırlar. Bu nedenle bellek yettiği sürece bağlı listelere eleman eklenebilir. Bağlı listeler, verileri bellek içinde ardışık olmayan bir adresleme ile tutarlar. Bir sonraki elemana işaretçi değişken ile erişilir. Arama: Liste içinde aranan bir elemana direkt olarak erişilemez, liste eleman zinciri baştan sona tek tek aranarak erişilir. Arama, O(n) zaman gerektirir. Ekleme: Verinin eklenmesi için önce ekleneceği yer aranır. Bu işlem O(n) zamandır. Verinin belirlenen yere eklenmesi ise O(1) zamanında olur. Silme: Silme işlemi, ekleme işlemi ile aynı zaman karmaşıklığı ve adımlara sahiptir. Listeler, ekleme ve silme de dizilerden daha iyi performansa sahiptir. Çünkü her hangi bir eleman kaydırmaya ihtiyaç duymaz. Liste üzerinde ara elemanlara kolayca erişilememesi nedeniyle sık sık arama işlemi gerektiren algoritmalarda çok tercih edilmez.

Bağlı Liste Çeşitleri Tek bağlı listeler (Singly linked lists) Çift bağlı listeler (Doubly linked lists) Çevrimsel listeler (Circular lists) Bağlı Liste Temel İşlemleri Listede gezinme (List traversal) Bir düğümün aranması (Searching a node) Bir düğümün eklenmesi (Insert a node) Bir düğümün silinmesi (Delete a node)

Bir dizi, bir bağlı liste ve bir çift bağlı liste de o1, o2, o3, o4 ve o5 verilerinin saklanması Bellekte bir dizi, bir bağlı liste ve bir çift bağlı liste de o1, o2, o3, o4 ve o5 verilerinin saklanması

Tek bağlı listeler Java da bağlı liste tanımlama: class Link { public int idata; // veri public double ddata; // veri public Link next; // referans } Boş bir bağlı liste de next işaretçi değişkeni değeri null dur. next = NULL; C de bağlı liste tanımlama: struct Node { Object element; //veri Node *next; // işaretçi };

Çift bağlı listeler Üstünlükleri: Tek bağlı listeler ile hareket (traverse) yönü sadece listenin başından sonuna doğrudur. Bu durum bir düğümden geriye gidilmesine izin vermemektedir. Çift bağlı listeler (ÇBL) ile bu sorun çözülmüştür. ÇBL ile bir düğüm ekleme veya silme işlemi, bir önceki düğüme gitme gereksinimi ortadan kalktığı için kolaylaşmıştır. Kısıtları: ÇBL Önceki düğümün adresini tutmak için ekstra işaretçi (ve dolayısıyla alan) gerektirir.

Çevrimsel listeler Listenin son elemanın işaretçi değişkeni NULL değil, ilk elemanın adresini gösterir. Böylece sonlu bir çevrimsel yapı oluşur. İşletim sisteminde belli sayı da işlemin (process) aynı kaynağı (resource), sabit zaman diliminde kullanacağı bir yapı çevrimsel liste ile oluşturulabilir.

EK-1 Traversing a linked list Node *pwalker; int count = 0; cout << List contains:\n ; for (pwalker=phead; pwalker!=null; pwalker = pwalker->next) { count ++; cout << pwalker->element << endl; }

EK-2 Searching a node in a linked list pcur = phead; // Search until target is found or we reach // the end of list while (pcur!= NULL && pcur->element!= target) { pcur = pcur->next; } //Determine if target is found if (pcur) found = 1; else found = 0;

EK-3 Insertion in a linked list a b current tmp x tmp = new Node; tmp->element = x; tmp->next = current->next; current->next = tmp; Or simply (if Node has a constructor initializing its members): current->next = new Node(x,current->next);

EK-4 Deletion from a linked list a x b current Node *deletednode = current->next; current->next = current->next->next; delete deletednode;