C++ ile Veri Yapılarına Giriş

C++ ile Veri Yapılarına Giriş

Bu makalede, C++ programlama dilindeki veri yapılarına giriş yapılmaktadır Diziler, yığınlar, ağaçlar ve grafikler gibi farklı veri yapıları ele alınmıştır Diziler bellekte aynı tipteki verilerin ardışık olarak saklandığı yapılardır Çok boyutlu diziler matrisler gibi verilerin daha kolay erişilmesini sağlamaktadır Kare matrisler önemli matematiksel uygulamalar için kullanılırken, sparse matrisler içinde çoğu eleman sıfır olan matrislerdir Veri yapısı kullanarak, programlama hedefleri daha etkili bir şekilde gerçekleştirilebilir

C++ ile Veri Yapılarına Giriş

Bu makalede, C++ programlama dilinde veri yapılarına giriş yapacağız. Veri yapıları, programlama dillerinde belirli verilerin saklanmasını, organize edilmesini ve düzenlenmesini amaçlayan yapılardır. Veri yapıları kullanarak programlama dillerinde daha etkili kodlama yapabiliriz.

C++ dilinde kullanabileceğimiz birçok veri yapısı mevcuttur. Bunlar arasında diziler, yığınlar, ağaçlar ve grafikler bulunmaktadır. Diziler, aynı türdeki verileri sıralı bir şekilde tutar. Yığınlar ise son-in-sıra ilk-out (LIFO) şeklinde veri saklayan yapılardır. Ağaçlar ise hiyerarşik şekilde verileri saklarlar. Grafikler ise düğümlerle ve kenarlarla verileri saklarlar.

Bu makalede, her bir veri yapısı türünün kullanımını, avantajlarını ve dezavantajlarını ele alacağız. Konuya dair temel kavramları açıklayarak, C++ dilinde veri yapıları kullanımı konusunda detaylı bir giriş yapacağız.


Veri Yapıları Nedir?

Veri yapıları, C++ programlama dili içinde kullanılan önemli bir kavramdır. Veri yapıları, verilerin hafızada nasıl saklandığını ve düzenlendiğini tanımlayan yapılar olarak tanımlanabilir.

Bazı veri yapıları, verileri sıralı ve yapısal bir şekilde saklar. Bu veri yapıları arasında diziler ve karakter dizileri bulunur. Diziler, aynı tip verilerin sıralı bir şekilde saklandığı veri yapılarıdır. Karakter dizileri ise, yalnızca karakterlerin saklanmasına izin veren tek boyutlu dizilerdir.

Diğer veri yapıları ise, verileri belirli bir düzen içinde saklar. Yığınlar, LIFO prensibi ile verileri saklayan veri yapılarıdır. Yani son eklenen veri, ilk çıkar. Ağaçlar ise, hiyerarşik bir yapıda verilerin saklanmasını sağlar. Binary search trees ve AVL trees, sıralanmış ve dengeli bir yapıda verilerin saklanmasını sağlar.

Grafikler ise, düğümler ve kenarları birleştirerek verileri saklayan veri yapılarıdır. Yönlendirilmemiş grafiklerde, tüm kenarlar çift yönlüdür ve yönlü grafiklerde, kenarlar tek yönlüdür.


Diziler

Diziler, bellekte aynı tipteki verilerin ardışık olarak saklandığı yapılardır. Bu yapılar, kullanıcının istediği sayıda elemana sahip olabilir. Diziler, tanımlanırken boyutları verilir ve bu boyutlara göre bellek tahsis edilir. Bellekteki bu sıralı bloklar, dizi elemanlarına karşılık gelir. Diziler, tek boyutlu veya çok boyutlu olabilir. Tek boyutlu dizilerin her elemanı tek başına saklanırken, çok boyutlu dizilerin elemanları birden fazla boyutta saklanır.

