Çözüldü C programlama dili listeden belli sayıları silme

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

1597534862

Uzman üye
19 Eki 2010
1,156
0
Samsun
Arkadaşlar bir ödevim var ve okulda öğrendiğimiz bilglerle yapmam imkansız ve internette dahi yok ödev.Bir liste oluşturacağım ve o listeden belli şartlar sağlandığında o sağlananları listeden silip kalan sayıların listesini yazdıracak.Yardımcı olabilecek var mı?
 
Moderatör tarafında düzenlendi:

Qwx

Kıdemli Üye
30 Nis 2012
2,728
13
Anlatımınızdan anladığım kadarıyla bahsettiğiniz ödev tek yönlü liste, eğer doğru ise ;
C ile pek ilgilenmediğim için kodları C++ ile veriyorum bir takım değişikliler ile C ye çevirebilirsiniz sonuç olarak döngüler aynı kalacaktır.

Kod:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef struct Liste{
int bilgi;
struct Liste *sonraki;
}BListe;
BListe *ilk=NULL,*son=NULL;
**** Ekle(BListe *ki){
if(ilk==NULL)
    {
        ilk=ki;
        son=ilk;
        son->sonraki=NULL;
    }
    else
    {
        son->sonraki=ki;
        son=ki;
        son->sonraki=NULL;
    }
}
Listele()
{
    BListe *gecici;
    gecici=ilk;
    if(gecici==NULL)
        printf("Liste Bostur\n");
    while(gecici!=NULL)
    {
        printf("%d\n",gecici->bilgi);
        gecici=gecici->sonraki;
    }
}
**** Silme(int sil)
{
    BListe *gecici,*onceki;
    gecici=ilk;
    onceki=NULL;
    while(gecici)
    {
        if(gecici->bilgi==sil)
            break;//silinecek dugum bulundu ve ÇIK
        onceki=gecici;
        gecici=gecici->sonraki;//sonraki dugume geç  
    }
    if(gecici!=NULL)
    {
        if(gecici==ilk)
        {
            if(gecici==son)
            {
                ilk=NULL;
                son=NULL;
            }
            else
            {
                ilk=ilk->sonraki;
            }
        }
        else
        {
            onceki->sonraki=gecici->sonraki;
            if(gecici==son)
               son=onceki;
        }
        printf("%d silindi.\n",gecici->bilgi);
        free(gecici);
    }
    printf("Girilen Sayi Bulunmamaktadir\n");
}
int main(){
BListe *Node;
char secim;
while (1==1)
{
    puts("Ekleme : E\nListele : L\nSil : S\nCikis : C\n");
    secim=getch();
    switch(secim)
    {
        case 'e':
        {
            Node =(BListe *)malloc(sizeof(BListe));
            printf("sayiyi gir\n");
            scanf("%d",&Node->bilgi);
            Ekle(Node);
            break;
        }
        case 'l':
        {
            Listele();
            break;
        }
        case 'c':
        {
            return 0;
            break;
        }
        case 's':
        {
            printf("silinecek sayiyi giriniz\n");
            int a;
            scanf("%d",&a);
            Silme(a);
            break;
        }
        default:
        {
            printf("Hatali Giris\n");
            break;
        }
    }
}
return 0;
}
 

leaks

Katılımcı Üye
29 Eki 2018
864
1
Bağlı liste veri yapısını kullanabilirsin.
struct linkedListNode {
/* verinin tutulacağı değişken */ voıd * veri;
/* sonraki düğüm */ struct linkedListNode * sonraki;
};


Bu şekilde bir yapı oluşturarak ve yapı üzerinde dolaşıp işlemler yapacak fonksiyonlar yazabilirsin.
 
Son düzenleme:
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.