NANTAI NVERSTES VERI YAPILARI VE ALGORITMALAR DERS 2

  • Slides: 13
Download presentation
NİŞANTAŞI ÜNİVERSİTESİ VERI YAPILARI VE ALGORITMALAR DERS 2 Mühendislik Mimarlık Fakültesi mmf. nisantasi. edu.

NİŞANTAŞI ÜNİVERSİTESİ VERI YAPILARI VE ALGORITMALAR DERS 2 Mühendislik Mimarlık Fakültesi mmf. nisantasi. edu. tr NİŞANTAŞI ÜNİVERS İTESİ ©

YBLG 202 VERI YAPILARI VE ALGORITMALAR DERS 2 VERİ YAPILARI, DİZİLER, YAPILAR, DİNAMİK DİZİLER

YBLG 202 VERI YAPILARI VE ALGORITMALAR DERS 2 VERİ YAPILARI, DİZİLER, YAPILAR, DİNAMİK DİZİLER NİŞANTAŞI ÜNİVERSİTESİ ©

VERİ YAPILARI Veri Yapıları Programlamada veri yapıları en onemli unsurlardan birisidir. Program kodlarını yazarken

VERİ YAPILARI Veri Yapıları Programlamada veri yapıları en onemli unsurlardan birisidir. Program kodlarını yazarken kullanılacak veri yapısının en ideal şekilde belirlenmesi, belleğin ve calışma biciminin daha etkin kullanılmasını sağlar. Program icerisinde işlenecek veriler diziler ile tanımlanmış bir veri bloğu icerisinden secilebileceği gibi, işaretciler kullanılarak daha etkin şekilde hafızada saklanabilir. Veri yapıları, dizi ve işaretciler ile yapılmasının yanında, nesneler ile de gercekleştirilebilir. NİŞANTAŞI ÜNİVERSİTESİ ©

VERİ YAPILARI Veri Yapıları Verileri tanımlayan veri tiplerinin, birbirleriyle ve hafızayla ilgili tum teknik

VERİ YAPILARI Veri Yapıları Verileri tanımlayan veri tiplerinin, birbirleriyle ve hafızayla ilgili tum teknik ve algoritmik ozellikleridir. NİŞANTAŞI ÜNİVERSİTESİ ©

VERİ YAPILARI Diziler C dilinde dizi (array), aynı türden bir ya da daha fazla

VERİ YAPILARI Diziler C dilinde dizi (array), aynı türden bir ya da daha fazla nesnenin bellekte bir dizi veri yapısı biçiminde tutulmasını garanti eden araçtır. C’de bir dizinin tanımlanmasıyla birden fazla sayıda nesne tek bir deyimle tanımlanabilir. 10 elemana sahip bir dizi tanımlamak yerine, şüphesiz isimleri farklı 10 ayrı nesne de tanımlanabilir. Ama 10 ayrı nesne tanımlandığında bu nesnelerin bellekte ardışıl olarak yerleşmeleri garanti altına alınmış bir özellik değildir. Oysa dizi tanımlamasında, dizinin elemanı olan bütün nesnelerin bellekte ardışıl olarak yer almaları garanti altına alınmış bir özelliktir. Dizi de bir veri türü olduğuna göre dizilerin de kullanılmalarından önce tanımlanmaları gerekir. NİŞANTAŞI ÜNİVERSİTESİ ©

VERİ YAPILARI Göstericiler Adresler tamsayı görünümünde olsalar da tamsayı sabitleri gibi belirtilmezler. Çünkü tür

VERİ YAPILARI Göstericiler Adresler tamsayı görünümünde olsalar da tamsayı sabitleri gibi belirtilmezler. Çünkü tür bilgilerinin de belirtilmesi gerekir. Adres sabitleri, tamsayı türlerindeki sabitler üzerinde bilinçli tür dönüşümü yapılarak elde edilirler. Bir tamsayı sabitini adres türüne çevirmek için tür dönüştürme operatörü kullanılır. (<tür> *) <tamsayı sabiti> Tür dönüştürme operatörünün içindeki * adres ya da göstericiyi temsil etmektedir. Örneğin 0 x 1 F 00 hexadesimal olarak gösterilmiş int türden bir sabittir. Ancak: (int *) 0 x 1 F 00 NİŞANTAŞI ÜNİVERSİTESİ ©