Diziler, genellikle aynı tipteki verilerin depolanması ve düzenlenmesi için kullanılır. Matrisler, simgeler veya karakterler için kullanılan karakter dizileri gibi birçok farklı veri türü ile diziler kullanılabilir. Diziler, sıralı bir yapıda olduklarından, erişim işlemleri hızlıdır. Dizilerdeki her bir eleman, indis numarasıyla erişilebilir.

Çok boyutlu diziler kullanarak, matematiksel işlemler veya resim işleme programları için örneğin pikselleri bir matriste saklayarak kullanılabilir. Diziler, programlama içerisinde çok önemli bir yer tutan veri yapılarından biridir.


Çok Boyutlu Diziler

Çok boyutlu diziler, programlama dillerinde kullanımı oldukça yaygın olan bir veri yapısıdır. Çok boyutlu diziler, iki veya daha fazla boyutta veri saklamak için kullanılır. Bu nedenle, verilerin daha kolay erişilebilmesini sağlarlar.

Örneğin, bir matrisi veya bir resmi saklamak için çok boyutlu diziler kullanılır. Çok boyutlu diziler, satır ve sütunlardan oluşan bir matrisi tek bir değişken içinde saklarken, aynı zamanda her bir hücreye ulaşmayı da kolaylaştırır.

Çok boyutlu dizilerin kullanımı, tek boyutlu dizilere göre daha fazla zorluk taşır. Matrislerin boyutları ve hücre sayıları belirli olduğunda, işlemler daha kolay anlaşılabilmektedir. Ancak boyutların değişken olduğu programlarda çok boyutlu diziler, daha zor bir kullanıma sahiptir.

Çok boyutlu diziler için en tipik örnekler, kare matrisler ve sparse matrislerdir. Kare matrisler, iki boyutlu dizilerdir ve satır ve sütun sayıları eşittir. Ayrıca, sparse matrisler, içindeki çoğu eleman sıfır olan matrislerdir.

Kare Matrisler Sparse Matrisler
1 2 3 0 5 0
4 5 6 0 0 0
7 8 9 0 6 0

Bu örnekler, veri yapısı alanında kullanılan başlıca örnekler arasına girerler. Çok boyutlu dizilerin, büyük veri kümesi işlemlerinde çokça kullanıldıkları unutulmamalıdır.


Kare Matrisler

Kare matrisler, çok sayıda matematiksel uygulama için kullanılan önemli bir veri yapısıdır. İki boyutlu bir dizi olarak düşünülebilirler. Ayrıca, satır ve sütun sayıları eşittir, yani bir n x n boyutunda olurlar.

Bir kare matrisin elemanlarından her biri, çift bir indeksleme sistemine göre belirtilebilir. Yani, Mij şeklinde bir eleman belirtmek mümkündür. Burada i indeksi matrisin satırını, j indeksi ise sütununu belirtir. Örneğin, M11 elemanı ilk satırın ilk sütunundaki elemandır ve Mnn elemanı son satırın son sütunundaki elemandır.

Kare matrisler ayrıca diagonal matrisleri belirtmek için de kullanılırlar. Diagonal matris, kare matrisin ana diagonali boyunca yer alan elemanları olan bir matristir. Diagonal matrislerin, bir matrisin tersini alma veya bir matrisin izini hesaplama gibi işlemlerde önemli bir rolü vardır.

Kare matrislerin bir başka önemli özelliği de, belirli işlemler için verimli bir şekilde kullanılabilmesidir. Örneğin, lineer cebirde, matrisin tersi veya determinanını hesaplamada kullanılabilirler. Kare matrisler, ayrıca matrisin simetrik olup olmadığını veya pozitif definit olduğunu kontrol etmek için de kullanılır.

Bir kare matrisi oluşturmak için, öncelikle matrisin boyutu belirlenmelidir. Ardından, matrisin elemanları tek tek belirlenerek matris oluşturulabilir. Kare matrisi oluşturmanın bir diğer yöntemi ise, önceden belirlenmiş elemanlarla dolu bir matris oluşturmaktır.

