Şimdi Ara

ikili arama agacı problemi

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
11
Cevap
0
Favori
781
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba sayın çok iyi bilen üstadlar, İkili arama ağaçları ile ilgili bir program yapmaya çalıştım fakat bazı yerlerde hata verdi, kodlara bakıp acaba yardımcı olabilecek biri varsa çok sevinirim.

     
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #define agacuzunlugu 7
    struct dugum
    {
    int sol;
    int sag;
    int deger;
    };
    struct dugum agac[agacuzunlugu];
    struct dugum agackur(struct dugum);
    int bosagac, dgmindx;
    void main ()
    {

    int i, yrdindx, intch1, dugum1;
    bosagac = 0;
    agac = agackur(agac);
    printf ("\n kok dugum degeri giriniz\n");
    dugum1 = dugumgir(intch1);
    for (i=0; i<agacuzunlugu - 1; i++)
    {
    dgmindx=yrdindx=dugum1;
    printf("\n agac dugum degeri giriniz :");
    scanf("&d", &intch1);
    while(intch1 != agac[dgmindx].deger && yrdinx != -1)
    {
    dgmindx=yrdinx;
    if (intch1< agac[dgmindx].deger)
    yrdindx=agac[dgmindx].sol;
    else
    yrdindx=agac[dgmindx].sag;
    }
    if (intch1 <agac[dgmindx].deger)
    solekle(dgmindx, intch1);
    else
    sagekle(dgmindx, intch1);
    }
    i = sol_yukseklik_bul (0);
    printf("\n Sol yukseklik : %d ", i);
    }
    struct dugum agackur (struct dugum agac)
    {
    int i;
    for (i=0; i< agacuzunlugu - 1; i++)
    agac[i].sol = i+1;
    agac[agacuzunlugu-1].sol = -1;
    return agac;
    }
    int dugumgir (int deger1)
    {
    int dgmindx;
    dgmindx= dugumal();
    agac[dgmindx].deger= deger1;
    agac[dgmindx].sol= -1;
    agac[dgmindx].sag= -1;
    return(dgmindx);
    }
    int dugumal()
    {
    int dgmindx;
    dgmindx= bosagac;
    bosagac= agac[bosagac].sol;
    return(dgmindx);
    }
    int solekle (int dgmindx, int deger1)
    {
    if(bos(dgmindx)==1||bos(agac[dgmindx].sol) !=1)
    {
    printf ("\n agac bos/sol cocuk var");
    exit(1);
    }
    else if (dolu () == 1)
    {
    printf ("\n agac dolu ");
    exit (1);
    }
    else agac[dgmindx].sol = dugumgir(deger1);
    return(dgmindx);
    }
    int sag1ekle (int dgmindx, intdeger1)
    {
    if(bos(dgmindx)==1 ||bos(agac[dgmindx]agac.sag) !=1)
    {
    printf("\n agac bos/sag cocuk var ");
    exit(1);
    }
    else if (dolu () == 1)
    {
    printf("\n agac dolu ");
    exit(1);
    }
    else agac[dgmindx].sag = dugumgir(deger1);
    return (dgmindx);
    }
    int bos (int dgmindx)
    {
    if (dgmindx == -1)
    return 1;
    else return 0;
    }
    int dolu (void)
    {
    if (bosagac == -1)
    return 1;
    else return 0;
    }
    int sol_yukseklik_bul(int dgmindx)
    int d = 0
    if ( bos(dgmindx) == 1)
    return d;
    else
    {
    while (bos(agac[dgmindx].sol) !=1)
    {
    d = d +1;
    dgmindx = agac[dgimidx].sol;
    }
    return d;
    }



    < Bu mesaj bu kişi tarafından değiştirildi hellxy -- 8 Haziran 2012; 14:21:14 >







  • güncel++
  • güncel++++
  • Merhaba

    #include <stdio.h> 
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #define agacuzunlugu 7
    struct dugum
    {
    int sol;
    int sag;
    int deger;
    };
    struct dugum agac[agacuzunlugu];
    struct dugum agackur(struct dugum);
    int bosagac, dgmindx;
    int main ()
    {

    int i, yrdindx, intch1, dugum1;
    bosagac = 0;
    agac =agackur(agac);
    printf ("\n kok dugum degeri giriniz\n");
    dugum1 = dugumgir(intch1);
    for (i=0; i<agacuzunlugu - 1; i++)
    {
    dgmindx=yrdindx=dugum1;
    printf("\n agac dugum degeri giriniz :");
    scanf("&d", &intch1);
    while(intch1 != agac[dgmindx].deger && yrdindx != -1)
    {
    dgmindx=yrdindx;
    if (intch1< agac[dgmindx].deger)
    yrdindx=agac[dgmindx].sol;
    else
    yrdindx=agac[dgmindx].sag;
    }
    if (intch1 <agac[dgmindx].deger)
    solekle(dgmindx, intch1);
    else
    sagekle(dgmindx, intch1);
    }
    i = sol_yukseklik_bul (0);
    printf("\n Sol yukseklik : %d ", i);
    return 0;
    }

    struct dugum agackur (struct dugum agac)
    {
    int i;
    for (i=0; i< agacuzunlugu - 1; i++)
    agac[i].sol = i+1;
    agac[agacuzunlugu-1].sol = -1;
    return agac;
    }

    int dugumgir (int deger1)
    {
    int dgmindx;
    dgmindx= dugumal();
    agac[dgmindx].deger= deger1;
    agac[dgmindx].sol= -1;
    agac[dgmindx].sag= -1;
    return(dgmindx);
    }

    int dugumal()
    {
    int dgmindx;
    dgmindx= bosagac;
    bosagac= agac[bosagac].sol;
    return(dgmindx);
    }

    int solekle (int dgmindx, int deger1)
    {
    if(bos(dgmindx)==1||bos(agac[dgmindx].sol) !=1)
    {
    printf ("\n agac bos/sol cocuk var");
    exit(1);
    }
    else if (dolu () == 1)
    {
    printf ("\n agac dolu ");
    exit (1);
    }
    else agac[dgmindx].sol = dugumgir(deger1);
    return(dgmindx);
    }

    int sagekle (int dgmindx, int deger1)
    {
    if(bos(dgmindx)==1 ||bos(agac[dgmindx].sag) !=1)
    {
    printf("\n agac bos/sag cocuk var ");
    exit(1);
    }
    else if (dolu () == 1)
    {
    printf("\n agac dolu ");
    exit(1);
    }
    else
    agac[dgmindx].sag = dugumgir(deger1);
    return (dgmindx);
    }

    int bos (int dgmindx)
    {
    if (dgmindx == -1)
    return 1;
    else return 0;
    }

    int dolu (void)
    {
    if (bosagac == -1)
    return 1;
    else
    return 0;
    }

    int sol_yukseklik_bul(int dgmindx)
    {
    int d = 0;
    if ( bos(dgmindx) == 1)
    return d;
    else
    {
    while (bos(agac[dgmindx].sol) !=1)
    {
    d = d +1;
    dgmindx = agac[dgmindx].sol;
    }
    }
    return 0;
    }

    struct dugum agackur(struct dugum);

    agac =agackur(agac);

    struct dugum agackur (struct dugum agac)
    {
    int i;
    for (i=0; i< agacuzunlugu - 1; i++)
    agac.sol = i+1;
    agac[agacuzunlugu-1].sol = -1;
    return agac;
    }


    Kodu yukarıdaki gibi düzenledim. Çok fazla syntax hatası vardı. Renkl olarak gösterdiğim kısımlar haricinde bir hata yok artık ama renkli olan kısımlarda, programın tam olarak ne yaptığını anlayamadım. "agackur" a gönderdiğin agac'ın ne olduğunu çözemedim. Açıklarsan yardımcı olmaya çalışırım. Kolay gelsin



    < Bu mesaj bu kişi tarafından değiştirildi Cuhara -- 8 Haziran 2012; 15:48:34 >




  • Sözdizimi hatalarını temizlesende çalışmaz, bu ağaç pek olmamış. İkili ağaçta düğümün sağ ve sol bağları kendi türünü göstermesi lazım, int falan değil. Ayrıca ağaçlar diziler üstünde çalışmaz ve sabit bir uzunlukları olmaz.

    Diyelim ki çok büyük bir metin dosyamız var ve bu metinde kelime araması yapacağız. Metini okumaya başlarız, her kelimede yeni bir düğüm oluştururuz ve bu düğümü ağaçta uygun yere yerleştiririz (bide bunun balans ayarı var). Ağacı inşa edince araması kolay zaten. Bu örnek için düğüm şöyle birşey olacak.

    struct Dugum {
    char kelime[10];

    struct Dugum *sol;
    struct Dugum *sag;
    };

    Tabi sen kolaylık olması açısından birkaç sayıyı yerleştirmekle başlayabilirsin işe.




  • quote:

    Orijinalden alıntı: Cuhara

    Merhaba

    #include <stdio.h> 
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #define agacuzunlugu 7
    struct dugum
    {
    int sol;
    int sag;
    int deger;
    };
    struct dugum agac[agacuzunlugu];
    struct dugum agackur(struct dugum);
    int bosagac, dgmindx;
    int main ()
    {

    int i, yrdindx, intch1, dugum1;
    bosagac = 0;
    agac =agackur(agac);
    printf ("\n kok dugum degeri giriniz\n");
    dugum1 = dugumgir(intch1);
    for (i=0; i<agacuzunlugu - 1; i++)
    {
    dgmindx=yrdindx=dugum1;
    printf("\n agac dugum degeri giriniz :");
    scanf("&d", &intch1);
    while(intch1 != agac[dgmindx].deger && yrdindx != -1)
    {
    dgmindx=yrdindx;
    if (intch1< agac[dgmindx].deger)
    yrdindx=agac[dgmindx].sol;
    else
    yrdindx=agac[dgmindx].sag;
    }
    if (intch1 <agac[dgmindx].deger)
    solekle(dgmindx, intch1);
    else
    sagekle(dgmindx, intch1);
    }
    i = sol_yukseklik_bul (0);
    printf("\n Sol yukseklik : %d ", i);
    return 0;
    }

    struct dugum agackur (struct dugum agac)
    {
    int i;
    for (i=0; i< agacuzunlugu - 1; i++)
    agac[i].sol = i+1;
    agac[agacuzunlugu-1].sol = -1;
    return agac;
    }

    int dugumgir (int deger1)
    {
    int dgmindx;
    dgmindx= dugumal();
    agac[dgmindx].deger= deger1;
    agac[dgmindx].sol= -1;
    agac[dgmindx].sag= -1;
    return(dgmindx);
    }

    int dugumal()
    {
    int dgmindx;
    dgmindx= bosagac;
    bosagac= agac[bosagac].sol;
    return(dgmindx);
    }

    int solekle (int dgmindx, int deger1)
    {
    if(bos(dgmindx)==1||bos(agac[dgmindx].sol) !=1)
    {
    printf ("\n agac bos/sol cocuk var");
    exit(1);
    }
    else if (dolu () == 1)
    {
    printf ("\n agac dolu ");
    exit (1);
    }
    else agac[dgmindx].sol = dugumgir(deger1);
    return(dgmindx);
    }

    int sagekle (int dgmindx, int deger1)
    {
    if(bos(dgmindx)==1 ||bos(agac[dgmindx].sag) !=1)
    {
    printf("\n agac bos/sag cocuk var ");
    exit(1);
    }
    else if (dolu () == 1)
    {
    printf("\n agac dolu ");
    exit(1);
    }
    else
    agac[dgmindx].sag = dugumgir(deger1);
    return (dgmindx);
    }

    int bos (int dgmindx)
    {
    if (dgmindx == -1)
    return 1;
    else return 0;
    }

    int dolu (void)
    {
    if (bosagac == -1)
    return 1;
    else
    return 0;
    }

    int sol_yukseklik_bul(int dgmindx)
    {
    int d = 0;
    if ( bos(dgmindx) == 1)
    return d;
    else
    {
    while (bos(agac[dgmindx].sol) !=1)
    {
    d = d +1;
    dgmindx = agac[dgmindx].sol;
    }
    }
    return 0;
    }

    struct dugum agackur(struct dugum);

    agac =agackur(agac);

    struct dugum agackur (struct dugum agac)
    {
    int i;
    for (i=0; i< agacuzunlugu - 1; i++)
    agac.sol = i+1;
    agac[agacuzunlugu-1].sol = -1;
    return agac;
    }


    Kodu yukarıdaki gibi düzenledim. Çok fazla syntax hatası vardı. Renkl olarak gösterdiğim kısımlar haricinde bir hata yok artık ama renkli olan kısımlarda, programın tam olarak ne yaptığını anlayamadım. "agackur" a gönderdiğin agac'ın ne olduğunu çözemedim. Açıklarsan yardımcı olmaya çalışırım. Kolay gelsin

     
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #define agacuzunlugu 7
    struct dugum
    {
    int sol;
    int sag;
    int deger;
    };
    struct dugum agac[agacuzunlugu];
    void agackur();
    int bosagac, dgmindx;
    int main ()
    {

    int i, yrdindx, intch1, dugum1;
    int dugumgir;
    int solekle;
    int sagekle;
    bosagac = 0;
    agackur();
    printf ("\n kok dugum degeri giriniz\n");
    dugum1 = dugumgir(intch1);
    for (i=0; i<agacuzunlugu - 1; i++)
    {
    dgmindx=yrdindx=dugum1;
    printf("\n agac dugum degeri giriniz :");
    scanf("&d", &intch1);
    while(intch1 != agac[dgmindx].deger && yrdindx != -1)
    {
    dgmindx=yrdindx;
    if (intch1< agac[dgmindx].deger)
    yrdindx=agac[dgmindx].sol;
    else
    yrdindx=agac[dgmindx].sag;
    }
    if (intch1 <agac[dgmindx].deger)
    solekle(dgmindx, intch1);
    else
    sagekle(dgmindx, intch1);
    }
    i = sol_yukseklik_bul (0);
    printf("\n Sol yukseklik : %d ", i);
    return 0;
    }

    void agackur ()
    {
    int i;
    for (i=0; i< agacuzunlugu - 1; i++)
    agac[i].sol = i+1;
    agac[agacuzunlugu-1].sol = -1;

    }

    int dugumgir (int deger1)
    {
    int dgmindx;
    dgmindx= dugumal();
    agac[dgmindx].deger= deger1;
    agac[dgmindx].sol= -1;
    agac[dgmindx].sag= -1;
    return(dgmindx);
    }

    int dugumal()
    {
    int dgmindx;
    dgmindx= bosagac;
    bosagac= agac[bosagac].sol;
    return(dgmindx);
    }

    int solekle (int dgmindx, int deger1)
    {
    if(bos(dgmindx)==1||bos(agac[dgmindx].sol) !=1)
    {
    printf ("\n agac bos/sol cocuk var");
    exit(1);
    }
    else if (dolu () == 1)
    {
    printf ("\n agac dolu ");
    exit (1);
    }
    else agac[dgmindx].sol = dugumgir(deger1);
    return(dgmindx);
    }

    int sagekle (int dgmindx, int deger1)
    {
    if(bos(dgmindx)==1 ||bos(agac[dgmindx].sag) !=1)
    {
    printf("\n agac bos/sag cocuk var ");
    exit(1);
    }
    else if (dolu () == 1)
    {
    printf("\n agac dolu ");
    exit(1);
    }
    else
    agac[dgmindx].sag = dugumgir(deger1);
    return (dgmindx);
    }

    int bos (int dgmindx)
    {
    if (dgmindx == -1)
    return 1;
    else return 0;
    }

    int dolu (void)
    {
    if (bosagac == -1)
    return 1;
    else
    return 0;
    }

    int sol_yukseklik_bul(int dgmindx)
    {
    int d = 0;
    if ( bos(dgmindx) == 1)
    return d;
    else
    {
    while (bos(agac[dgmindx].sol) !=1)
    {
    d = d +1;
    dgmindx = agac[dgmindx].sol;
    }
    }
    return 0;
    }


    hatalar artıyor sürekli anlamadım bir türlü :/




  • güncel++++
  • kodun hepsine tam olarak bakmadım ama ilk olarak fonksiyonları tanıtmadığını fark ettim. eğer mainin altında yazacaksan fonksiyonları öncesinde tanıtman lazım yoksa program derlendiğinde yukarıdan aşağıya doğru derlediğinden dolayı senin fonksiyonları bulamadığı için hata veriyor.
  • quote:

    Orijinalden alıntı: rafsancani

    kodun hepsine tam olarak bakmadım ama ilk olarak fonksiyonları tanıtmadığını fark ettim. eğer mainin altında yazacaksan fonksiyonları öncesinde tanıtman lazım yoksa program derlendiğinde yukarıdan aşağıya doğru derlediğinden dolayı senin fonksiyonları bulamadığı için hata veriyor.

    farkındayım ama yaptıkça sacmalıyorum batıyorum uğraşmadığım bakmadığım yer kalmadı o yüzden çaresiz öylece bakıyorum ya.
  • quote:

    Orijinalden alıntı: hellxy

    quote:

    Orijinalden alıntı: rafsancani

    kodun hepsine tam olarak bakmadım ama ilk olarak fonksiyonları tanıtmadığını fark ettim. eğer mainin altında yazacaksan fonksiyonları öncesinde tanıtman lazım yoksa program derlendiğinde yukarıdan aşağıya doğru derlediğinden dolayı senin fonksiyonları bulamadığı için hata veriyor.

    farkındayım ama yaptıkça sacmalıyorum batıyorum uğraşmadığım bakmadığım yer kalmadı o yüzden çaresiz öylece bakıyorum ya.

    #include <stdio.h> 
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #define agacuzunlugu 7
    void agackur ();
    int dugumgir (int deger1);
    int dugumal();
    int solekle (int dgmindx, int deger1);
    int sagekle (int dgmindx, int deger1);
    int bos (int dgmindx);
    int dolu (void);
    int sol_yukseklik_bul(int dgmindx);
    struct dugum
    {
    int sol;
    int sag;
    int deger;
    };
    struct dugum agac[agacuzunlugu];
    void agackur();
    int bosagac, dgmindx;
    int main ()
    {
    int ch1;
    int i, yrdindx, intch1, dugum1;
    bosagac = 0;
    agackur();
    printf ("\n kok dugum degeri giriniz\n");
    dugum1 = dugumgir(ch1);
    for (i=0; i<agacuzunlugu - 1; i++)
    {
    dgmindx=yrdindx=dugum1;
    printf("\n agac dugum degeri giriniz :");
    scanf("&d", &intch1);
    while(intch1 != agac[dgmindx].deger && yrdindx != -1)
    {
    dgmindx=yrdindx;
    if (intch1< agac[dgmindx].deger)
    yrdindx=agac[dgmindx].sol;
    else
    yrdindx=agac[dgmindx].sag;
    }
    if (intch1 <agac[dgmindx].deger)
    solekle(dgmindx, intch1);
    else
    sagekle(dgmindx, intch1);
    }
    i = sol_yukseklik_bul (0);
    printf("\n Sol yukseklik : %d ", i);
    return 0;
    }

    void agackur ()
    {
    int i;
    for (i=0; i< agacuzunlugu - 1; i++)
    agac[i].sol = i+1;
    agac[agacuzunlugu-1].sol = -1;

    }

    int dugumgir (int deger1)
    {
    int dgmindx;
    dgmindx= dugumal();
    agac[dgmindx].deger= deger1;
    agac[dgmindx].sol= -1;
    agac[dgmindx].sag= -1;
    return(dgmindx);
    }

    int dugumal()
    {
    int dgmindx;
    dgmindx= bosagac;
    bosagac= agac[bosagac].sol;
    return(dgmindx);
    }

    int solekle (int dgmindx, int deger1)
    {
    if(bos(dgmindx)==1||bos(agac[dgmindx].sol) !=1)
    {
    printf ("\n agac bos/sol cocuk var");
    exit(1);
    }
    else if (dolu () == 1)
    {
    printf ("\n agac dolu ");
    exit (1);
    }
    else agac[dgmindx].sol = dugumgir(deger1);
    return(dgmindx);
    }

    int sagekle (int dgmindx, int deger1)
    {
    if(bos(dgmindx)==1 ||bos(agac[dgmindx].sag) !=1)
    {
    printf("\n agac bos/sag cocuk var ");
    exit(1);
    }
    else if (dolu () == 1)
    {
    printf("\n agac dolu ");
    exit(1);
    }
    else
    agac[dgmindx].sag = dugumgir(deger1);
    return (dgmindx);
    }

    int bos (int dgmindx)
    {
    if (dgmindx == -1)
    return 1;
    else return 0;
    }

    int dolu (void)
    {
    if (bosagac == -1)
    return 1;
    else
    return 0;
    }

    int sol_yukseklik_bul(int dgmindx)
    {
    int d = 0;
    if ( bos(dgmindx) == 1)
    return d;
    else
    {
    while (bos(agac[dgmindx].sol) !=1)
    {
    d = d +1;
    dgmindx = agac[dgmindx].sol;
    }
    }
    return 0;
    }

    Programı çalıştırıpta bakmadım sadece derleyicideki hataları düzelttim.




  • Yukarıda bişey yazmışız. Ciddiye almazsan öylece bakarsın.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.