MIT503 Veri Yapıları ve algoritmalar Veri Yapılarına Giriş

Slides:



Advertisements
Benzer bir sunumlar
MIT503 Veri Yapıları ve algoritmalar
Advertisements

MIT503 Veri Yapıları ve algoritmalar Veri Yapılarına Giriş
IT503 Veri Yapıları ve algoritmalar
Değişken , Veri Türleri ve Operatörler
MIT503 Veri Yapıları ve algoritmalar Algoritma Oluşturma – Açgözlü algoritmalar ve buluşsallar Y. Doç. Yuriy Mishchenko.
MIT563 Yapay Zeka ve Makine Öğrenmesi
Yığın ve Kuyruk.
Nesneye Yönelik Programlama
Bölüm 2 C Dilinin Temelleri
Değişken Tanımlamaları
MATEMATİK.
MATLAB’İN SAYI YUVARLAMA FONKSİYONLARI
MIT503 Veri Yapıları ve algoritmalar Algoritmalara giriş
OOP4 LAB.
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
C++ STACK SINIFI.
MIT503 Veri Yapıları ve algoritmalar En önemli graf problemleri
BPR152 ALGORİTMA VE PROGRAMLAMA - II
DEĞİŞKENLER VERİ TÜRLERİ ve OPERATÖRLER
MIT505 İnternet ve Web Programlama: Dinamik web sayfaları, javascript
Java Programlama Koleksiyon(Collection) Sınıfları
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
TBF Genel Matematik I DERS – 1 : Sayı Kümeleri ve Koordinatlar
NESNEYE YÖNELİK PROGRAMLAMA
VERİ TABANI VE YÖNETİM SİSTEMLERİ
Veri Yapıları Ve Algoritmalar
MIT503 Veri Yapıları ve algoritmalar Veri ağaçları
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ DERLEYENLER: Ahmet Can ÇAKIL Ali Murat GARİPCAN Özgür AYDIN Şahin KARA KONTROL : Prof. Dr. Asaf VAROL KONU : LİSTELERE.
Nesneye Yönelik Programlama
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
DEĞİŞKENLER VE VERİ TİPLERİ
Veri Yapıları Yrd. Doç. Dr. Altan MESUT.
Değişkenler bellekte bulunan verilerdir. Değer tipleri veriyi direk olarak bellek bölgesinden alırken, Referans tipleri başka bir nesneye referans gösterirler.
FONKSİYONLAR f : A B.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
C PROGRAMLAMA DİZİLER (ARRAYS).
Ders İçeriği Liste Soyut veri yapısı (ADT)
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
BM-103 Programlamaya Giriş Güz 2014 (4. Sunu)
Veri Yapıları ve Algoritmaları ders_1
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.
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
VERİ TİPLERİ VE DEĞİŞKENLER
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 8.  Tamsayı Değerler (Integer) Tamsayılar, 10 tabanlı (decimal), 8 tabanlı (octal) veya 16 tabanlı (hexadecimal)
Değerler ve Değişkenler
Veri Yapıları.
2. HAFTA 2. Hafta.
İnsan Kaynakları Bilgi Sistemleri
Karşılaştırıcı ve Aritmetik İşlem Devreleri
Veri yapıları Hafta3 Dizi Yapıları.
Adım Adım Algoritma.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
Hashing (Çırpılama).
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
İŞLEM KAVRAMI.
Algoritma ve Akış Şemaları
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
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ı.
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H11
İŞLEM KAVRAMI.
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
BLM-111 PROGRAMLAMA DİLLERİ I Ders-2 Değişken Kavramı ve Temel Operatörler Yrd. Doç. Dr. Ümit ATİLA
Bilgisayar Bilimi Problem Çözme Süreci-2.
YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

MIT503 Veri Yapıları ve algoritmalar Veri Yapılarına Giriş Y. Doç. Yuriy Mishchenko

Veri yapıları ve veri tipleri Ders planı Veri yapıları nedir Neden veri yapıları Basit veri yapıları Bileşik veri yapıları İleri (soyut) veri yapıları

Sonlu durum hesaplama Bildiğimi algoritmaların hepsi şu şekilde düşünülebilir: bir amacı ulaşmak için, bir değişken kümesi var ve o kümeyi sırayla değiştiren işlemler vardır Hesaplamaların tüm adımlarında algoritmanın durumunu belirten değişkenlere bi algoritmanın durumu deriz, ayrıca algoritmanın durumunu güncelleştiren işlemlere algoritmanın kodu veya program denir

