Veri yapıları Hafta3 Dizi Yapıları.

Slides:



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

Diziler.
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
Göstericiler (Pointers)
SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
Listeler.
Yığın ve Kuyruk.
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
BPR152 ALGORİTMA VE PROGRAMLAMA - II
void medyan(int cevap[]) { int j; siralama(cevap);
Nesneye Dayalı Programlama
Tanım Birbirleriyle ilişkili ve bitişik iki ya da daha fazla bellek hücresinden oluşan yapı Örnek dizi tanımı: int tamsayiDizi[10]; tamsayiDizi[0] /*ilk.
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
C++ STACK SINIFI.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
SANAL FONKSİYONLAR VE ÇOK BİÇİMLİLİK
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
Java Programlama Koleksiyon(Collection) Sınıfları
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler.
DİZİLER.
Veri Yapıları Ve Algoritmalar
METODLAR.
Nesneye Yönelik Programlama
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
Nesne Yönelimli Programlama Dersi
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü C ++ Nesne.
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.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
KUYRUKLAR (QUEUES).
NESNEYE YÖNELİK PROGRAMLAMA
Kalıtım , Sınıf Asli Ergün.
Nesneye Dayalı Programlama
Diziler (Arrays).
Dizi ve ArrayList.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
Ders İçeriği Liste Soyut veri yapısı (ADT)
Bölüm 3: Diziler BTEP 102 – Veri Yapıları ve Programlama
KALITIM Yılmaz Kılıçaslan.
Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
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.
SANAL FONKSİYONLAR VE ÇOKBİÇİMLİLİK Yılmaz Kılıçaslan.
C++ Ders Notları 2.Ders (Dilin Yapısı)
Bilgisayar Programlama. Tek bir değişken tanımlamak için aşağıdaki gibi bir yazım yeterlidir. int i; Hatırlanacağı gibi bu tarz bir tanımlamada.
Bil 102 Bölüm 6 Diziler.
C++.
DİZİLER Arrays.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
VERİ YAPILARI İşaretçi Nedir? Nesne Tabanlı Programlama.
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
3. HAFTA 3. Hafta.
Yığıt Soyut Veri Tipi (Stack ADT) Yığıt Veri Yapısı
BİLGİSAYAR programlama II
Hafta2 Rekürsif Algoritmalar
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu 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
YAPISAL PROGRAMLAMA Hafta-6
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.
YAPISAL PROGRAMLAMA Hafta-7
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:

Veri yapıları Hafta3 Dizi Yapıları

Aynı tipe (ilkel tipler ya da kullanıcı tanımlı tipler) sahip veri elemanlarının (aynı türden nesnelerin) oluşturduğu veri yapılarına (ilişkili veri elemanları topluluğu) dizi denir. Diziler statik elemanlardır. Programın çalışma süresi boyunca sabit boyuttadırlar. Diziler için bellekte ardışık yer açılır. Dizi elemanlarına indisler ya da başka yöntemlerle doğrudan hızlı bir şekilde erişilebilir. (O(1)) Sıralı dizi içerisine eleman ekleme çıkarma işlemleri nispeten zordur. Elemanların kaydırılması gerekebilir. Diziler

Dizi Tanımlama int c[12]; int sayi[5]; int b[ 100 ], x[ 27 ]; Dizi elemanlarına erişim (indis) int n[ 5 ] = { 2,1 2, 13, 4, 5 }; eleman sayısından az ise diğerleri 0 olur, fazla ise hata olur. int n[ 5 ] = { 0 }; hepsi 0 olur Dizi Tanımlama

Rasgele Sayı Üretme #include <iostream> #include <stdlib.h> #include <iomanip> using namespace std; int main(int argc, char *argv[]) { int sayilar[20]; for(int i=0;i<20;i++) { sayilar[i]=5+rand()%15; } cout<<setw(5)<<sayilar[i]<<setw(15); for(int j=0;j<sayilar[i];j++) cout<<"*"; cout<<endl; cin>>sayilar[1]; return 0; Rasgele Sayı Üretme

Rasgele Sayı Üretme #include <iostream> #include <iomanip> #include <ctime> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { const int sayi=2500; int dizi[sayi];int frekans[11]={}; int s,t; for(int i=0;i<sayi;i++) { dizi[i]=rand()%11; } t=dizi[i]; frekans[t]++; for(int i=0;i<11;i++) cout<<i<<" = "<<frekans[i]<<endl; system("pause"); return 0; Rasgele Sayı Üretme

Fonksiyonlara giriş parametresi olarak dizi gönderme #include <iostream> #include <iomanip> #include <ctime> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { const int sayi=2500; int dizi[sayi];int frekans[11]={}; int s,t; for(int i=0;i<sayi;i++) { dizi[i]=rand()%11; } t=dizi[i]; frekans[t]++; for(int i=0;i<11;i++) cout<<i<<" = "<<frekans[i]<<endl; system("pause"); return 0; Fonksiyonlara giriş parametresi olarak dizi gönderme

İşaretçiler ve Diziler

Dizilerin Bellek Organizasyonu

Dizilerin Bellek Organizasyonu

Dinamik Diziler

Dinamik Diziler

Günlük hayatta listeler; alışveriş listeleri, davetiye, telefon listeleri vs. kullanılır. Programlama açısından liste; aralarında doğrusal ilişki olan veriler topluluğu olarak görülebilir. Veri yapılarında değişik biçimlerde listeler kullanılmakta ve üzerlerinde değişik işlemler yapılmaktadır. LİSTELER (LIST)

Eleman ekleme ve çıkarma işlemlerinin herhangi bir sınırlama olmaksızın istenilen yerden yapılabildiği veri yapısıdır. Örneğin daha önce oluşturduğumuz bir bugün yapılacak işler listesine bir eleman eklerken, her zaman en sona veya en başa değil araya eleman eklememiz de gerekebilir. LİSTELER (LIST)

DOĞRUSAL LİSTELER Sıradan bellek konumlu doğrusal listeler: Diziler (Arrays) Yığıtlar (Stacks) Kuyruklar (Queues) DOĞRUSAL LİSTELER

Diziler(arrays), doğrusal listeleri oluşturan yapılardır Diziler(arrays), doğrusal listeleri oluşturan yapılardır. Bu yapıların özellikleri şöyle sıralanabilir: Doğrusal listelerde süreklilik vardır. Dizi veri yapısını ele alırsak bu veri yapısında elemanlar aynı türden olup bellekte art arda saklanırlar. Dizi elemanları arasında başka elemanlar bulunamaz. Diziye eleman eklemek gerektiğinde (dizinin sonu hariç) dizi elemanlarının yer değiştirmesi gerekir. Dizi program başında tanımlanır ve ayrılacak bellek alanı belirtilir. Program çalışırken eleman sayısı arttırılamaz veya eksiltilemez. DOĞRUSAL LİSTELER

Dizinin boyutu baştan çok büyük tanımlandığında kullanılmayan alanlar oluşabilir. Diziye eleman ekleme veya çıkarmada o elemandan sonraki tüm elemanların yerleri değişir. Bu işlem zaman kaybına neden olur. Dizi sıralanmak istendiğinde de elemanlar yer değiştireceğinden karmaşıklık artabilir ve çalışma zamanı fazlalaşır.   DOĞRUSAL LİSTELER

Bellekte elemanları ardışık olarak bulunmayan listelere bağlı liste denir. Bağlı listelerde her eleman kendinden sonraki elemanın nerede olduğu bilgisini tutar. İlk elemanın yeri ise yapı türünden bir göstericide tutulur. Böylece bağlı listenin tüm elemanlarına ulaşılabilir. Bağlı liste dizisinin her elemanı bir yapı nesnesidir. Bu yapı nesnesinin bazı üyeleri bağlı liste elemanlarının değerlerini veya taşıyacakları diğer bilgileri tutarken, bir üyesi ise kendinden sonraki bağlı liste elemanı olan yapı nesnesinin adres bilgisini tutar.   BAĞLI LİSTELER

Bağlantılı liste yapıları iki boyutlu dizi yapısına benzemektedir Bağlantılı liste yapıları iki boyutlu dizi yapısına benzemektedir. Aynı zamanda bir boyutlu dizinin özelliklerini de taşımaktadır. Bu veri yapısında bir boyutlu dizilerde olduğu gibi silinen veri alanları hala listede yer almakta veri silindiği halde listenin boyu kısalmamaktadır. Eleman eklemede de listenin boyutu yetmediğinde kapasiteyi arttırmak gerekmektedir. Bu durumda istenildiği zaman boyutun büyütülebilmesi ve eleman çıkarıldığında listenin boyutunun kendiliğinden küçülmesi için yeni bir veri yapısına ihtiyaç vardır. BAĞLI LİSTELER

Doğrusal veri yapılarında dinamik bir yaklaşım yoktur Doğrusal veri yapılarında dinamik bir yaklaşım yoktur. İstenildiğinde bellek alanı alınamaz ya da eldeki bellek alanları iade edilemez. Bağlantılı listeler dinamik veri yapılar olup yukarıdaki işlemlerin yapılmasına olanak verir. Bağlantılı listelerde düğüm ismi verilen bellek büyüklükleri kullanılır. BAĞLI LİSTELER

Bağlantılı listeler çeşitli tiplerde kullanılmaktadır; Tek yönlü doğrusal bağlı liste İki yönlü doğrusal bağlı liste Tek yönlü dairesel bağlı liste İki yönlü dairesel bağlı liste BAĞLI LİSTE ÇEŞİTLERİ

BAĞLI LİSTELERLE DİZİLERİN KARŞILAŞTIRILMASI Boyut değiştirme zordur Yeni bir eleman ekleme zordur Bir elemanı silme zordur Dizinin tüm elemanları için hafızada yer ayrılır Bağlı listeler ile bu problemler çözülebilir. BAĞLI LİSTELERLE DİZİLERİN KARŞILAŞTIRILMASI

BAĞLI LİSTELERLE DİZİLERİN KARŞILAŞTIRILMASI Bağlı Listeler; Her dizi elamanı için ayrı hafıza alanı ayrılır. Bilgi kavramsal olarak sıralıdır ancak hafızada bulunduğu yer sıralı değildir. Her bir eleman (node) bir sonrakini gösterir. BAĞLI LİSTELERLE DİZİLERİN KARŞILAŞTIRILMASI

DİZİ İLE LİSTE YAPISI #ifndef ARRAYLIST_HPP #define ARRAYLIST_HPP #include "ElemanYok.hpp" #include "ListeBos.hpp" #include "Tasma.hpp" template <typename Nesne> class ArrayList{ private: Nesne *elemanlar; int elemanSayisi; int kapasite; DİZİ İLE LİSTE YAPISI

DİZİ İLE LİSTE YAPISI void reserve(int boyut) { if(kapasite>=boyut) return; // O kadar yer zaten var Nesne *tmp = new Nesne[boyut]; for(int j=0;j<elemanSayisi;j++) tmp[j]= elemanlar[j]; if(elemanlar != NULL) delete [] elemanlar; elemanlar = tmp; kapasite = boyut; } DİZİ İLE LİSTE YAPISI

DİZİ İLE LİSTE YAPISI ArrayList() //Varsayılan Yapıcı metot { elemanSayisi = 0; kapasite=0; elemanlar = NULL; } DİZİ İLE LİSTE YAPISI

DİZİ İLE LİSTE YAPISI int length() const { return elemanSayisi; } bool isEmpty() const return length() == 0; DİZİ İLE LİSTE YAPISI

int indexOf(const Nesne& eleman) const throw(ElemanYok) { for(int i=0;i<elemanSayisi;i++){ if(elemanlar[i] == eleman)return i; } throw ElemanYok("Eleman bulunamadi"); DİZİ İLE LİSTE YAPISI

const Nesne& elementAt(int i) const throw(ElemanYok) { if(i<0 || i>=elemanSayisi) throw ElemanYok("Eleman bulunamadi"); return elemanlar[i]; } DİZİ İLE LİSTE YAPISI

void remove(const Nesne& eleman) throw(ElemanYok) { for(int i=0;i<elemanSayisi;i++){ if(elemanlar[i] == eleman){ for(int j=i+1;j<elemanSayisi;j++) elemanlar[j - 1] = elemanlar[j]; elemanSayisi--; return; } throw ElemanYok("Eleman bulunamadi"); DİZİ İLE LİSTE YAPISI

DİZİ İLE LİSTE YAPISI void removeAt(int i) throw(ElemanYok) { if(i<0 || i>=elemanSayisi) throw ElemanYok("Eleman bulunamadi"); for(int j=i+1;j<elemanSayisi;j++) elemanlar[j - 1] = elemanlar[j]; elemanSayisi--; } DİZİ İLE LİSTE YAPISI

DİZİ İLE LİSTE YAPISI void add(int i,const Nesne& yeni) throw(Tasma) { if(i<0 || i>elemanSayisi) throw Tasma("Indeks sinirlar disinda"); if(elemanSayisi >= kapasite) reserve(max(1,2*kapasite)); //Yer yoksa 2 kat yer ayır. for(int j=elemanSayisi-1;j>=i;j--) elemanlar[j + 1] = elemanlar[j]; elemanlar[i] = yeni; elemanSayisi++; } DİZİ İLE LİSTE YAPISI