Bir kare matrisi tanımlamanın diğer bir yolu da, satırlarını veya sütunlarını belirli bir düzenlemeye göre tanımlamaktır. Örneğin, bir kare matrisin elemanlarının tümü sıfır ise, bunun adı sıfır matris olarak geçer. Eğer kare matrisin ana diagonali boyunca yer alan elemanları dışında tüm elemanlar sıfırsa, bu durumda adı, identity matris olur.

Sonuç olarak, kare matrisler, matematiksel işlemleri kolaylaştıran önemli bir veri yapısıdır. Sıfır matrisi, identity matrisi ve diagonal matrisler gibi özel durumlar da bulunmaktadır. Kare matrislerin kullanımı, matrisin simetrikliği, pozitif definitliği veya determinanının hesaplanması gibi işlemlerde oldukça önemlidir.


Sparse Matrisler

C++ dilinde matrisler çok sık kullanılan veri yapılarından biridir. Sparse matrisler ise içindeki çoğu eleman sıfır olan matrislerdir. Bu matrisler genellikle büyük boyutlarda olabilir ve tüm elemanlarının saklanması gereksizdir. Bu nedenle, sadece matrisin sıfırdan farklı elemanlarının saklanması daha verimlidir.

Sparse matrislerin verimli bir şekilde saklanabilmesi için birçok yöntem kullanılabilir. Bu yöntemler arasında COO (koordinat listesi), CSR (sıkıştırılmış satır depolama) ve CSC (sıkıştırılmış sütun depolama) gibi teknikler yer alır.

COO yöntemi, matrisin sıfırdan farklı elemanlarının ve bu elemanların konumlarının saklandığı bir liste oluşturur. CSR yöntemi ise matrisin sıfırdan farklı elemanlarını belirli bir sırayla sıkıştırılmış bir şekilde saklar. CSC yöntemi ise CSR yöntemi ile benzer şekilde matrisin sıfırdan farklı elemanlarını sıkıştırır ancak sütunlara göre saklar.

Sparse matrisler, özellikle büyük boyutlu matrisler kullanıldığında bellek kullanımı açısından oldukça faydalı olabilir. Ancak kullanacağınız yöntemi matrisin boyutuna ve saklayacağınız eleman sayısına bağlı olarak seçmeniz önemlidir.


Karakter Dizileri

Karakter dizileri, C++ programlama dilinde tanımlanan bir veri yapısıdır. Tek boyutlu dizilerdir ve her bir elemanı bir karakteri temsil eder. Bu diziler, metinlerin veya karakterlerin saklanmasında sıklıkla kullanılır. Örneğin, "Merhaba Dünya" ifadesinin saklanması için bir karakter dizisi kullanılabilir.

Karakter dizileri, birçok farklı fonksiyonla birlikte kullanılabilir. Örneğin, strcmp() fonksiyonu ile iki karakter dizisi karşılaştırılabilir. strlen() fonksiyonu ile bir karakter dizisinin uzunluğu belirlenebilir. strcat() fonksiyonu ile bir karakter dizisi başka bir karakter dizisine eklenerek birleştirilebilir.

Karakter dizileri sadece harf veya rakamlardan oluşmak zorunda değildir. Diğer karakterler de dahil edilebilir ve hatta boşluklar bile karakter dizilerinde saklanabilir. Bir karakter dizisi oluşturmak için, tırnak işaretleri içinde karakterler sıralanır ve dizinin adı belirtilir. Örneğin:

Karakter Dizisi İfadesi
string1 "Merhaba"
string2 "Dünya"

Bu iki karakter dizisi, strcat() fonksiyonu kullanılarak birbirine eklenerek "Merhaba Dünya" ifadesini oluşturabilir.

Karakter dizileri, aynı zamanda birçok farklı karakter işlevini de yerine getirebilir. Örneğin, string sınıfı ile bir karakter dizisinin alt dizgesi belirlenebilir, böylece belirli bir karakter dizisine erişmek mümkündür. Ayrıca, bir karakter dizisi döngüleri ve karar yapıları için de kullanılabilir.