Sonlu durum hesaplama Bu şekilde gerçekleştirilen hesaplamalara algoritma biliminde sonlu durum makinesi denir Sonlu durum makinesi hesaplamanın bir türü, ama tek türü değil, yani hesaplama farklı şekilde de organize edilebilir (mesela sonsuz durum makinesi veya kuantum hesaplama) Fakat modern bilgisayarlarda kullanılan tüm programlar sonlu durum makinelerinden birilerdir

Sonlu durum hesaplama Başladığımız gibi, sonlu durum makinelerinin bir durum var ve o durum sonlu – yani belirli sayıda normal değişkenler veya değerler ile belirlenebilir; sonsuz'un anlamı budur Algoritmanın durumu güncelleştirmek için böyle sonlu durum değiştiren talimatlar var, o talimatlar makinenin temel işlemleri tanımlar Böyle işlemlerin belirli sırasına işte makinenin programı denir

Sonlu durum hesaplama Program İşlem Durum

Sonlu durum hesaplama Sonlu durum makine kavramları, Alan Turing, Konrad Zuse, John von Neumann matematikçiler tarafından 1930-1950 yıllarda geliştirilmiştir Bu nedenle sonlu durum makinelerine Von Neumann mimarisi veya Turing makineleri denir

Sonlu durum hesaplama Bizim için bu anda önemli olan şu – algoritmalar belirli bir "durum" üzerinde tasarımlanır ve bu durumu temsil etmek veya belirtebilmek için belirli araçlara ihtiyacımız var Bu araçlar veri yapıları dır

Veri yapıları nedir Veri yapısı: algoritmanın hesaplama durumunu herhangi bir anda belirtmek için kullanılan değerşler veya veriler

Veri yapıları nedir Veri yapıları temel değişkenlerden daha ileri bir kavram, yani değişken bir değerin eşdeğeri olarak düşünülebilirse eğer, veri yapıları aynı zamanda bu değerle gerçekleştirilebilir işlem veya dönüşümleri de belirtilir

Veri yapıları nedir Örneğin, matematiksel sayılar işte (a) bir sayısal değer VE (b) o değerlerle yapılabilir ekleme, çıkartma, çarpma ve bölme işlemlerinin tanımları İşte gerçekten bunların ikisi birlikte gelmeli – sayısal değer aritmetik işlemler olmadan çok anlamlı değildir Bilgisayar bilimin veri yapıları bu basit bir kavramın genişletilmesidir

Neden veri yapıları? Veri yapıların zengin bir çeşitliği var, böyle veri yapıları temsil edilebilen değerler ve tanımlanan yani bilinen işlem kümeleri olarak farklıdır

Neden veri yapıları? Bundan dolayı, belirli algoritmada o algoritmanın işlem ihtiyaçlarına en iyi şekilde karşılayabilecek veri yapılarının kullanımı avantajlı ve büyük önem taşır Örneğin –metin işletme yapan algoritmada karakter veri yapıları kullanılması çok daha anlamlı; veritabanları ile ilgli algoritmalarda dizi veri yapıları kullanılmaktan büyük kolaylık çıkar

Neden veri yapıları? Çok basit örnek – temel matematiksel işlem yapan program veya algoritmada temel sayısal değişkenler ve ilgili veri yapıları kullanılmaktadır

Neden veri yapıları? Diğer taraftan, verilerin kümeleri ile çalışan programlarda dizi/array lerin kullanımı neredeyse şarttır Arrayler, bir nesnenin kümesi bir sırada içeren bir veri yapısı, mesela A=[“a”,“b”,“c”]

Neden veri yapıları? Kayıt veya record'ler, bir farklı veri yapısı, burada birkaç değer isimli alanlarda içerir – bunların kullanımı da belirli durumlarda anlamlı Mesela – öğrenci.ad:=“Temel”, öğrenci.soyad:=“Okuyucu”, öğrenci.not:=“AA”, VB

Neden veri yapıları? Baze durumlarda değer kümesi program içerisinde dinamik olarak değiştirilmesi gerekiyor, bu durumda ne record nede array'ler tam olarak işi yaratmıyor Böyle durumlarda dinamik dizi veri yapıları kullanılabilir, onlardan biri hash-tabloları veya asosiative diziler Asosiative diziler değerleri "anahtar-değer" çiftleri şeklinde organize eder ve çiftler dinamik olarak kümeye eklenebilir veya kaldırılabilir Asosiative diziler, algoritmada dinamik veriler veya kaytılar ile çalışabilmek için kullanılabilir öğrenci[“ad”]:=“Temel”, öğrenci[“soyad”]:=“Okuyucu”, öğrenci[“araba”]:=“Ford", öğrenci[“not”]:=“AA””

