C++ Tek Yönlü Bağlı Listede Eleman Silinmiyor

nikoisbackx

Hectopat
Katılım
11 Aralık 2019
Mesajlar
110
Yer
Sakarya
Daha fazla  
Cinsiyet
Erkek
Meslek
Software Engineer
Merhaba c++ da tek yönlü bağlı listede öğrenci ekleme çıkarma vs işlemlerini yapmaya çalışıyorum. Sondan eleman ekleme düzgün çalışıyor ancak öğrenci numarası ile silmeye çalıştığımda (6. işlem) düzgün silmiyor. Saatlerdir uğraşıyorum son çare buraya yazayım dedim. Lütfen biri yardımcı olsun.

Mesela şu anda no su 123 olan ve adı asd olan bir kayıt ekli.



bu kaydı silmeye çalıştığımda bu şekilde çok sinir bozucu bir şey oluyor. Yardım Lütfenn


kod :
Kod:
 #include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <iostream>
#include <string>

using namespace std;

struct n{
    char isimSoyisim[150];
    int x;
    n * next;
};

typedef n node;


void bastir(node * r){
    printf("\n----- Listedeki Öğrenciler ----- \n\n");
    while (r != NULL){
      
        printf("%d | %s", r -> x , r -> isimSoyisim);
        r = r-> next;
        printf("\n");
          
    }
    printf("\n");
}

void ekle (node * r, int x, char *c){
  
    while (r-> next != NULL){
      
        r = r -> next;
    }
    r -> next = (node *) malloc(sizeof(node));
    r -> next-> x = x;
    //r -> next-> isimSoyisim = c;
    r -> next -> next = NULL;
  
}


node * sil(node *r, int x){
  
    node *temp;
    node *iter = r;
  
    if (r-> x == x){
      
        temp = r;
        r = r -> next;
        free(temp);
        return r;
    }
    while (iter -> next != NULL && iter->next->x != x){
         iter = iter -> next;
     }
  
     if (iter -> next == NULL){
         printf("Bulunamadı");
         return r;
     }
  
     temp = iter -> next;
    iter -> next = iter->next->next;
    temp = temp->next;
  
     free(temp);
     return r;
}

//---------------------------------------------------
node * basaElemanEkle(node * head){
  
     node * yeni;
     yeni = (node *) malloc(sizeof(node));

  
     printf("Öğrenci Numarası : ");
    scanf("%d" , &yeni-> x );
  
     printf("Öğrenci Ad Soyad : ");
    scanf("%99s" ,yeni-> isimSoyisim );
  
     yeni-> next = NULL;
  
    if (head == NULL){
      
        head = yeni;
  
    }     else {
      
        yeni -> next = head;
        head = yeni;
    }
  
    return head;
}
//---------------------------------------------------

//---------------------------------------------------
node * sonaElemanEkle(node * head){
  
    node * yeni;
     yeni = (node *) malloc(sizeof(node));

  
     printf("Öğrenci Numarası : ");
    scanf("%d" , &yeni-> x );
  
     printf("Öğrenci Ad Soyad : ");
    scanf("%99s" ,yeni-> isimSoyisim );
     yeni-> next = NULL;
  
     if (head == NULL){
      
         head == yeni;

    } else {
      
        node * gezgin;
        gezgin = head;
        while (gezgin -> next != NULL){
          
            gezgin = gezgin -> next;
          
        }
        gezgin -> next = yeni;
    }

    return head;
}
//---------------------------------------------------


//---------------------------------------------------
node * bastanElemanSil(node * head){
  
    node * gezgin;
  
      
    if (head == NULL){
        cout << "Listede Öğrenci Yok!";
    } else {
      
        node * tmp = head;
        tmp = head;
        head  = head -> next;
        free(tmp);
      
        delete head;
      
    }
  
    return head;
}
//---------------------------------------------------

//---------------------------------------------------

node * sondanElemanSil(node * head){
  
    node * gezgin;
    gezgin = head;
    if (head == NULL){
        cout << "Eleman Yok";
    }
  
    else if (head -> next == NULL){
      
        bastanElemanSil(head);
        head = NULL;
      
    } else  {
      
        while (gezgin -> next -> next !=  NULL){
            gezgin = gezgin -> next;
          
        }
          
        free(gezgin->next);
        gezgin->next = NULL;
    }
  
    return head;
  
  
}

//---------------------------------------------------



int main(){

    setlocale(LC_ALL,"Turkish");
  
  
    node * root;
    root = NULL;
    int girilmesiGereknOgrSayisi = 20, islem, ogrNumara;

    char ad[150] = "nurullah";
  

  
  
    printf("--------------- => Tek Bağlı Liste (Linked List) İle Öğrenci Ekleme Çıkarma İşlemi <= ---------------");
  
    while (true){
      
        printf("\n\n==> İşlemler \n\n");
        printf("\n1 => Baştan Öğrenci Ekle");
        printf("\n2 => Sondan Öğrenci Ekle");
        printf("\n3 => Herhangi Bir Yerden Öğrenci Ekle");
      
        printf("\n4 => Baştan Öğrenci Sil");
        printf("\n5 => Sondan Öğrenci Sil");
        printf("\n6 => Herhangi Bir Yerden (Numara İle) Öğrenci Sil");
      
        printf("\n7 => Listeyi Göster \n\n");
        printf("=> Girilmesi Gereken Öğrenci Sayısı : %d ", girilmesiGereknOgrSayisi);
      
        printf("\n\nİşlem Seçin ==> ");
      
        cin >> islem;
      
         if (islem == 1){
          
             root = basaElemanEkle(root);
             bastir(root);
          
         } else if (islem == 2){
          
              root = sonaElemanEkle(root);
              bastir(root);
          
         } else if (islem == 3){
          
             printf("3");
          
         }
         else if (islem == 4){
          
             //--------------------------------------------------------------
             //-----------------------------------------------------------
          
            bastanElemanSil(root);
            bastir(root);
          
         } else if (islem == 5){
          
             sondanElemanSil(root);
            bastir(root);
          
         } else if (islem == 6){
          
             int numara;
             printf("Öğrenci Numarası : ");
            scanf("%d" , &numara );
  
            sil(root,numara);
             bastir(root);
      
         }  else if (islem == 7 ){
          
             bastir(root);
             printf("Bastır");
          
         } else {
          
            printf("Hatalı İşlem!");
        }
      
    //    return false;
      
    }
  
  
  
  
/*    int i = 0;
     char dizi[50] = "ahmet";
    root = ekleSirali(root,400,dizi);
  
    char adizi[50] = "Nurullah";
    root = ekleSirali(root,410,adizi);
  
  
    bastir(root);
    root = sil(root,400);
    printf("Silindi \n");
    bastir(root);*/
}
 
Son düzenleyen: Moderatör:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…