Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Stosy i kolejki

Ostatnio zmodyfikowano 2012-12-01 23:24
Autor Wiadomość
Paulina
Temat założony przez niniejszego użytkownika
[C++] Stosy i kolejki
» 2012-12-01 21:11:06
Cześć, mam pewien problem z zadaniem. Otóż wczytuję długość kolejki liczb (n). Podaję elementy kolejki (od 1 do n w dowolnej kolejności). Następnie dopóki elementy kolejki są różne od 1, chcę, aby umieszczane były one na stosie. I tu się pojawia problem umieszczam pierwszy element z kolejki na stosie, a potem chcę go usunąć z kolejki, aby pierwszym elementem kolejki stał się teraz ten podany jako drugi. Gdy wypisuję pierwszy element kolejki po tych czynnościach zwraca mi jakąś losową(?) liczbę. Prosze o pomoc. Dziękuję z góry ;)

C/C++
#include <iostream>
#include <queue>
#include <stack>
using namespace std;

int main()
{
    queue < int > kolejka;
    stack < int > stos;
    int n;
    cin >> n;
   
    for( int i = 0; i < n; i++ )
    {
        cin >> i;
        kolejka.push( i );
    }
   
   
    if( kolejka.front() != 1 )
    {
       
        stos.push( kolejka.front() );
       
    }
    while( kolejka.empty() == false )
    {
        kolejka.pop();
    }
   
   
   
    cout << stos.top() << endl;
    cout << kolejka.front() << endl;
   
   
    return 0;
}
P-70226
Mrovqa
» 2012-12-01 22:19:38
Zauważ, że ten kod wykonuje się tylko jeden raz. Napisałem Ci, co robi Twój kod:
C/C++
if( kolejka.front() != 1 ) // jezeli pierwszy element kolejki jest rozny od 1
{
   
    stos.push( kolejka.front() ); // to dodaj go do stosu, ale nie usuwaj z kolejki.
   
}
while( kolejka.empty() == false ) // jezeli kolejka nie jest pusta //petla czysci kontener
{
    kolejka.pop(); // usun element z gory
}
Sprawa jest taka: jeżeli pierwszy element w kolejce był równy 1 to stos jest pusty == nie ma sensu nic z niego zdejmować. Na domiar złego czyścić całą kolejkę pętla wyżej == bez sensu jest wyciąganie z niej.

PS
cout << kolejka.size() << " " << stos.size() << "\n";
 a zrozumiesz, w czym problem.
P-70231
Paulina
Temat założony przez niniejszego użytkownika
» 2012-12-01 22:48:13
Ok, rozumiem, ale jeżeli podam np takie elementy kolejki: 5 4 3 2 1, to chciałabym 5 przenieść na stos i usunąć ją z kolejki, mój stos miałby wyglądać następująco 5,4,3,2 a w kolejce zostałaby tylko 1...
P-70237
Mrovqa
» 2012-12-01 22:50:54
C/C++
while( kolejka.front() != 1 ) // jezeli pierwszy element kolejki jest rozny od 1 -- PETLA MA BYC
{
   
    stos.push( kolejka.front() ); // to dodaj go do stosu, ale nie usuwaj z kolejki.
    kolejka.pop(); // czyscimy poczatek
   
}
while( kolejka.empty() == false && kolejka.front() != 1 ) // jezeli kolejka nie jest pusta //petla czysci kontener
{
    kolejka.pop(); // usun element z gory
}
O coś takiego Ci chodzi? Jak coś wymyślisz to przeanalizuj kod krok po kroku, jakby to robił komputer i patrz gdzie się dzieje nie to, co chcesz.
P-70238
DejaVu
» 2012-12-01 22:51:43
Hm... kolega napisał Ci działanie poszczególnych linijek - jedyne co trzeba zrobić to w praktyce poustawiać je we właściwej kolejności - zgodnie z opisem, który przytaczasz...
P-70239
Paulina
Temat założony przez niniejszego użytkownika
» 2012-12-01 23:24:52
Dziękuję bardzo za pomoc ;)
P-70242
« 1 »
  Strona 1 z 1