Veri yapıları Vari yapıları üç temel gruba bölünebilir Primitif veri yapıları Bileşik veri yapıları Soyut veri yapıları

Basit veri yapıları Primitif veri yapıları matematiksel sayılardan çekilmiştir

Basit veri yapıları Tamsayılar Tamsayı veri yapısı, normal tamsayılara temsil eder Toplama, çıkartma, çarpma, ve bölme işlemler var Daha büyük, daha küçük ve eşitlik işlemler var Önceki ve sonraki ardışıklık işlemi de var Modern bilgisayarda gerçekten tek temel veriler tamsayılardır, tüm değer veri yapıları bilgisayarlarda tamsayılar kullanarak uygulanması gerekmektedir

Basit veri yapıları Programlama dillerinde tamsayılar kullanılan belleğin boyutuna göre byte, short, int, long tiplere bölümür: Byte – 8 bit (1 byte), 0’dan 255’e kadar Short – 16 bit (2 byte), 0’dan 65 535’e kadar Int – 32 bit (4 byte), 0’dan 4 294 967 296’e kadar Long – 64 bit (8 byte), 0’dan 18 446 744 073 709 551 616’e kadar Bunlar ayrıca işaretli veya işaretsiz olabilir: işaretli ise – aynı aralık iki eş negatif ve pozitif kısıma bölünür, örneğin, işaretli byte -127’den 127’e kadar değerleri kapsayan tamsayılar dır

Basit veri yapıları Gerçel sayılar Normal gerçel sayıların anlamına gelir Aritmetik toplama, çıkartma, çarpma ve bölme işlemleri var Daha büyük, daha küçük ve eşitlik karşılaştırma İşlemleri var Gerçel sayılar için ardışıklık işlemleri yoktur

Basit veri yapıları Bilgisayarlarda gerçel sayılar tabi tamsayılar kullanarak işletilir, ayrıca sadece yaklaşık olarak kaydedilebilir Örneğin bilgisayarda hesaplanan karekök 2 gerçekten karekök değil, onun bir yaklaşımı yani 1.414213562 ve bukadar, karekök 2 bundan sonra tabi çok daha devam eder Gerçel sayılar bilgisayarlarda “mantis” ve “exponent” iki tamsayı kullanarak temsil edilir, genellikle .24351E15 şekilde yazılan sayılar aslında 0.24351*1015 anlamına gelir; burada .24351 mantis ve 15 exponent tir

Basit veri yapıları Programlama dillerinin çoğunda gerçel sayılar float veya double olarak tanımlanabilir Float – 32 bit (4 byte) kullanan, ±3.4E38 aralıkta, 8 basamak mantise sahip olan sayılardır Double – 64 bit (8 byte) kullanan, ±1.8E308 aralıkta, 16 basamak mantise sahip olan gerçel sayılardır Gerçel değişkenler her zaman işaretlidir

Basit veri yapıları Boolean (mantıksal) sayıları Karakterler Sadece iki değer var, yanlış (0) veya doğru (1) OR, XOR, AND ve NOT mantıksal işlemleri tanımlanır Algoritmalarda mantıksal işlemleri yapmak için kullanılır Karakterler Algoritmalarda metinle çalişmak için kullanılır Programlama dillerinde genellikle byte veya short tamsayı ile temsil eder, sadece ilişkili tamsayılara bir tablo kullanarak “a”, “b”, “c” gibi harf değerleri atanır

Bileşik veri yapıları Bileşik veri yapıları, verilerin kümeleri toplu olarak temsil eden veri yapılarıdır; bunlardan ilki diziler veya array'ler

Bileşik veri yapıları Diziler, en temel bileşik veri yapısı Belirli bir sırada bşr eleman süresi belirtir Bilgisayarlarda belekte tek belek bloku olarak kaydedilir ve elemanların sırasına göre erişim sağlanır 1 2 3 4 5 6 7 8 sıra a 123 b Yuri ders 3.5 503 ttt elemanlar

Bileşik veri yapıları Diziler Elemanlara direkt erişim olabilmesi için, dizilerdeki verilere erişim çok hızlı ve verimli 1 2 3 4 5 6 7 8 sıra a 123 b Yuri ders 3.5 503 ttt elemanlar

