bilgisayar programlama ı

advertisement
ELN1002 – BİLGİSAYAR
PROGRAMLAMA 2
VERİ YAPILARI
Sunu Planı
 Kendini-gösteren Yapılar
 Dinamik Bellek Tahsisi
 Bağlı Listeler
 Yığınlar
 Kuyruklar
 Ağaçlar
1
Veri Yapıları
 Şu ana kadar, diziler, matrisler ve yapılar gibi, sabit büyüklükteki
veri yapıları üzerinde duruldu
 Bu bölümde, çalışma zamanında daralıp genişleyen dinamik
veri yapıları üzerinde durulacaktır.
 Bağlı liste: Tek bir çizgiye bağlanan elemanların listesi.
Ekleme ve silinme listenin herhangi bir noktasından
 Yığın: Derleyici ve işletim sistemleri için önemli bir yapı.
Ekleme ve silinme sondan.
 Kuyruk: Bekleme kuyrukları. Ekleme sondan, silinme baştan.
 Ağaç: Verilerin yüksek hızda aranması ve dizilmesi için.
Kendini-gösteren Yapılar
 Kendini-gösteren yapılar, kendi tipinde bir işaretçi üyeye sahip
yapıalrdır.
struct node {
int data;
struct node *nextPtr; }
 nextPtr üyesi, „link-bağ‟ olarak da adlandırılır. Bir yapı tipindeki
değişkene aynı yapı tipinde bir değişkeni bağlamak için
kullanılır.
 Kendini gösteren yapılar, listeler, kuyruklar, yığınlar ve ağaçlar
gibi veri yapılarının oluşturulmasında kullanılırlar.
 Kendi tipindeki son işaretçiye NULL atanarak kendini işaret
etme işlemi sonlandırılabilir.
2
Dinamik Bellek Tahsisi
 Dinamik veri yapılarının oluşturulması ve kullanımı
dinamik bellek tahsisini gerektirir.
 Dinamik bellek tahsisinin sınırı, teorik olarak
donanımın sahip olduğu fiziksel bellek kadar veya
sanal bellek sisteminde mevcut sanal bellek miktarı
kadar olabilir. Fakat uygulamada durum böyle
değildir, çünkü bilgisayarda eşzamanlı olarak çalışan
pek çok program mevcuttur.
 malloc, free ve sizeof() bu aşamada kullanılacak olan
en temel dinamik bellek tahsisi komutlarıdır.
3
Bağlı Listeler
 Bir bağlı liste, “düğüm” olarak adlandırılan, kendini-gösteren





yapıların, işaretçilerle bağlanan – dolayısıyla bağlı adının alan –
doğrusal bir birikimidir.
Bağlı listeye, listenin ilk düğümünü gösteren bir işaretçiyle
erişilebilir. Takip eden düğümlere ise:
Her düğümde bulunan, bağ işaretçisi üyesiyle erişilebilir.
Listenin son elemanında bulunan bağ işaretçisi, listenin
sonunun geldiğini belirtmek üzere, NULL adres değerine atanır.
Böylece yeni bir düğüm işaret edemez.
Veri bağlı listelerde veri dinamik olarak tutulur – her düğüm
yalnızca ihtiyaç duyulduğu zaman oluşturulur.
Bir düğüm, diğer yapılar da dahil olmak üzere herhangi bir tipte
değişkeni içerebilir.
Bağlı Listeler
 Veri listeleri dizilerde de tutulabilir, fakat bağlı listeler birkaç
avantaj getirmektedirler.
 Bir bağlı liste, veri yapısı içerisindeki veri elemanlarının sayısı
tahmin edilmez olduğunda uygundur. Bağlı listeler dinamiktir,
dolayısıyla listenin uzunluğu gerektikçe azaltılır veya çoğaltılır.
Bir dizinin uzunluğu, bununla birlikte, bir kere hafıza tahsisi
yapıldıktan sonra değiştirilemez.
 Bağlı listeler, bellekte kesintisiz şekilde depolanmazlar. Fakat,