Yığınlar

Yığınlar, programlama dilindeki veri yapılarından biridir ve verilerin son giren, ilk çıkar prensibi ile saklanmasını sağlar. Bu prensip, son eklenen verinin ilk çıkartılması anlamına gelir. Yani, yığına eklenen son veri, ilk olarak yığından çıkarılmaktadır.

Yığınlarda veriler genellikle belleğin heap bölgesinde tutulur. Yani, yığın verileri, diğer veri yapılarından farklı olarak farklı bir bellek alanında saklanır. Programda yığın kullanımına örnek olarak, web tarayıcılardaki geri butonu gösterilebilir. Geri butonuna tıklandığında, tarayıcının önbelleğindeki son sayfa yığına eklenir ve bu sayfaya geri dönüldüğünde yığından çıkarılır.

Yığınlar veri saklama yöntemi olarak kullanılırken, heap kullanımı da yığınlarda önemli bir rol oynamaktadır. Heap, programın çalışma zamanında dinamik olarak bellek alanı ayırması gerektiğinde kullanılan bir veri yapıdır. Yani, program çalıştığı esnada ne kadar bellek alanı ihtiyacı varsa, heap bu alanı ayırıp kullanır.

Yığınlar için temel işlemler şunlardır:

  • Ekleme: Yığına yeni bir veri eklendiğinde, yığında belirlenen kurala göre eklenir.
  • Çıkarma: Yığının en üstündeki veri çıkartıldığında, yığın yeniden düzenlenerek kurala göre en üstteki veri belirlenir.
  • Görüntüleme: Yığının en üstündeki veri görüntülenir.

Yığınlar, birden fazla kullanım alanı olan bir veri yapısıdır. Bu yapılardan en yaygın kullanım alanı, programların RAM'in sınırlı olduğu durumlarda bellek yönetiminde kullanmak olabilir.


Heap

Heap, C++ programlama dilinde dinamik olarak bellek alanı ayırmak için kullanılan bir veri yapısıdır. Heap, sürekli değişen bellek ihtiyaçlarına yanıt vermek için idealdir. Bellek yönetimi için belirli bir boyutta bellek blokları tahsis etmek yerine, programın çalışma zamanında ihtiyaca göre heap üzerinden bellek ayırabilirsiniz.

Heap, LIFO (son giren, ilk çıkar) prensibiyle çalışır. Bellek blokları heap'e yığıldığında, en son yığılan blok en önce çıkar. Yani, en son kullanılan bellek blokları ilk öncelikle kapatılır.

Heap, her bir bloğun başlangıç adresini ve blok boyutunu izleyen iki ana veri yapısını kullanır. Heap bellek yönetimi, dinamik bellek blokları değişkenler oluşturmak için kullanılabilir. Bellek bloklarının tahsisinin kullanımı, programın gereksinimlerine bağlı olarak artar veya azalır


Ağaçlar

Ağaçlar, veri yapıları içinde hiyerarşik bir yapıda verilerin saklanmasını sağlar. Dallanmış bir yapıya sahip olan ağaçlar, verileri birbirleriyle ilişkilendirir ve her veri için bir ana düğüm (root node) belirler. Ağaçlar, birçok alanda kullanılmaktadır; örneğin programlama dillerinde semantik analiz, yapay zeka uygulamalarında, ağaç tabanlı arama algoritmasında kullanılabilirler.

Ağaç yapısı, ana düğümesten veya kök düğümden başlar. Daha sonra alt düğümler, bu kök düğümden türetilirler. Alt düğümler, kendi alt düğümlerine sahip olabilirler ve böylelikle ağaç yapısı oluşmuş olur. Her bir düğüm, benzersiz bir anahtar değerine (key value) sahip olur ve bu değerler, düğümler arasındaki ilişkiyi tanımlamaya yardımcı olur. Aynı zamanda, her bir düğüm çocuk düğüm adedini de belirler.