Bileşik veri yapıları Diziler Dizi veri yapısı sadece içerik koyma/ortaya çıkartma işlemi tanımlar; bazen arama işlemi de tanımlanır Koyma/çıkartma işlemleri sayısal “indeks” yani “pozisyon” kullanarak gerçekleştirilir, örneğin benim_dizi[pozisyon]:=benim_değer 1 2 3 4 5 6 7 8 indeks a 123 b Yuri ders 3.5 503 ttt içerik

Bileşik veri yapıları Matrisler, iki, üç, vb boyutlu dizilerdir En temel iki boyutlu matris bir tablonun anlamına gelir Matrislerdeki işlemleri gerçekleştirmek için bileşik indeksler kullanılır, yani benim_tablom[i,j] 2 1 3 5

Bileşik veri yapıları Seyrek matrisler Seyrek matrisler çoğunlukla 0 içeren matrislerdir 2 1 3 5

Bileşik veri yapıları Seyrek matrisler, sıfırdan farklı elemanın listesi şekilde belirtilirse çok daha ekonomik ve verimlidir

Bileşik veri yapıları Bağlantılı listeler ikinci temel dii veri yapısıdır Bağlantılı listeler dinamik diziler ile çalışabilmek için keşfedilmiştir; eğer dizinin boyutu baştan belli olmalı ve program çalışıyor zaman değişemez, bağlantılı listelerin boyutu dinamik yani değişebiliyor Bağlantılı liste, bir elemanın zinciri olarak düşünülebilir

Bileşik veri yapıları Bağlantılı listenin ana fikri: nesne nesne nesne Her elemanda ilişkili veri ve sonraki elemana işaretçi vardır işaretçiler İşaretçileri takip ederek bütün liste geçirilebilir İki yonlü listelerde sonraki ve önceki elemana işaretçiler kullanılır işaretçiler

Bileşik veri yapıları Bağlantılı listedeki eleman sayısı kollayca değiştirilebilir, zincirin sonuna her zaman yeni bir eleman eklenerek Fakat belirli pozisyondaki elemana ulaşmak zahmetli olabilir, yani verilere erişim yavaş

Bileşik veri yapıları Bağlantılı listelerin işlemleri Ekleme – yeni eleman eklenmesi yeni eleman listenin sonuna eklenir ve işaretçi ile önceki elemana bağlanır Kaldırma – var olan eleman kaldırılması Kaldırma için, eleman sıradan kaldırıp yanındaki elemaların işaretçileri uygun şekilde güncelleştirilir Arama – listede belirli elemanın ortaya çıkartma Listenin birinci elemandan başlayınca hedef veya sona ulaşmaya kadar işaretçiler takip edilir

Bileşik veri yapıları Bağlantılı listede ekleme ve kaldırma Ekleme nesne nesne nesne Yeni eleman sonuna ekleyip yeni işaretçi ile bağlanır işaretçiler Kaldırma nesne nesne nesne Belirtilen elemanı kaldırıp yanındaki elemanın işaretçileri güncelleştirilir

Bileşik veri yapıları Bağlantılı liste genel veri yapılarının kavramının çok güzel bir örnek, çünkü basit fakat primitif olmayan ilgli işlemler için algoritma tanımlanması lazım; bu algoritmalar tabi bizim tarafımızdan belirtilmesi gereklidir Fakat bu algoritmalar uygulandıktan sonra bağlantılı liste verileri tek bir nesne olarka kullanılmaya başlayabilir; programlama dillerinin çoğunda bağlantılı liste veri tipi tanımlanır ve bu şekilde programlarda kullanılabilir

Bileşik veri yapıları Bagbaglantili liste = {ilk, son} eleman={.nesne, .onceki,.sonraki} Baglantili liste ekleme algoritmasi Baglatili liste kaldirma algoritmasi liste.ekle(yeni_nesne) liste.kaldir(hedef) yeni_eleman.nesne=yeni_nesne yeni_eleman.onceki:=son eleman:=liste.bul(hedef) onceki_eleman:=eleman.onceki yeni_eleman.sonraki:=0 sonraki_eleman:=eleman.sonraki son.sonraki:=yeni_eleman onceki_eleman.sonraki:= sonraki_eleman

Bileşik veri yapıları Hash Tabloları İkinci önemli dinamik dizi veri yapısı Hash Tabloları dır Hash tabloları, bağlantılı listeler gibi boyutu değişebilir, aynı zamanda elemanlar normal dizilerine kadar hızla ulaşılabilir

