C++ kuyruk yapısı hk.

rdncylmz

Üye
Katılım
19 Ocak 2021
Mesajlar
8
Puanları
1
Yaş
29
yardımcı olabilecek olan var mı ??
 
Son düzenleme:
Kod:
#include <iostream>
#include <queue>
using namespace std;

void ara(int);       //Arama fonksiyonu prototipi
queue<int> rakamlar; //global kuyruk

int main()
{
    int user_input;

    rakamlar.push(11);
    rakamlar.push(22);
    rakamlar.push(33);
    rakamlar.push(44);
    rakamlar.push(55);
    rakamlar.push(66);
    rakamlar.push(77);
    rakamlar.push(88);
    rakamlar.push(99);
    rakamlar.push(101);

    cout<<"Bir sayı giriniz :";
    cin>>user_input;
    ara(user_input);

    return 0;
}

void ara(int sayi){
    int gecerli_sayi;
    bool sayi_bulundu = false;

    for(int i=0;i<rakamlar.size();i++){
        gecerli_sayi = rakamlar.front();
        if(gecerli_sayi == sayi){
            cout<<"Aradığınız sayı "<<i<<". sırada bulundu ";
            sayi_bulundu = true;
        }
        rakamlar.pop();             //Kuyruk başından aldığımızı
        rakamlar.push(gecerli_sayi);//Sona ekliyoruz
    }
    if(!sayi_bulundu)
        cout<<"Aradığınız sayı bulunamadı ";

}

https://onlinegdb.com/SJlPxANyu
 
teşekkür ederim ama dequeue fonksiyonu kullanılmamış burada bağlı listedeki gibi pop ve push kullanmak zorunda mıyım
 
dequeue fonksiyonu queue kitaplığında tanımlı değil istersen kendin yazabilirsin ben sana fikri verdim
 
Kod:
#include<iostream>

using namespace std;



struct eleman{

    int veri;

    eleman* sonraki;

};

// root pointer ve ilk elemani global tanimla

eleman *bas = new eleman;

int kuyrukboyutu = 0;



enqueue(int data)

{

    eleman* yeni = new eleman;

    yeni->veri = data;

    // Kuyruk bos mu?

    if(kuyrukboyutu==0)

    {

        // ilk eleman� ekle

        yeni->sonraki = NULL;

    }

    // Kuyruk bos degilse?

    else

    {

        yeni->sonraki = bas;

    }

    bas = yeni;

    kuyrukboyutu++;

    cout<<data<<" eklendi. Kuyruk boyutu: "<<kuyrukboyutu<<endl;

}



int dequeue()

{

    if(kuyrukboyutu>0)

    {

        eleman *ptr = bas;

        // ptr den sonraki eleman kuyruktan ciksin

        for(int i=1;i<kuyrukboyutu;i++)

        {

            ptr = ptr->sonraki;

        }

        cout<<ptr->veri<<" kuyruktan cikti."<<endl;

        ptr->sonraki = NULL;

        kuyrukboyutu--;

        return ptr->veri;

    }

    else

    {

        cout<<"kuyruk zaten bos!"<<endl;

    }

}



yazdir()

{

    eleman *ptr = bas;

    cout<<"Kuyruk son durumu:"<<endl;

    for(int i=1;i<=kuyrukboyutu;i++)

    {

        cout<<i<<". eleman: "<<ptr->veri<<endl;

        ptr = ptr->sonraki;

    }

}

main()

{

    enqueue(15);

    enqueue(11);

enqueue(21);

enqueue(55);

    enqueue(91);

enqueue(81);

enqueue(75);

    enqueue(33);

enqueue(47);

queue(12) ;

int cikan= dequeue();

    yazdir();

}
Arama fonksiyonunu oluşturamadım burda yardımcı olur musunuz
 
Moderatör tarafında düzenlendi:
dequeu fonksiyonu sana zaten kuyruktan çıkarılan elemanı gösterecek yapman gerekn şey kuyruğun sonundan aldığın elemanı başına eklemek eklerken de aradığın sayıyla karşılaştırmak. Enquee ve dequeu fonksiyonlarının push ve pop olarak çalıştığını varsayoyorum incelemedim. Bu linkte çalıştırdım ama kodun çok sadeleşmeye ihtiyacı var.

https://onlinegdb.com/HJa17LPyu

Kod:
void ara(int sayi){
    int gecerli_sayi;
    bool sayi_bulundu = false;

    for(int i=0;i<kuyrukboyutu;i++){
        gecerli_sayi = dequeu();
        if(gecerli_sayi == sayi){
            cout<<"Aradığınız sayı "<<i<<". sırada bulundu ";
            sayi_bulundu = true;
        }
    
        enqueue(gecerli_sayi);//Sona ekliyoruz
    }
    if(!sayi_bulundu)
        cout<<"Aradığınız sayı bulunamadı ";

}
 
Son düzenleme:
Desteğin için teşkkür ederim ben üzerinde değişiklik yapacağım
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…