Takip et

C++ ile Doğrusal Dizilerde Veri Yapıları ve Algoritmaları (DSA) – 2. Gün

C++ ile Doğrusal Dizilerde Veri Yapıları ve Algoritmaları (DSA) – 2. Gün

Merhaba! Veri yapıları ve algoritmaları (DSA) öğrenme serüvenimin ikinci gününde, C++ programlama dili kullanarak doğrusal diziler üzerinde çeşitli sorular çözdüm. Bu deneyimimi sizinle paylaşmak ve öğrenme sürecinde karşılaştığım zorlukları ve çözüm yollarını anlatmak istiyorum. Öncelikle, doğrusal dizilerin ne olduğunu ve neden önemli olduklarını kısaca açıklayalım. Sonrasında ise, çözdüğüm bazı örnek soruları ve bunların C++ kodlarını inceleyeceğiz.

Doğrusal Diziler (Linear Arrays): Temel Kavramlar

Doğrusal diziler, en temel veri yapılarından biridir. Bellekte ardışık olarak sıralanmış, aynı veri tipindeki elemanlardan oluşan bir koleksiyonlardır. Her bir elemana, dizi içindeki konumunu gösteren bir indeks numarasıyla erişebilirsiniz. Bu basitlik, doğrusal dizileri birçok algoritma ve programlama probleminde kullanışlı kılar. Ancak, eleman ekleme ve silme işlemlerinde bazı sınırlamaları olduğunu da unutmamak gerekir. Örneğin, ortasına eleman eklemek için diğer elemanları kaydırmak gerekebilir, bu da performans kaybına yol açabilir.

Çözdüğüm Örnek Sorular

İkinci gün çalışmalarıma başlarken, çeşitli doğrusal dizi problemleri üzerinde yoğunlaştım. Örneğin, bir dizideki en büyük ve en küçük sayıları bulma, bir dizideki tekrar eden elemanları tespit etme, bir dizinin tersini alma gibi problemler üzerinde çalıştım. Bunlardan birini detaylı olarak ele alalım.

Örnek: Bir Dizideki Tekrar Eden Elemanları Bulma

Bu sorunda, verilen bir doğrusal dizide tekrar eden elemanları bulmamız gerekiyor. Bunun için, her bir elemanı diğer elemanlarla karşılaştırarak tekrar edenleri tespit edebiliriz. Ancak, bu yaklaşımın zaman karmaşıklığı O(n^2) olacaktır. Daha verimli bir yaklaşım ise, bir hash table (karma tablo) veya bir map (harita) kullanmaktır. Bu yapılar, elemanları hızlı bir şekilde aramamıza olanak tanır ve zaman karmaşıklığını O(n) seviyesine düşürür.


#include <iostream>
#include <map>

using namespace std;

int main() {
  int arr[] = {1, 2, 3, 2, 4, 1, 5, 3};
  int n = sizeof(arr) / sizeof(arr[0]);

  map<int, int> count; 
  for (int i = 0; i < n; i++) {
    count[arr[i]]++;
  }

  cout << "Tekrar eden elemanlar: ";
  for (auto const& [key, val] : count) {
    if (val > 1) {
      cout << key << " ";
    }
  }
  cout << endl;

  return 0;
}

Bu kod, bir map kullanarak dizideki her bir elemanın sayısını sayar ve sayısı 1’den büyük olanları (yani tekrar edenleri) ekrana yazdırır. Bu, daha verimli ve okunabilir bir çözümdür.

Bu örnek sadece başlangıç. Daha birçok algoritma ve veri yapısı var. Örneğin, sıralama algoritmaları (bubble sort, merge sort, quick sort vb.), arama algoritmaları (linear search, binary search vb.) doğrusal diziler üzerinde sıklıkla kullanılır. Bu algoritmaların zaman ve bellek karmaşıklıklarını anlamak, performans açısından önemlidir.

Öğrenme sürecinde karşılaştığım zorluklara gelince, en büyük zorluk algoritmaları anlamak ve doğru bir şekilde uygulamaktı. Ancak, sürekli pratik yaparak ve farklı kaynaklardan yararlanarak bu zorlukların üstesinden gelmeye çalışıyorum. Bu konuda kendi web sitemde daha fazla bilgi bulabilirsiniz. Ayrıca, bu makale bana oldukça yardımcı oldu.

Sonuç olarak, doğrusal diziler, DSA’nin temel yapı taşlarından biridir ve bunlar üzerinde pratik yapmak, algoritmik düşünme becerilerinizi geliştirmenize yardımcı olacaktır. Devam eden çalışmalarımda daha karmaşık veri yapıları ve algoritmaları öğrenmeye devam edeceğim.

Umarım bu makale size yardımcı olmuştur. Herhangi bir sorunuz varsa, lütfen yorumlarda belirtin.

#Etiketler: C++, DSA, Veri Yapıları ve Algoritmaları, Doğrusal Dizi, Linear Array, Algoritma, Programlama, Kod Örneği, Öğrenme, Yazılım Geliştirme


Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık