Bu kitap, Objective-C programlama dilinde veri yapıları ve algoritmaların temel kavramlarını öğretir Kodlama örnekleri ve pratik alıştırmalarla dolu olan bu kaynak, başlangıç seviyesinden ileri seviyeye kadar her öğrenci için değerli bir araçtır Obj-C Veri Yapıları ve Algoritmaları, yazılım geliştirme yolculuğunuzda size liderlik edecek!

Bu makalede Obj-C programlama dilinde sıklıkla kullanılan veri yapıları ve bu veri yapılarıyla kullanılan algoritmalar hakkında bilgi edineceksiniz. Veri yapılarının önemi ve doğru kullanımı modern bilgisayar bilimi için temel niteliktedir. Ayrıca, bu yazıda verilen örnekler Obj-C programlama dili gibi başka programlama dillerinde de kullanılabilir.
Stack, Queue, Linked List ve Sort veri yapıları çok sık kullanılan veri yapılarıdır ve Obj-C programlama dilinde sıklıkla kullanılır. Bu veri yapılarından birini kullanabilmek ve bu veri yapılarına ait gereksinimleri yerine getirebilmek önemlidir. Stack, son giren ilk çıkar mantığıyla çalışırken Queue, ilk giren ilk çıkar mantığıyla çalışır. Linked List ise tek yönlü veya çift yönlü referanslara sahip veri yapılarıdır. En sık kullanılan Linked List türleri tek yönlü veya çift yönlü zıt yönlü bağlantılardır.
Sort algoritması, veri listelerindeki elemanları küçükten büyüğe veya büyükten küçüğe sıralamayı amaçlar. Bubble Sort, Selection Sort ve Insertion Sort gibi farklı sort algoritmaları vardır.
Big O Notasyonu, bir algoritmanın performansını ölçmeye yardımcı olan bir matematiksel gösterimdir. Bir algoritmanın en kötü performansını ölçmek için kullanılır. Bu notasyon, bir algoritmanın çalışma zamanını ve hızını ölçmek için önemlidir.
Yukarıda bahsedilen veri yapılarının ve algoritmalarının hepsi, Obj-C programlama dilinde kullanılan veri yapıları ve algoritmalarıdır. Bu veri yapıları birçok uygulama geliştirmek için kullanılabilir, ancak hangi veri yapısı veya algoritmanın kullanılabileceği konusunda doğru kararlar alınması gerekiyor. Bu yazıda, verilen örnekler gibi, bu veri yapıları ve algoritmaların Obj-C dilinde kullanım örnekleri paylaşılmıştır. Obj-C veri yapıları hakkında daha fazla bilgi edinmek isteyenler için bu makale yardımcı olacaktır.
Stack Nedir?
Stack, son giren ilk çıkar (Last In First Out - LIFO) prensibiyle işlev gören bir veri yapısıdır. Bunu bir yığın gibi düşünebilirsiniz, son eklenen eleman en üstte yer alır.
Bir stack veri yapısında, bazı temel işlemler mevcuttur:
- Push: Yığına yeni bir eleman ekler.
- Pop: En üstteki elemanı yığından çıkarır ve geri döndürür.
- Peek: En üstteki elemanı yığından çıkarmadan geri döndürür.
- isEmpty: Yığın boş mu diye kontrol eder.
Bir uygulama örneğine bakacak olursak, geri alma (undo) özelliği bir stack veri yapısını kullanarak gerçekleştirilebilir. Kullanıcının yaptığı her değişiklik yığına eklenir ve geri alma işlemi gerektiğinde en son yapılan değişiklik yığından çıkarılır.
Push | Pop | Peek | isEmpty |
---|---|---|---|
stack.push(5); | stack.pop(); | stack.peek(); | stack.isEmpty(); |
stack.push(9); | stack.pop(); | stack.peek(); | stack.isEmpty(); |
stack.push(2); | stack.pop(); | stack.peek(); | stack.isEmpty(); |
stack.push(7); | stack.pop(); | stack.peek(); | stack.isEmpty(); |
Queue Nedir?
Queue, verilerin ilk giren ilk çıkar mantığına göre depolanmasında kullanılan bir veri yapısıdır. Queue, birbirine benzer olan Stack veri yapısına benzerdir, ancak Queue veri yapısında ilk depolanan eleman ilk çıkarılırken, Stack veri yapısında son depolanan eleman ilk çıkarılır. Queue veri yapısının temel operasyonları Tüketme(dequeue) ve Eklemek(enqueue) işlemleridir.
Queue veri yapısının uygulama örneği olarak, insanların sırayla beklediği bir banka ATM'si düşünülebilir. Bankaya gelen insanlar sırayla ATM kuyruğuna girerler ve ilk giren kişi ilk ATM'yi kullanır. Bu şekilde sırayla ATM'leri kullanan insanlar, Queue veri yapısına benzer şekilde ilk giren ilk çıkan mantığına göre işlem yaparlar.
Queue Veri Yapısı | Açıklama |
---|---|
enqueue(x) | Queue'nun sonuna eleman eklemek |
dequeue() | Queue'nun başından eleman çıkarmak |
isEmpty() | Queue'nun boş olup olmadığını kontrol etmek |
peek() | Queue'nun başındaki elemanı göstermek |
- Queue veri yapısı, connected graph veri yapısına benzerdir
- Queue veri yapısında Elemanlar, "First In First Out(FIFO)" mantığına göre depolanırlar.
- Queue veri yapısı en yavaş işlem olan "enqueue" işlemine sahiptir çünkü Queue'ya her yeni eleman eklendiğinde tüm elemanlar sağa kaydırılır.
Linked List Nedir?
Linked List, veri yapısı içindeki öğelerin ardışık hafızada yerleşimine göre yapılandırılmamış olduğu bir veri yapısıdır. Bir öğe verilen bir adreste saklanır ve onu izleyen diğer öğeler de benzer şekilde kaydedilir. Her bir öğe iki ana bileşenden oluşur: veriler ve bir sonraki öğenin adresi.
Linked List veri yapısı, öğeleri herhangi bir sıraya göre düzenlemek için kullanılabilir. Örneğin, bir milyon öğenin sıralanmasını düşünün. Bu sıralama, tek başına bir dizi içinde yapılabilir ancak bu milyon öğenin sıralanması dizinin bellekte bir süreçle dayanıklılığını azaltıyor. Bu nedenle, programcılar sıralama işlevi için linked list veri yapısını tercih ederler. Ayrıca, Linked List yapısı, verileri programlama dillerinde nesne yönelimli programlama kavramlarını daha iyi tanımlamak için kullanılabilir.
Alan 1 | Alan 2 |
---|---|
Öğe 1 Veri | -> Bellekteki Öğe 2'nin Adresi |
Öğe 2 Veri | -> Bellekteki Öğe 3'ün Adresi |
Öğe 3 Veri | -> Bellekteki Öğe 4'ün Adresi |
Öğe 4 Veri | -> NULL |
Burada, her bir öğe iki alandan oluşur: veri ve sonraki öğenin adresi. Örnek veri yapısında, öğe 1'in verisi 'A' ve sonraki öğenin adresi öğe 2'nin bellekteki adresidir. Bu şekilde öğelerin bağlı listesini takip ederiz ve ağır data işlemlerini daha az bellek kullanarak gerçekleştiririz.
- Bellek etkinliği için kullanılır
- Komplike bir veri yapısı gerektiren işlemlerde kullanılır
- Öğelerin hareketli hafızada olması ve düzenlenebilir olması gerektiğinde kullanılır
Linked List'in bir dezavantajı, kuyruk (Queue) ve yığın (Stack) veri yapılarına kıyasla performansıdır çünkü öğelerin belleklerinde tutulması gereken ek linked list veri yolları vardır. Ancak, yüksek verimlilik gerektiren birçok uygulama için, Linked List veri yapısı tercih edilir.
Sort Algoritması Nedir?
Sort algoritmaları, belirli bir sıralama kuralına göre verileri düzenlemek için kullanılan algoritmaların genel adıdır. Bu algoritmalar, bir dizideki elemanları artan ya da azalan şekilde sıralayabilirler. Sort algoritmaları, programlama dilleri arasında oldukça yaygın olarak kullanılmaktadır.
Bubble Sort algoritması, mantığı oldukça basit olan ve en yavaş sort algoritmalarından biridir. Bu algoritmanın uygulama örneği için, bir sayı dizisi kullanılarak elemanların sıralanması yapılabilir. Örneğin, 5 3 1 8 2 sayılarına sahip bir dizi mevcut ise, bu sayılar Bubble Sort algoritması ile sıralandığında 1 2 3 5 8 şeklinde olacaktır.
Selection Sort algoritması da oldukça basit ve nispeten daha hızlı bir sort algoritmasıdır. Bu algoritmanın uygulama örneği için, bir seçim işlemi yapılır ve dizinin en küçük ya da en büyük elemanı bulunur. Bu eleman başa ya da sona taşınır, kalan dizide tekrardan seçim işlemi yapılır ve taşıma işlemi tekrarlanır. Bu şekilde dizinin elemanları sıralanır.
Insertion Sort algoritması, nispeten daha hızlı çalışan bir sort algoritmasıdır. Bu algoritmanın uygulama örneği için, bir sayı dizisi ve bu dizinin ilk elemanı seçilir. Dizinin ikinci elemanına bakılır ve ilk elemandan küçük mü, yoksa büyük mü olduğuna karar verilir. Ardından, bir sonraki elemana geçilir ve önceki elemanlardan küçük ya da büyük eleman aranır. Bu işlem dizinin son elemanına kadar tekrarlanır ve elemanlar sıralanır.
Sort algoritmaları için, Big O notasyonu kullanılarak performans analizleri yapılabilir. Big O notasyonu, bir algoritmanın çalışma zamanını ifade eder ve O(n), O(n^2), O(log n) gibi farklı değerler alabilir. Performans analizleri yapılırken, sort algoritmalarının hangi veri yapıları ile daha hızlı çalıştığı ve hangi durumlarda tercih edilmesi gerektiği gibi konular dikkate alınır.
Bubble Sort Nedir?
Bubble Sort, bir sıralama algoritmasıdır ve kolayca anlaşılabilir bir yapısı vardır. Bu algoritma, bir dizideki her öğeyi diğer öğelerle karşılaştırır ve gerektiğinde yerlerini değiştirerek sırayı oluşturur.
Bubble Sort işlemi, listedeki tüm öğeler sıralanana kadar tekrar eder. Her iterasyonda, listenin sonuna doğru üssel olarak öğeler sıralanır. Bu nedenle, farklı öğelerin konumları birkaç kez değiştirilebilir, ancak liste sonunda sıralanacaktır.
Bubble Sort, düşük miktarda veri için verimli bir seçenektir, ancak büyük veri kümelerinde yavaş çalışabilir. Kendine özgü bir yaklaşımı vardır, ancak veri kümelerinin sıralanmasını hızlandıran farklı yöntemler de vardır.
Dizideki Öğeler | Sıralama Sonucu |
---|---|
8, 2, 6, 4, 9 | 2, 4, 6, 8, 9 |
55, 23, 18, 3, 99, 1 | 1, 3, 18, 23, 55, 99 |
- Bubble Sort algoritması, n^2 karmaşıklığa sahiptir.
- En iyi durumda, sıralama için O(n) gerektirir.
- En kötü durumda, sıralama için O(n^2) gerektirir.
Bu örnekler, Bubble Sort algoritmasının sıralama işlevini, algoritmanın güçlü ve zayıf yönlerini açıkça göstermektedir. Kısa sürelerde küçük veri kümelerinde kullanıcılara sıralama sağlar, ancak daha büyük verilerde yavaş çalışabilir ve verimliliği düşebilir.
Selection Sort Nedir?
Selection Sort, sıralama algoritmalarından biridir. Bu algoritma, bir diziyi küçükten büyüğe veya büyükten küçüğe doğru sıralamak için kullanılır. Algoritma, dizinin elemanları arasında gezinir ve sıralanmış kısmından sonra en küçük veya en büyük elemanı seçer. Bu eleman, sıralanmamış kısmın en başına yerleştirilir ve işlem sıralanmış dizi boyunca devam eder.
Bu algoritma, küçük veri setleri için oldukça etkilidir. Ancak, büyük veri setleri için zaman karmaşıklığı nedeniyle etkisiz hale gelebilir. Selection Sort algoritması zaman karmaşıklığı bakımından O(n^2)’dir. Bu nedenle, büyük veri setleri için tercih edilmemesi gereken bir algoritmadır.
Adım | İşlem |
---|---|
1 | Dizinin ilk elemanından başlanarak en küçük eleman seçilir. |
2 | Seçilen en küçük eleman, dizinin ilk elemanı ile yer değiştirilir. |
3 | İkinci elemandan başlanarak dizinin en küçük elemanı seçilir. |
4 | Seçilen en küçük eleman, dizinin ikinci elemanı ile yer değiştirilir. |
5 | İşlem, dizinin sonuna kadar devam eder. |
Örneğin, aşağıdaki gibi bir dizi için Selection Sort uygulaması aşağıdaki gibidir:
- [5, 3, 8, 4, 2]
- [2, 3, 8, 4, 5]
- [2, 3, 8, 4, 5]
- [2, 3, 4, 8, 5]
- [2, 3, 4, 5, 8]
Bu örnek, Selection Sort algoritmasının nasıl çalıştığını daha iyi anlamanıza yardımcı olabilir. Ancak, hatırlanması gereken önemli bir nokta, büyük veri setleri için bu algoritmanın etkisiz olabileceğidir.
Insertion Sort Nedir?
Insertion Sort, sıralama algoritmaları içerisinde en yaygın olarak kullanılan algoritmalar arasında yer almaktadır. Bu algoritma, n adet eleman içeren bir diziyi sıraya koymak için kullanılır. Insertion Sort, küçük ölçekli problemlere yönelik olarak geliştirilmiş bir algoritmadır ve genellikle kullanımı basit ve hızlıdır.
Insertion Sort algoritması, belirli bir dizideki tüm elemanlar arasında karşılaştırma işlemi yaparak, daha küçük olan elemanı daha büyük olan elemandan önce gösterme mantığına dayanmaktadır. Bu işlem, bir oyuncunun elindeki kartları sıralamasına benzer. Algoritma, listedeki bir elemanı seçerek, bu elemanın solundaki veya sağında yer alan elemanlarla karşılaştırır ve elemanları sırayla kaydırarak, nihayetinde küçük olan elemanın doğru konumda yerleştirilmesini sağlar.
Insertion Sort algoritması, diğer sıralama algoritmaları ile karşılaştırıldığında daha yavaş bir algoritma olarak kabul edilir, ancak küçük düzeydeki sıralama problemlerinde oldukça etkilidir. Ayrıca, Insertion Sort algoritması, diğer sıralama algoritmalarına göre daha az bellek kullanımı gerektiren bir algoritmadır.
Uygulama örnekleri açısından Insertion Sort algoritması, birçok programlama dili tarafından desteklenmektedir. Genellikle, dizileri sıralamak ya da belirli bir öğeyi sıraya koymak için kullanılır. Örneğin, bir mağazada satılan ürünlerin fiyatları küçükten büyüğe sıralanarak listelenebilir veya bir öğrenci listesi öğrencilerin numaralarının küçükten büyüğe sıralanmasıyla oluşturulabilir.
Sonuç olarak, Insertion Sort algoritması küçük ölçekli problemler için oldukça uygun bir sıralama algoritması olarak karşımıza çıkmaktadır. Algoritmanın sade ve anlaşılır yapısı sayesinde pek çok programlama dilinde yer almaktadır ve kolayca kullanılabilmektedir.
Big O Notasyonu Nedir?
Big O notasyonu, algoritmanın performansını ölçmek için kullanılan bir terimdir. Algoritmanın veri boyutuna göre ne kadar hızlı çalıştığını belirleyen bir hesaplama yöntemidir. Bu notasyon sayesinde algoritmanın performansı, veri boyutunun artmasıyla nasıl değiştiğini görebiliriz.
Big O notasyonu, bir algoritmanın en kötü senaryo performansını ifade eder. En zorlu koşullarda algoritmanın ne kadar sürdüğünü hesaplar. Örneğin, bir algoritma verilen sayıdaki öğeleri sıralarken, veri boyutu arttıkça sıralama işleminin ne kadar zaman alacağını Big O notasyonuyla ölçebiliriz.
Big O notasyonlarını sınıflandırmak için çeşitli semboller vardır. O(1) sabit bir süre gerektiren algoritmalar için kullanılırken, O(n) bir algoritmanın performansı veri boyutu arttıkça doğrusal olarak artabilir. O(n^2) ise bir algoritmanın performansı veri boyutu arttıkça karesel olarak artabilir.
Big O Notasyonu | Algoritma |
---|---|
O(1) | Sabit süreli işlemler örneğin array elemanlarını okumak, eleman eklemek/çıkarmak |
O(n) | İşlem sayısı veri boyutu arttıkça doğru orantılı örneğin listedeki elemanları yazdırmak ya da listede arama yapmak |
O(n^2) | Veri boyutu arttıkça işlem sayısı karesel artar örneğin bubble sort, selection sort |
Big O notasyonu, algoritmaların gereksinimlerini ve karmaşıklığını anlamak için önemlidir. Algoritmaları daha iyi anlamayı ve optimize etmeyi sağlayarak verimliliği artırır. Bu nedenle, programcıların Big O notasyonunu öğrenmeleri ve uygulamalarında kullanmaları önerilir.