Ağaçların, birbirinden farklı türleri vardır. Bu türler, verilerin saklanış biçiminden, erişim şekline, performansa kadar birçok faktöre göre değişebilirler. Binary search trees, sıralama yapısına sahip oldukları için sıklıkla tercih edilirler. AVL trees ise, binary search trees'in aksine, daha dengeli bir yapıya sahiptirler.

Ağaçlar ile ilgili detayları daha iyi anlayabilmek için, aşağıdaki örnekte bir ağaç yapısının gösterimi verilmiştir:

Elma Armut Muz
Limon Kavun Çilek
Şeftali
Karpuz

Yukarıdaki örnekte, kök düğüm olarak "Elma" belirlenmiştir. Bu düğümden, "Armut" ve "Muz" alt düğümleri türetilmiştir. Ayrıca, "Limon" adında bir alt düğüm "Armut" düğümüne bağlı olarak eklenmiştir. Benzer şekilde, "Kavun", "Çilek", "Şeftali" ve "Karpuz" da belirli düğümlere bağlı olarak eklenmiştir. Ancak, "Şeftali" ve "Karpuz" düğümleri seviye olarak eşitlendikleri için ayrı ayrı eklendi ve diğeri için tekrar edildi.


Binary Search Trees

Binary Search Trees (BST) olarak da bilinen ikili arama ağaçları, sıralı bir yapıda verileri saklamak için kullanılır. BST'lerin yapısı, her düğümün sadece iki alt düğümü olduğu bir ağaç olarak düzenlenir.

BST'lerde, ağacın sol alt dalları, gövdedeki düğümlerden daha küçük, sağ alt dalları ise daha büyük verileri içerir. Bu "sıralama" yapısı sayesinde arama işlemleri hızlandırılır. Örneğin, bir elemanı aramak için ağacın kökünden başlayarak sağa veya sola gitmek yeterli olacaktır. Bu, verileri sıralı olarak sakladığı için, arama işlemlerinin hızlı ve verimli bir şekilde gerçekleştirilmesini sağlar.

BST'lerde, her düğüm, kendisine doğru alt dallarının ağacındaki tüm düğümlerinden daha büyük bir değere sahip olmalıdır. Bu, BST'lerin bir sıralama yapısı oluşturmasını sağlar. BST'ler, verileri sıralama açısından sınıflandırmak için kullanılır.

Bir BST yapısında, her düğüm, bir "anahtar" değeri ve bu anahtara bağlı bir "değer" içerir. Anahtar değeri, düğümün verisini diğer düğümlerden ayırmak için kullanılır. BST'lerde, her düğümün sadece iki alt düğümü bulunur. Sol alt düğüm, anahtar değerinden daha küçük değerlere sahip verileri saklarken, sağ alt düğüm daha büyük değerlere sahip verileri saklar.

  • Verileri sıralama ve arama için ideal bir yapı
  • Verileri hızlı bir şekilde sıralama ve arama yapmak için kullanılır
  • Basit ve özelleştirilebilir bir yapıya sahiptir
  • Ağacın yapısı bozulduğunda, işlemler oldukça karmaşık hale gelir
  • BST'lerin ağacının doğru bir şekilde dengeli olması gerektiğinden, geçerli değerlerin dikkatli bir şekilde ayarlanması gerekebilir
  • BST'lerin amacına göre özelleştirilmiş bir şekilde yapılandırılması gerektiğinden, bu işlem oldukça zaman alıcı olabilir

BST'lerin avantajları, verileri sıralamak ve aramak için ideal bir yapıya sahip olmalarıdır. Dezavantajları arasında, ağacın yapısal olarak doğru bir şekilde yapılandırılması gerektiği ve ağacın dengesiz hale geldiğinde işlemlerin karmaşık hale gelebileceği yer almaktadır.