mantıksal olarak düşünüldüğünde, bağlı listenin düğümleri
kesintisizmiş gibi görünür.
Başlangıç
17
29
93
4
5
Karakterler alfabetik
sırada diziliyorlar.
6
Bir listeye sıralı şekilde düğüm
ekleme
*sPtr
oncekiPtr
gecerliPtr
yeniPtr
*sPtr
oncekiPtr
gecerliPtr
yeniPtr
7
Listeden düğüm silme
*sPtr
*sPtr
oncekiPtr
oncekiPtr
gecerliPtr
gecerliPtr
geciciPtr
Yığınlar
 Yığın, bağlı listenin kısıtlı bir versiyonudur.
 Yeni düğümlerin eklenmesi veya düğüm silinmesi yalnızca





yığının tepesinden gerçekleştirilebilir.
Bu sebepten dolayı yığın, son giren ilk çıkar (LIFO – Last In First
Out) prensibiyle çalışmaktadır.
Yığına, yığının tepesini gösteren bir işaretçiyle erişilebilir.
Yığının en son düğümünde bulunan bağ işaretçisi, yığının dibini
göstermek üzere, NULL adres değerine eşitlenir.
Yığınlar ve bağlı listeler, özdeş şekillerde gösterilirler.
Bağlı listeyle yığın arasındaki fark, bağlı listelerde veri ekleme
ve silme herhangi bir noktadan yapılabilir, fakat yığında bu işlem
en tepede gerçekleştirilir.
8
Yığınlar
 Yığın işlemlerinde kullanılan temel
fonksiyonlar push ve pop fonksiyonlarıdır.
 Push fonksiyonu yeni bir düğüm oluşturur ve
yığının en tepesine yerleştirir.
 Pop fonksiyonu, düğümün en tepesindeki
düğümü siler, ona ayrılmış belleği boşaltır ve
o düğümdeki değerleri döndürür.
stackPtr
8
2
3
9
10
11
Push işlemi
*tepePtr
*yeniPtr
*tepePtr
*yeniPtr
12
Pop işlemi
*tepePtr
*tepePtr
*geciciPtr
Kuyruklar
 Başka bir yaygın veri yapısı ise kuyruklardır.
 Kuyruğa düğüm eklemek ancak kuyruğun sonundan, kuyruktan
düğüm silmek ise kuyruğun başından gerçekleştirilir.
 Bu sebepten, kuyruk ilk giren ilk çıkar (FIFO – First In First Out)
prensibiyle çalışmaktadır.
 Düğüm ekleme operasyonuna – enqueue
 Düğüm silme operasyonuna ise – dequeque adı verilmektdir.
Başlangıç
17
Son
29
93
13
14
15
16
Kuyruğa ekleme
*basPtr
*basPtr
*sonPtr
*sonPtr
*yeniPtr
*yeniPtr
Kuyrukta Silme
*basPtr
*basPtr
*sonPtr
*sonPtr
*geciciPtr
17
Ağaçlar
 Bağlı listeler, yığın ve kuyruklar doğrusal veri yapılarıdır.
 Ağaçlar ise, özel yeteneklere sahip, doğrusal olmayan iki-
boyutlu veri yapılarıdır.
 Ağaç düğümleri, iki veya daha fazla bağ içerir. Bu bölümde,
binary ağaçlar üzerinde durulacaktır, yani düğümlerinin tümünde
iki bağlantı olan ağaçlar (düğümleri bir veya ikisi NULL olabilir
veya hiçbirisi NULL olmayabilir.)
 “Kök düğümü”, ağacın ilk düğümüdür. Kök düğümünün her bir
bağlantısı “alt (child)” olarak adlandırılır. Sol alt düğüm, sol alt
ağacın ilk düğümüdür ve sağ alt düğüm, sağ alt ağacın ilk
düğümüdür. Bir düğümün altları, “kardeş” düğümler olarak
adlandırılır. Altı olmayan düğüme ise “yaprak düğümü” adı
verilir.
18
19
20
Binary Arama Ağacı
 Binary Arama Ağacı



Sol alt ağaç içerisindeki değerler ailenin diğer elemanına
göre daha küçüktür.
Sağ alt ağaç içerisindeki değerler ailenin diğer elemanına
göre daha büyüktür.
Hızlı tarama imkanı sağlar.
21
Download