VERİ YAPILARI Yapı nedir Yapılar (structures) programcının birden fazla nesneyi bellekte ardışıl olarak yaratmasına

VERİ YAPILARI Yapı nedir Yapılar (structures) programcının birden fazla nesneyi bellekte ardışıl olarak yaratmasına izin veren bir sentaks aracıdır. Yapıların kullanılmasıyla bellekte birbirini izleyecek şekilde yer alan birden fazla nesne yaratılabilir. Bellekte ardışıl nesnelerin dizi tanımlamalarıyla da yaratılabileceğini biliyorsunuz. Ancak yapıların dizilerden bazı farklılıkları vardır: Diziler aynı türden nesneleri içinde tutabilirken, yapılar farklı türlerden nesneleri tutabilirler. Yapıların kullanılmasının ana nedeni budur. Çoğu zaman, türleri farklı bir takım nesneler, mantıksal olarak bir bütün oluşturabilirler. İsim, yaş, cinsiyet, departman, ücret, öğrenim durumu gibi bilgileri farklı türden nesneler içinde saklayabiliriz ve bunların NİŞANTAŞI ÜNİVERSİTESİ © tamamı bir işyerinde çalışan bir kişiye ait

VERİ YAPILARI Yapı Bildirimi Yapı ile programcının yeni bir tür yaratmasına olanak sağlar. Yapıların

VERİ YAPILARI Yapı Bildirimi Yapı ile programcının yeni bir tür yaratmasına olanak sağlar. Yapıların kullanılabilmesi için yapılması gereken ilk işlem bu yeni türü derleyiciye tanıtmaktır. Tanıtma işlemi yapı bildirimi (structure declaration) ile olur. Yapı bildirimini gören derleyici, bu yeni tür hakkında bilgi edinmiş olur. Bu bildirimle derleyiciye aşağıdaki bilgiler verilir: - türün ismi - türün bellekte ne kadar yer kapladığı elemanların isimleri Derleyici bir yapı bildirimini gördükten sonra, bu türden bir nesne tanımlandığında nesne için bellekte ne kadar yer ayıracağını öğrendiği gibi, bu nesnenin programcı tarafından kullanımına ilişkin ifadelere ilişkin derleme zamanında bazı kontroller yapabilir. Yapı bildiriminin NİŞANTAŞI ÜNİVERSİTESİ © belirli bir sentaksı vardır.

VERİ YAPILARI Dinamik Bellek Yönetimi C dilinde bir dizi tanımlandığı zaman, bu dizi için

VERİ YAPILARI Dinamik Bellek Yönetimi C dilinde bir dizi tanımlandığı zaman, bu dizi için derleyici tarafından bellekte yer ayrılır. Örneğin: int a[100]; Derleme sırasında yukarıdaki gibi bir dizi tanımlaması ile karşılaşan derleyici bellekte (eğer kullanılan sistemde int türü uzunluğunun 2 byte olduğu varsayılırsa) toplam 200 byte yer ayıracaktır. Programın çalışması sırasında bir dizinin uzunluğunu değiştirmek mümkün değildir. Diziler konusunda açıklandığı gibi, dizi tanımlama ifadelerinde dizi boyutunu gösteren ifade (köşeli parantezin içerisindeki ifade) sabit ifadesi olmalıdır, değişken içeremez. Çünkü derleyicinin bellekte yer ayırması için, dizi boyutunu bilmesi gerekir. Oysa pratikte birçok uygulamada açılması gereken dizinin boyutu programın çalışması sırasında (runtime) belirlenmektedir. NİŞANTAŞI ÜNİVERSİTESİ ©