AVL Trees

AVL ağaçları, verilerin sıralı bir şekilde bir araya getirileceği ağaç yapısıdır. Bu yapının özelliği, herhangi bir düğümdeki iki alt ağacın yüksekliği arasındaki farkın en fazla +1 veya -1 olmasıdır. Bu dengeleme sayesinde, ağaçta herhangi bir işlem yapıldığında bile her düğümün yüksekliği dengelenir.

AVL ağaçları, özellikle arama işlemlerinde hızlı sonuçlar verir. Çünkü ağaç yapısı düzenli olduğu için her arama için en az adım sayısı kullanılır. Bu nedenle, özellikle büyük veri kümelerinde ve sık aramalarda kullanımı tercih edilir.

AVL ağaçları, yüksek miktarda veri saklamak için uygundur. Bu yapıdaki veri tutma yöntemi sayesinde, veriler daha hızlı ve düzenli bir şekilde erişilebilir hale gelir. Bu nedenle, birçok uygulama ve programlama dili, AVL ağaçları kullanılarak veri saklama ve erişme sürecini hızlandırır.

AVL Ağacı Avantajları AVL Ağacı Dezavantajları
- Sıralı verilerin saklanmasını sağlar
- Düzenli bir yapıya sahiptir
- Veri arama işlemlerinde hızlı sonuçlar verir
- Bellek alanını daha fazla kullanabilir
- Veri ekleme ve çıkarma işlemleri diğer yapılar kadar hızlı olmayabilir

AVL ağaçları, diğer veri yapılarından farklı olarak dengeli bir yapıya sahip olduğu için daha yüksek bir bellek alanı kullanabilir. Ayrıca, veri ekleme ve çıkarma işlemleri diğer yapılar kadar hızlı olmayabilir. Ancak, sıralı verilerin saklanması, düzenli bir yapıya sahip olması ve arama işlemlerinde hızlı sonuçlar vermesi, AVL ağaçlarının tercih edilmesinde en önemli faktörlerdir.


Grafikler

C++ programlama dilinde bir diğer veri yapısı olan Grafikler, düğümler ve kenarları birleştirerek verileri saklama işlevi görür. Grafikler, matematiksel bir model olarak tasarlanmıştır ve kenarlar, düğümler arasındaki bağlantıları temsil eder. Kenarlar, çizgi şeklinde temsil edilir ve iki düğüm arasındaki ilişkiyi gösterir.

Grafikler, birçok alanda kullanılabilirler, örneğin iletişim ağları, ulaşım ağları, sosyal ağlar, vb. Tüm bu alanlarda, her düğüm bir öğeyi ve her kenar da öğeler arasındaki ilişkiyi temsil eder. Grafikler, özel bir dil olan Graph Markup Language (GraphML) kullanılarak HTML sayfalarında gösterilebilir.

Grafiklerin oluşturulması, pek çok yönüyle benzerdir. İlk olarak, düğümleri ve kenarları tanımlayarak bir grafik yapısı oluşturulur. Daha sonra, grafik üzerinde işlem yapmak için uygun olan çeşitli algoritma ve teknikler kullanılabilir. Grafikler, çeşitli veri yapılarına ve arama algoritmalarına dayanan birçok uygulama geliştirmede kullanılır.

Grafiklerin görselleştirilmesi ve analizi, sıklıkla grafik teorisi olarak bilinen matematiksel bir disiplindir. Bu teori, grafiklerin matematiksel özelliklerini tanımlar ve grafiklerin özelliklerinin nasıl analiz edilebileceği hakkında bilgi sağlar. Bu sayede, grafiklerin özellikleri hakkında daha fazla bilgi edinilerek, özel arama algoritmaları oluşturulabilir ve verimsizlikler giderilebilir.