Bileşik veri yapıları Hash tablolarda elemanları kaydetmek için "anahtar-değer" çiftleri kullanır; burada anahtar index anlamına gelir ve daha önce kaydedilmiş değeri ortaya çıkartmak için kullanılabilir Anahtar-değer çiftleri serbest eklenip kaldırılabilir, yani böyle dizinin boyutu sabit değil - dinamik

Bileşik veri yapıları Hash tablosu nedir? Veri bloğu (bilgisayar belleği) Anahtar - nesne N (1) Verilen “anahtar” için bir “adres fonksiyonu” kullanarak bilgisayar belleğinde kaydetme adresi hesaplanır – “bellek adresi = H(anahtar)” H’ye “hash fonksiyon” denir, ana özelliği – herhangi farklı iki anahtar için farklı adres verilmektedir

Bileşik veri yapıları Hash tablosu nasıl çalışıyor ? Veri bloğu (bilgisayar billeği) Anahtar - nesne a c b e g h d f x N m l ı z n k (2) Hash fonksiyonu kullanarak farklı anahtarlı değerler tabi farklı adreslerde kaydedilir İkinci özelliği – hash fonksiyonu verileri adres bloğunu düzgün şekilde tamamen kullanacaktır

Bileşik veri yapıları Hash tablosu nasıl çalışıyor ? Veri deposu (bilgisayar billeği) Anahtar ? a c b e g h d f x N m l ı z n k (3) Daha önce kaydedilmiş değeri geri çıkartmak için, “anahtar” kullanarak yeni belek adresi hesaplanır ve program değeri o adresten direkt olarak çıkartır

Bileşik veri yapıları Hash tabloların ana avantajı, kaydedilmiş değerleri tekrar ortaya çıkartmak için tek operasiyon gerekir – anahtara göre adresi hesaplayıp o adrese başvurmak, aynı zamanda anahtar-değer çiftleri serbest eklenebilir Yani bağlantılı liste ise, bu tür işlem N eleman var ise O(N) işlem gerekebilir, burada hala O(1) her durumda

Bileşik veri yapıları Algoritmalarda çok kullanılan dizi veri yapıları yığınlar (stack) ve kuyruklar (queue) dır Yığınlar ve kuyruklar özel dinamik dizilerdir Yığınların ve kuyrukların düşük seviyeli programlamada yani asembler gibi işlemci seviyesi yapılarda çok yaygın şekilde kullanılır

Bileşik veri yapıları Yığın Yığınlar seri girişi kaydetmek ve sonra ortaya çıkartmak için kullanılır; örnek, metin satırı bir seri giriştir İki yığın türü var, Last-İn-First-Out (LİFO) ve First-İn-First-Out (FİFO, ayrıca kuyruk ayrıca queue dir) giriş yığın v e r i y a p ı

Bileşik veri yapıları Last-in-first-out (LİFO) ve First-in-first-out (FİFO) yığınları arasında farkı şöyledir girdi 1 1 girdi 2 1 2 LİFO  girdi 3 1 2 3 1 2 1 1 girdi çıktı 3 2 girdi 1 2  FİFO 3 girdi 1 2 3 1 2 3 çıktı

Bileşik veri yapıları Yani FIFO yığın girdiği satırı aynı sırada geri verir, LIFO girdiği satırı ters sırada geri verir

Bileşik veri yapıları Bilgisayar belleğinde yığınlar belirli boyutta standart bir dizi olarak uygulanır, böyle dizinin boyutun yıgın boyutu denir Giriş geldiğinde, dizi başından doldurulur, değerleri ortaya çıkartmak için, elemanlar yada başından yada sonundan çıkartılır (FIFO/LIFO’ya göre) s t a c k FİFO LİFO

Bileşik veri yapıları Dolayısıyla yığın işlemleri PUSH – (itmek) yeni değer yığına koymak POP – değer çıkartmak, FIFO veya LIFO olarak EMPTY – yığının boş olmasını kontrol etmek (yani sormak, boşaltmak değil) EMPTY PUSH 1 1 PUSH 2 2 1 PUSH 3 3 2 1 POP 3 2 1

Bileşik veri yapıları Ödev – yıgın veri yapısı sözde kod kullanarak uygulayınız

Bileşik veri yapıları Baze yığınlarla ilgili kavramlar, Yığını uygulayan dizinin boyutu sonlu olduğu için yıgın aşırı dolu durumuna çıkabilir, bu durumda yıgına “overflowed” denir “Stack overflow”, yaygın bir güvenlik problemidir, bilgisayarda yığın dizinin boyutu yeterli olmadığı zaman, veriler yandaki beleğin veya program kodunun üstüne yazmaya başlayabilir s t a c k WIN DO WS yığın ilgisiz belek

