C++ ile Linkli Kuyruklar Oluşturma konusunda detaylı bilgi edinmek için hemen tıklayın! Bu eğitimde, C++ programlama dili kullanarak veri yapılarından biri olan kuyruk yapısını oluşturmanın temellerini öğreneceksiniz İhtiyacınız olan tüm bilgiler burada!

Bu makale, C++ dilini kullanarak nasıl yeni bir veri yapısı olan linkli kuyrukların oluşturulabileceği konusuna odaklanmaktadır. Linkli kuyruklar, geçmişte başka veri yapılarına eklenen en özgün yapıdır ve FIFO (ilk giren ilk çıkar) stratejisini kullanmaktadır. Bu makale, kuyrukların nasıl oluşturulacağına dair bilgi vererek, bu yapıların detaylarını anlatarak, C++ dilinde linkli kuyrukların genişletilmiş özelliklerini açıklayarak, uygun bir uygulama ortamında test edilebileceği bir örnek sunacaktır.
Kuyrukların oluşturulmasına başlamadan önce, kuyrukların ne olduğunu ve nasıl kullanıldığını anlamak önemlidir. Kuyruklar veri yapısı gibi birçok işlevi yerine getirir. Örneğin, bir bankada x kişi beklemede olduğunda, orada yer alan kişilerin listesi kuyruk adını alır. İlk gelen müşteri bir sıraya girer ve diğer müşteriler bu sırayı takip eder.
Linkli kuyruklar, bu mantığı bir adım daha öteye taşır ve bu yapıya yeni ve özgün bir özellik ekler. C++ dili bu yapıları olağanüstü bir şekilde csan tarafından desteklenmektedir. Bu nedenle, bu makalede C++’da linkli kuyrukları nasıl kullanacağımızı açıklayacağız.
Linkli Kuyruklar Nedir?
Linkli kuyruklar, C++ dilinde veri yapıları arasında en yaygın olarak kullanılan ve FIFO (first in first out) prensibine göre çalışan yapıdır. Yani, kuyruğa eklenen ilk veri ilk çıkar, son eklenen veri ise kuyrukta son sırada olur. Bu özelliği nedeniyle, işlem sırasının korunmasını sağlamak için sıklıkla kullanılır.
Linkli kuyruklar için önceden tanımlanmış herhangi bir boyuta sahip grup yoktur. Kuyruğa girecek tüm veriler, kuyruğun başına veya sonuna bağlı olan düğümler aracılığıyla tutulur. Bu nedenle, kuyruk her zaman dinamik olarak büyür ve küçülür.
Kuyruk Sınıfının Oluşturulması
Bir kuyruk sınıfı oluşturmak için belirlenmesi gereken şey, ne tür bir veri tipi kullanacağımızdır. Bu örnekte string veri türünü kullanacağız.
Linkli kuyruklar, linkli liste yapısından türetilir ve kuyruk işlevselliği sağlanır. Bu nedenle, kuyruk sınıfı yapısı, verileri saklamak için bir düğüm yapısını içerir ve bu düğümler linkli liste mantığına göre bağlanır.
Kuyruk sınıfı yapısı, Enqueue() ve Dequeue() gibi temel işlevleri içermelidir. Örneğin, Enqueue() işlevi, kuyruğa yeni bir veri eklerken Dequeue() işlevi kuyruktan bir öğe çıkarır.
Kuyruk düğüm yapısı, kuyruğa eklenen verileri saklamak için kullanılır. Bu yapı, bir sonraki düğüm göstericisi içerir.
Kuyruk sınıfı örneğinin oluşturulması, bir örnek oluşturularak kullanılabilir. Bu örnek, bir konsol uygulamasında test edilebilir. Main() fonksiyonu, konsol uygulamasında kullanılır ve bu işlevselliğin kullanılması, linkli kuyrukların nasıl çalıştığına dair daha iyi bir anlayış sağlar.
Kuyruk Sınıfı Yapısı
Kuyruk sınıfı, linkli liste yapısı kullanılarak oluşturulur. Bu yapı, düğüm yapısı ile verileri saklamakta ve bir sonraki düğümü göstermektedir. Düğümler, linkli liste mantığına göre birbirine bağlanır ve kuyruğun işlevselliğini sağlar.
Kuyruk sınıfı yapısı, genellikle en başta ve en sona işlem yapmak için iki işaretçi içerir. Bu işaretçiler, sırasıyla kuyruğun başını ve sonunu gösterir. İlk işlemde her iki işaretçi de null olarak ayarlanır ve kuyruk boştur. İşlem sırasında, işaretçiler ve düğümler arasındaki bağlantılar yeniden yapılandırılır ve kuyruğa veri eklenebilir veya veri çıkarılabilir.
Kuyruk sınıfı yapısı, FIFO stratejisine göre çalışır. Yani, ilk eklenen veri ilk çıkarılır. Bu nedenle, yeni eklenen her veri, kuyruğun sonuna eklenir ve var olan veriler, kuyruğun başında yer alan verilere göre önce işlem görür.
Kuyruk Düğümü Veri Yapısı
Kuyruk düğümü veri yapısı, linkli kuyrukların önemli bir bileşenidir. Bu yapı, kuyruğa eklenen verilerin saklanmasını sağlar ve bir sonraki düğümü işaret eder. Kuyruk düğümü veri yapısı, Kuyruk sınıfı yapısında da kullanılır.
Bir kuyruk düğümü yapısı, genellikle iki ana elemandan oluşur. Bunlar veri ve bir sonraki düğümü gösteren bir işarettir. Veri, kuyruğa eklenen öğeleri temsil eder.
Veri | Bir Sonraki Düğüm İşareti |
---|---|
10 | 0x1F0AB8 |
25 | 0x1F0AC0 |
37 | NULL |
Yukarıdaki tabloda, her bir veri öğesi bir sonraki düğümü gösteren işaretle beraber saklanır. Sonraki düğüm işareti, aynı zamanda kuyruğun yapısını belirleyen FIFO(kuyruk kuralı) mantığına göre işlev görür.
Kuyruk düğümü veri yapısı, başlık bilgisine bağlı olarak uygun şekilde tanımlanmalıdır. Kuyruk düğümleri, kuyruğun sonuna veya başına eklenen verileri tuttuğu için, dizilmiş verilerin takibi kolaylaştırılır. Bu nedenle, linkli kuyruklar ve Kuyruk düğümü veri yapısı programlama dilinde sıkça kullanılan bir yapıdır.
Enqueue() Fonksiyonu
Enqueue() fonksiyonu, linkli kuyrukların en önemli fonksiyonlarından biridir ve bu fonksiyon ile kuyruklara yeni veri eklenebilir. Bu işlem için, sonuncu düğümden başlayarak yeni bir düğüm oluşturulur ve sonuncu düğümün bir sonraki düğümü olarak eklenir.
Bu işlem, kuyruktaki verilerin FIFO mantığına göre sıralanmasını sağlar. Ayrıca, kuyruk dolu olduğunda yeni bir veri ekleme işlemi gerçekleştirilemez ve kuyruk boyutu önceden belirlenmişse, bu boyutu aşmamak gerekmektedir.
Adı | Tipi | Açıklama |
---|---|---|
Enqueue() | void | Kuyruğa veri eklemek için kullanılır |
Enqueue() fonksiyonu, genellikle şu şekilde kullanılır:
- Yeni bir düğüm oluşturulur
- Kuyruğun sonuncu düğümüne ulaşılır
- Sonuncu düğümün bir sonraki düğümü olarak yeni düğüm eklenir
- Kuyruk boyutu bir arttırılır
Bu işlemler, linkli kuyruk veri yapısına uygun olarak gerçekleştirilir ve kuyruğa yeni bir veri eklenebilir. Bununla birlikte, kuyruk dolu olduğunda veya belirtilen boyuttan daha fazla veri ekleme işlemi gerçekleştirildiğinde, hata mesajları gösterilebilir.
Dequeue() Fonksiyonu
Dequeue() fonksiyonu, kuyruk yapısından veri çıkarmak için kullanılır ve FIFO(stratejisi) mantığına uygun olarak çalışır. Bu fonksiyonun işlevselliği, kuyruktaki ilk düğümü çıkarmak ve geri kalan düğümleri bir düğüm geri taşımak şeklindedir.
İlk önce, çıkarılacak düğümün referansı alınır ve kuyruktaki ilk düğümü takip etmek için başka bir geçici düğüm oluşturulur. Daha sonra, ikinci düğümün bir sonraki düğümü olarak ilk düğümden sonraki düğüm atanır ve kuyruk boyutu bir azaltılır.
Eğer kuyrukta başka düğüm yoksa, kuyruğun boş olduğunu belirtmek için özel bir değer döndürülür. Böylece, bu özelliği kullanarak, kuyruğun son dolu düğümü çıkarıldığında boş kuyrukların nasıl yönetileceği belirlenebilir.
Aşağıdaki tablo, Dequeue() fonksiyonunun adımlarını özetlemektedir:
Adım | Açıklama |
---|---|
1 | Çıkarılacak düğümün referansını al. |
2 | Başka bir geçici düğüm oluştur ve kuyruktaki ilk düğümü takip etmek için atanmış geçici bir düğüm de oluştur. |
3 | İkinci düğümün bir sonraki düğümü olarak ilk düğümden sonraki düğümü ata. |
4 | Kuyruk boyutunu bir azalt. |
5 | Özel bir değer döndür ve kuyrukta başka düğüm yoksa, bu kuyruğun boş olduğunu belirtmek için kullan. |
Dequeue() fonksiyonu, C++ dilinde linkli kuyruklar oluşturulurken önemli bir rol oynar ve kuyruk yapısının işlevselliğinin korunmasında kilit bir rol oynar.
Linkli Kuyruk Uygulaması
Öncelikle, tanımlanan kuyruk sınıfının bir örneği oluşturulmalıdır. Bu örnek, kuyruğun çalışma mantığını anlamak ve test etmek için kullanılabilir. Örnek oluşturma işlemi oldukça basit bir şekilde yapılabilir. İlk olarak, kuyruk sınıfı tanımlanır ve ardından örnek oluşturulur.
Örnek Oluşturma |
---|
Kuyruk k; |
k.Enqueue(7); |
Yukarıdaki kod parçası, kuyruk sınıfının bir örneği oluşturularak yeni bir veri eklenmesini göstermektedir. Benzer şekilde, birden fazla veri de eklenip kuyruktan çıkarılabilir. Aşağıdaki kod parçası, farklı verilerin eklenip birkaçının kuyruktan çıkarılmasını göstermektedir.
Çoklu Veri Ekleme ve Çıkarma |
---|
k.Enqueue(3); |
k.Enqueue(5); |
k.Enqueue(9); |
k.Dequeue(); |
k.Dequeue(); |
k.Enqueue(11); |
Bu şekilde yapılan veri ekleme ve çıkarma işlemleri, kuyruğun doğru çalışıp çalışmadığını test etmek için oldukça yararlı olabilir. Aynı zamanda, kuyruklar, önemli bir veri yapısıdır ve birçok gerçek hayat uygulamasında kullanılır. Bu nedenle, linkli kuyrukların nasıl oluşturulacağı ve uygulanabileceği hakkında bilgi sahibi olmak oldukça önemlidir.
Main() Fonksiyonu
Main() fonksiyonu, örnekleme yapmak ve linkli kuyrukların işlevselliğini test etmek için kullanılır. Bu fonksiyonda, öncelikle bir kuyruk örneği oluşturulur. Daha sonra, kuyruğa veri ekleme işlemi gerçekleştirilir. Eklenen veri, kuyrukta FIFO stratejisine göre depolanır. Sonrasında, Dequeue() fonksiyonu kullanılarak kuyruktan veri çıkarma işlemi yapılır.
Main() fonksiyonunun örnek kod bloğu aşağıdaki gibidir:
Kod | Açıklama |
---|---|
Kuyruk k; | Kuyruk sınıfından bir örnek oluşturulur. |
k.Enqueue(5); | Kuyruğa 5 sayısı eklenir. |
k.Enqueue(10); | Kuyruğa 10 sayısı eklenir. |
cout << k.Dequeue() << endl; | Kuyruktan ilk eleman (5) çıkarılır ve ekrana yazdırılır. |
Yukarıdaki kod örneğinde, kuyruğa 5 ve 10 sayıları sırasıyla eklenir. Daha sonra Dequeue() fonksiyonu kullanılarak ilk eleman olan 5 sayısı kuyruktan çıkarılır ve ekrana yazdırılır. Bu işlemler, linkli kuyrukların FIFO stratejisine uygun olarak çalıştığını gösterir.
Kod Örneği
Aşağıdaki kod örneği, C++ dilinde linkli kuyrukların nasıl oluşturulacağını örneklemek amacıyla verilmiştir.
Kod Örneği: |
---|
#include <iostream>using namespace std; struct Node { int data; struct Node* next;}; struct Queue { struct Node *front, *rear; Queue() { front = rear = NULL; } void enqueue(int x) { struct Node* temp = new Node(); temp->data = x; temp->next = NULL; if (front == NULL) { front = rear = temp; return; } rear->next = temp; rear = temp; } void dequeue() { if (front == NULL) return; struct Node* temp = front; front = front->next; delete (temp); }}; int main(){ Queue q; q.enqueue(10); q.enqueue(20); q.enqueue(30); q.enqueue(40); q.dequeue(); cout << "Remaining elements in Queue:"; while (q.front != NULL) { cout << q.front->data << " "; q.dequeue(); } return 0;} |
Bu örnek kod, Node ve Queue yapılarını ve bu yapılarla ilgili işlevleri oluşturur. enqueue() işlevi kuyruğa yeni bir eleman eklemek için kullanılırken, dequeue() işlevi kuyruktan bir eleman çıkarmak için kullanılır. Kodun geri kalanı, bu işlevlerin kullanımını örnekler.