Bununla birlikte, grafiklerin karmaşık veya büyük boyutta olmaları durumunda, işlem yükü artabilir ve sistem kaynakları hızlı bir şekilde tükenebilir. Bu nedenle, grafiklerin oluşturulması ve yüksek performanslı analizi için en uygun veri yapılarının kullanılması son derece önemlidir.


Yönlendirilmemiş Grafikler

Yönlendirilmemiş grafiklerde her bir kenar iki yönlüdür ve düğümler arasında herhangi bir yön yoktur. Bu, iki düğüm arasında herhangi bir yön belirlemediğimiz anlamına gelir ve kenarlar aynı anda iki yöne gidebilir. Yönlendirilmemiş grafikler, gerçek dünya senaryolarında yaygın olarak kullanılır.

Yönlendirilmemiş grafiklerin temel özellikleri şunlardır:

  • Her iki yönde de geçiş sağlanabilir.
  • Aralarında yalnızca kenar bulunan iki düğümün birbirinden farklı olduğu kabul edilir.
  • Düğümler arasında yön belirtilmez.
  • Döngüleri içerebilirler.
  • Kenar ağırlıkları ya da kapasitesi olabilen modelleri vardır.

Örneğin, bir yarış pisti, bir hava taşıtının ya da bir aracın hareket yolu gibi durumlarda yönlendirilmemiş grafikler kullanılır. Bu durumlarda, bir yolun her iki yöne de gidebilmesi gerektiği için kenarlar çift yönlüdür. Böylece, bir sürücü istediği yöne hareket edebilir. Diğer bir örnek ise sosyal medya ağlarıdır. Bu ağlarda, iki kullanıcı arasındaki bağlantılar, ikisinin de birbirini takip etmesi durumunda yönlendirilmemiş bir grafiğe sahip olabilir.

Sonuç olarak, yönlendirilmemiş grafikler, iki düğüm arasında herhangi bir yön olmayan grafiklerdir. Bu grafikler, gerçek dünya senaryolarında sıklıkla kullanılır ve her iki yönde de geçiş sağlanmasına izin verirler. Yönlendirilmemiş grafikler, yarış pistleri, araç veya hava taşıtlarının hareket yolu ve sosyal medya ağları gibi durumlarda kullanılabilir.


Yönlü Grafikler

Yönlü grafikler, çift yönlü kenarlara sahip yönlendirilmemiş grafiklere kıyasla tek yönlü kenarlara sahip grafiklerdir. Bu tür grafiklerde bir düğümden diğerine doğru sadece bir yönlü kenarlar bulunur. Yönlendirilmiş grafikler, özellikle modellik, işlevsellik ve performans gerektiren birçok uygulamada kullanılır.

Yönlü grafiklerde, bir kenarın yönü, bir düğümden diğerine doğru hareket ederken belirlenir. Bu yön, genellikle ok sembolü ile gösterilir. Bu tür grafiklerde aynı zamanda halkalar ya da döngüler de oluşabilir. Bu durumda, bir düğümden kendisine doğru bir kenar ile geri dönülür. Özellikle ağlarda yönlü grafiklerin kullanımı, bağlantıların yönlendirilmesini sağlayarak, verimliliği ve iletişim performansını arttırmaktadır.

Yönlü grafikler, bir düğümden diğerine hareket edildiğinde yalnızca bir yönden hareket edildiğinden, bu tür grafikler genellikle sıralama ve arama gibi işlemlerde kolaylık sağlamaktadır. Bu nedenle, yönlü grafiklerin kullanıldığı birçok uygulama vardır.

A B C D
A 0 1 0 1
B 0 0 0 1
C 1 1 0 0
D 0 0 1 0
  • Yukarıdaki örnekte, A'dan B'ye bir kenar olduğu halde B'den A'ya bir kenar yoktur. Bu, örneğin B'nin A'ya bağlı olmadığını gösterir.
  • Aynı şekilde, D'den A'ya bir kenar vardır ancak A'dan D'ye herhangi bir kenar yoktur. Bu, A'nın D'ye doğrudan bağlı olmadığını gösterir.