Bileşik veri yapıları Kuyruklar (queue) Kuyruklar, yığınlar gibi seri giriş için kullanılır FİFO yığınlarına eşit, ama farklı terimler kullanılır: “push” ve “pop” yerine “queue” ve “dequeue” denir

Bileşik veri yapıları Kuyruklar (queue) Öncelikli kuyruklar (priority queues) önemli bir özel durumudur Bütün değerler için bir “öncelik” tanımlanır “Queue”/”Push”, önceki push gibi çalışır “Dequeue”/”Pop”, ilk gelen değer yerinde en yüksek öncelikte olan değer verir

Daha yüksek önceliğe nesnesi önüne gidiyor Bileşik veri yapıları Öncelikli kuyruk öncelik nesne queue (a,1) a queue (b,2) kuyruk a b queue (c,0) c a b dequeue b c a Daha yüksek önceliğe nesnesi önüne gidiyor

Bileşik veri yapıları Öncelikli kuyrukların işlemleri ADD – yeni nesne eklemek POLL – nesne alıp kaldırmak PEEK – nesne kaldırmadan almak, sadece nesneye bakmak demek yani EMPTY – kuyruğun boş olmasını kontrol etmek

İleri veri yapıları Soyut veri yapıları genellikle farklı matematiksel kolleksiyon veya kümeleri uygularlar Küme, matematiğin temel bir kavramdır ve bilgisayar algoritmalarda da çok önemlidir Bunlarla ilgili önemli veri yapıları kümeler, haritalar, veri ağaçlar ve graflar (öbür ders)

İleri veri yapıları Kümeler Normal matematiksel küme temsil eder Değerlerin bir çeşiti sıra olmadan kaydeder Yapılabilir işlemi, değerin kümede var olup olmadığını söylemektir Not edelim ki, diziden faklı olarak kümelerde iki aynı değer aynı anda bulunamaz

İleri veri yapıları Küme işlemleri Üyelik, belirli değerin kümede var olup olmadığı Ekleme, değeri kümeye eklemek Kaldırma, değeri kümeden kaldırmak İteratör, küme içindeki tüm değerleri bir sırada geçirmek Boyut, içindeki değer sayısı

İleri veri yapıları Map veya Haritalar Harita veri yapısı matematiksel fonksiyonun anlamına gelir: bir x argumanı karşılayan değeri belirtir (x → f(x)) Haritalar, (x,y) bir çifti olarak da düşünülebilir – hash tabloları düşünün – fakat x'e biz haritanın parametresi ve y'e sonucu diyoruz ve x-y çiftine ilişki diyoruz

İleri veri yapıları Haritaların işlemleri Haritada parametrenin olup olmadığı Haritada sonucun olup olmadığı Haritanın parametre kümesini vermek Haritanın sonuç kümesini vermek Belirli parametreye göre sonucu vermek Yeni “parametre → sonuç” ilişkisi eklemek

Ödev LIFO yığın uygulayın Küme veri yapısıni uygulayın LIFO = {DIZI, var olan eleman sayisi n} PUSH, POP ve EMPTY işlemleri için gerekli algoritmalar yazın (sözde kod kullanarak) Küme veri yapısıni uygulayın Küme = { bir dinamik deposu, bağlantılı liste veya hash tablo olabilir, fark etmez } Üyelik, ekleme, kaldırma, boyut vb işlemler için gerekli algoritmalar yazın (sözde kod kullanarak)

Not: tipli ve tipsiz veri yapıları Tipli ve tipsiz kolleksiyonlar Kolleksiyonda genel türlü nesneler içerilebilirse (örneğin aynı kolleksiyonda tamsayılar, gerçek sayılar, karakterler, vb olablirse), böyle kolleksiyona tipsiz denir Tipli kolleksiyonda sadece belirli tipten nesneler içerilebilir Örneğin: Kolleksiyonda içerilen nesnelerin hepsi tamsayı olmalı Programlamada bunun gibi ifadeler bazen görülebilir Set<String> - sadece karakterler (String) içeren bir küme (Set) Map<String,Integer> - sadece karakterlerden (String) tamsayılara (Integer) bir harita (fonksiyon) Hash<String,String> - sadece karakterlerden (String) karakterlere (String) bir hash tablosu (Hash) Bir yerde görecekseniz, demek bu.