Özkan Karakuş

Top

C++ Bağlı Liste İşlemleri Linked List CRUD

Edited 07/03/2020 Okuma Süresi 10 Dakika

Bağlı Listenin (Linked List) anlamı node değişkeni olarak eklenen verilerin data ve nextKey değeri ile birlikte birçok verinin birbirleri ile ilişkisi kurarak bir listeye dönüşmesi anlamına gelmektedir. Bu verileri direkt olarak bilgisayar üzerinden çekerek CRUD işlemleri yapabiliyoruz. Bu yazımızda C++ ile Bağlı Listelerde CRUD işlemleri yapacağız yazının sonunda örnek uygulamamı paylaşacağım.

Örnek .Şablon:

Key bir sonraki datanın yolunu taşımakta ve bu döngü null değer tipi olana kadar gider.

Başlamadan önce projene aşağıdakileri include et.


#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>

Data & Key oluşumu c++ ta  struck tabanlı bir node oluşturarak başlıyoruz.


struct n
{
    int x;
    n * next;
};
typedef n node;

Örnek bir liste oluşturup hata varmı bakıyoruz. 
node * root;
    root = (node *)malloc(sizeof(node));
    root->x = 500;
    root->next = NULL;

Veri olarak x, sonraki key olarak next tipini dolduruyoruz malloc komutu ile nodemizin boyutu kadar bir alan açıyoruz.

Oluşturduğumuz veriyi reader methodu yazarak console uygulamasında çalıştırıyoruz. Dikkat edin methotlar main methodunun üstünde olması gerek aksi taktirde çalışmaz ve hata verir.
void reader(node * r) {
    while (r!=NULL)
    {
        printf("%d ", r->x);
        r = r->next;
    }
}

reader methodumuzun içinde bir döngü oluşturarak parametre olarak gönderdiğimiz liste null dönene kadar gönderilen node r parametresinin içindeki x yani data verisini ekrana yazdırıyoruz sonra r parametresinin içine next komutu ile eğer bir sonraki veri varsa onu yazdırıyoruz bu işlem r parametremiz null olana kadar dönecek. Tabi bunun çalışması için main methodumuzda reader methodunu çağırarak bir liste göndermemiz lazım. bunun için yukarıda oluşturduğumuz root nodesinde işlem yapacağız. ekranda çıktıyı almak için aşağıdaki kodu yazalım.

reader(root);

Çıktıyı aldığınızı varsayarak oluşturduğumuz listenin içine random olmak üzere 5 değer atayalım ve o değerleri yazdığımız reader() methodu ile ekranda gösterelim.

for (size_t i = 0; i < 5; i++)
    {
        
        int rnd = rand()%(100-50)+50;
        
        ekle(root, rnd); //sona ekleme
        
    }
    reader(root);

Random 5 sayı ekledik ve bu sayıları ekranımıza reader komutu ile yazdırdık.
şimdi ise random sayıdan ayrı olarak oluşan listemizin en sonuna veri düğümü eklemek için add methodumuzu yazalım.
void add(node *r , int x) {
    while (r->next != NULL) {
        r = r->next;
    }
    r->next = (node *)malloc(sizeof(node));
    r->next->x = x;
    r->next->next = NULL;
}

add methodumuzda node tipinde ve int tipinde 2 parametre aldırıyoruz x değerimiz bildiğiniz üzere data verimiz mainde methodu çağırırken ister el ile girin ister kendiniz kod içinde yazın ben kod içinde yazıyorum.
ekle(rootYeni, 33); 

Listenin sonuna 33 verisini ekledik.

Şimdi ise listemizin içindeki veriyi silme methodunu yazalım.
node* sil(node*r,int x) {
    node*temp;
    node* iter = r;
    if (r->x == x)
    {
        temp = r;
        r = r->next;
    }
    while (iter->next != NULL && iter->next->x != x)
    {
        iter = iter->next;
    }
    if (iter->next==NULL)
    {
        printf("sayı bulunamadı");
        return r;
    }
    temp = iter->next;
    iter->next = iter->next->next;
    free(temp);
    return r;
}

Sil metdodumuzda sileceğimiz node listesi ve sileceğimiz elemanın x değerini yani datasını istiyoruz. İf blogunda girilen listedeki ilk veri kullanıcının silmemizi istediği verimi diye kontrol ediyoruz çünkü ilk veriyi normal bir şekilde silersek verinin ucunu kaçırmış oluruz. diğer if bloğunda girilen verinin varmı yokmu olduğunu buluyoruz. Eğer yoksa sayı bulunamadı diye mesaj gönderiyoruz. en alttaki kod parçasında ise free() methoduyla bulduğumuz veriyi siliyoruz.

Yazıyı uzatmamak için son olarak kullanıcının seçtiği indesNoya göre veri düzenlemeyi yapacağım diğer methotların örnekler aşağıdaki çalışma projesini indirerek ulaşabilirsiniz.

void edit(node*r, int indexNo, int y) {
     node* temp = r;
     for (size_t i = 0; i < indexNo; i++)
     {
         temp = temp->next;
     }
     temp->x = y;
 }

Y kullanıcının güncellemek istediği veri, r node türündeki listemiz indexno ise değiştirilecek olan indexin numarası.

Yazımı okuduğunuz için Teşekkür ediyor ve İşinize yaradığını umuyorum :) Aşağıdan direkt olarak üzerinde çalıştığım projeyi indirip kodları inceleyebilirsiniz.

İndirdiğiniz dosyada ek olarak aşağıdaki methodlar da yapılmıştır.

  • İlk veriyi silen method
  • Recute ile veriyi yazdırma
  • Listenin arasına veri ekleme
  • Liste kopyalama
  • Sondaki veriyi silme 

Projeyi İndirmek için Tıkla 

Web hosting by Somee.com