użyciec kolejki zamiast stosu

0

Witam mam program, który pokazuje działanie stosu i muszę przerobić go tak, żeby pokazywał działanie kolejki. Program działa na liczbach %100. Również jest w nim tzw rzut monetą, to czy program ma dodać czy zdjąć element z stosu.

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

#define N 10
#define maxS N-1

int empty(int S[]){
    if(S[0]<0)
        S[0] = 0;
    return !S[0];
}

int push(int S[], int x){
    if(S[0]<maxS) {
        S[++S[0]] = x;
        return 0;   //wszystko ok
    }else return 1; //nie udalo sie zapisac zmiennej
}

int pop(int S[]){
    return S[S[0]--];       //przesuwam wskaznik szczytu stosu

}

int main()
{
    int i, j, k;
    int P[N], Q[N];
    P[0] = Q[0] = 0;        //na poczatku stosy puste
    srand(time(NULL));

    for(i=0; i<30; ++i){
        k=rand()%100;
        if(rand()%4){       //rzut moneta - zdjac czy dodac do stosu, losowanie ktora czynnosc wybrac
            j=push(P, k);
            if(j)
                printf("Brak miejsca w stosie\n");
            else
                printf("Zapisano liczbe %i na stosie\n", k);
            }else{
                if(!empty(P)){
                    k=pop(P);
                    printf("Zdjeto liczbe %i ze stosu\n", k);
                }else
                    printf("Stos jest pusty\n");
            }
    }

    system("pause");
    return 0;
}
1

muszę przerobić go

To jakie jest pytanie? Myślałem, że to Ty masz go przerobić, a nie ktoś ma go przerobić za Ciebie.

0

Jak wykorzystać kolejkę w tym programie? Co trzeba zmienić, aby program był z użyciem kolejki?

0

Może bardziej sprecyzuje o co mi chodzi. Wiem jak działa stos, czyli zapisuje sobie np liczbę 20, później zapisuje liczbę np 11 i jeśli będę chciał zdjąć z stosu liczbę to będzie to 11,ponieważ jest na szczycie stosu. Jednak w kolejce działa to tak, że liczba, która jakby jest najdłużej w ,,kolejce" zostaje zdjęta jako pierwsza. Czyli modyfikacji będzie wymagała w moim przypadku funkcja pop oraz push. Tylko nie wiem jak to wykonać, mogę prosić o jakieś rady?

0

Musisz użyć to S jako bufor cykliczny.

0

Stwierdziłem, że lepiej zrobić ten program z strukturą, tylko chciałbym,żeby ten program losowo dodawał i odejmował liczbę, a nie najpierw dodał mi 10 liczb na stos i potem 10 zdjął.
Jakieś porady?

#include <iostream>
#include <cstdlib>
#include <time.h>


using namespace std;

struct kolejka {
private:
    int kolejeczka[10];
    int aktualnie=0;
    int pierwszy=0;
public:
    bool dodaj(int element){
        kolejeczka[aktualnie] = element;
        aktualnie++;
    };
    int zdejmij(){
    pierwszy++;
    return kolejeczka[pierwszy-1];
    };
    bool czy_cos_jest(){
        if(!aktualnie)
            return false;

        if(aktualnie == pierwszy)
            return false;

        return true;
    };
};


int main()
{
kolejka kolejeczka;
srand(time(NULL));
int liczba;

for(int i=0; i<10; i++){
    liczba = rand()%100;
    cout << "Dodaje do kolejki: " << liczba << endl;
    kolejeczka.dodaj(liczba);

}

for(int i=0; i<10; i++){
    cout <<"Zdjalem z kolejki: "<< kolejeczka.zdejmij() << endl;
}
    if(kolejeczka.czy_cos_jest()){
        cout << "Cos jeszcze jest.";
    }
    else
        cout << "Jednak nic nie ma";

} 
0
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Zapoznaj się z inkrementacją, bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
  3. Używaj wyłącznie angielskiego nazewnictwa: http://4programmers.net/Forum/1208091
  4. Staraj się deklarować zmienne jak najbliżej miejsca użycia.
  5. Zauważ że przy tym stosie który miałeś wrzucać i wyjmować tysiące razy, byle na raz na stosie było nie więcej niż określona na początku liczba, ta kolejka pozwala na co najwyżej 10 wrzutów - czyli totalnie do bani.
for(int i=0;i<100;++i)
  {
   if(rand()&1)
     {
      int value=rand()%100;
      cout<<"Dodaje do kolejki: "<<value<<endl;
      kolejeczka.dodaj(value);
     }
   else cout<<"Zdjalem z kolejki: "<<kolejeczka.zdejmij()<<endl;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1