[C++] Stosy i kolejki
Ostatnio zmodyfikowano 2012-12-01 23:24
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 ;) #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; } |
|
Mrovqa |
» 2012-12-01 22:19:38 Zauważ, że ten kod wykonuje się tylko jeden raz. Napisałem Ci, co robi Twój kod: if( kolejka.front() != 1 ) { stos.push( kolejka.front() ); } while( kolejka.empty() == false ) { kolejka.pop(); }
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. |
|
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... |
|
Mrovqa |
» 2012-12-01 22:50:54 while( kolejka.front() != 1 ) { stos.push( kolejka.front() ); kolejka.pop(); } while( kolejka.empty() == false && kolejka.front() != 1 ) { kolejka.pop(); }
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. |
|
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... |
|
Paulina Temat założony przez niniejszego użytkownika |
» 2012-12-01 23:24:52 Dziękuję bardzo za pomoc ;) |
|
« 1 » |