VERİ YAPILARI malloc fonksiyonu programın çalışma zamanı sırasında bellekten dinamik bir blok elde etmek

VERİ YAPILARI malloc fonksiyonu programın çalışma zamanı sırasında bellekten dinamik bir blok elde etmek için kullanılır. Fonksiyonun stdlib. h başlık dosyası içindeki bildirimi aşağıdaki gibidir: void *malloc(size_t nbyte); size_t türünün derleyiciyi yazanların seçimine bağlı olarak unsigned int ya da unsigned long türlerinden birinin yeni tür ismi olarak tanımlanması gerektiğini, ve sistemlerin hemen hepsinde size_t türünün unsigned int türü olduğunu hatırlayalım. Fonksiyona gönderilecek arguman ayrılmak istenen bloğun byte olarak uzunluğudur. Ayrılan alanın sürekli (contigious) olması garanti altına alınmıştır. malloc fonksiyonunun geri dönüş değeri elde edilen bellek bloğunun başlangıç adresidir. NİŞANTAŞI ÜNİVERSİTESİ ©

VERİ YAPILARI 2 - Uygulama (Implementation): Matematiksel ve mantıksal modellemenin uygulamasıdır. Diziler, programlamada cok

VERİ YAPILARI 2 - Uygulama (Implementation): Matematiksel ve mantıksal modellemenin uygulamasıdır. Diziler, programlamada cok kullanışlı veri yapıları olmasına rağmen bazı dezavantajları ve kısıtları vardır Soyut veri tipleri (ADT)’nin resmi tanımını şu şekilde yapabiliriz; Soyut veri tipleri (ADTs) sadece veriyi ve işlemleri 1 - Matematiksel ve mantıksal modeller (Soyut Veri Tipleri – Abstract Data Types - ADT): Bir veri yapısına (operasyonları) tanımlar, uygulama yoktur. Bazı veri tipleri; bakarken tepeden (yukarıdan) soyut olarak ele alacağız. - Arrays (Diziler) - Linked List (Bağlı liste) Yani hangi işlemlere ve ozelliklere sahip olduğuna - Stack (Yığın) bakacağız. - Queue (Kuyruk) Soyut bakışın icerisinde uygulama (implementasyon) - Tree (Ağaç) yoktur. - Graph (Graf, çizge) Ornek olarak bir listeyi ele alabiliriz. Bu listenin ozelliklerinden bazılarını aşağıda belirtirsek, Liste; - Herhangi bir tipte belirli sayıda elemanları saklasın, - Elemanları listedeki koordinatlarından okusun, - Elemanları belirli koordinattaki diğer elemanlarla değiştirsin (modifiye), - Elemanlarda guncelleme yapsın, - Ekleme/silme yapsın Veri Yapısı, bilgisayarda verinin saklanması (tutulması) ve organizasyonu icin bir yoldur. Veri yapılarını saklarken ya da organize ederken iki şekilde calışacağız; NİŞANTAŞI ÜNİVERSİTESİ ©

YBLG 202 VERI YAPILARI VE ALGORITMALAR Kaynakça NİŞANTAŞI ÜNİVERSİTESİ ©

YBLG 202 VERI YAPILARI VE ALGORITMALAR Kaynakça NİŞANTAŞI ÜNİVERSİTESİ ©

KAYNAKÇA 1. M. T. Goodrich, R. Tamassia, D. M. Mount, Data Structures and Algorithms

KAYNAKÇA 1. M. T. Goodrich, R. Tamassia, D. M. Mount, Data Structures and Algorithms in C++, John Wiley & Sons, Inc. , 2011 2. Hakan Kutucu, VERİ YAPILARI, Karabük Üniversitesi Mühendislik fakültesi, 2014 3. Data Structures and Algorithms, Tutorial. Points, NİŞANTAŞI ÜNİVERSİTESİ ©