Tworzenie listy przy pomocy węzłów. Program sie zawiesza.
Ostatnio zmodyfikowano 2014-01-06 16:08
mefmund Temat założony przez niniejszego użytkownika |
Tworzenie listy przy pomocy węzłów. Program sie zawiesza. » 2014-01-06 15:20:35 Witam, Robie zadanie domowe jednak z nieznanych mi przyczyn program sie sypie. Prosilbym o pomoc w rozwiazaniu. Juz kilka godzin staram sie cos wymyslec, ale program i tak sie wywala. Ponizej zamieszczam kod. Cos jest nie tak z kasowaniem, ale nie mam pojecia co to moze byc. Program powinien wydrukowac: data1=1 data1=1 data2=2 1 2 3 4 5 6 Del:1 Del:2 Del:3 Natomiast po wydrukowaniu 1 2 3 4 5 6 sie zawiesza. #include <iostream>
template < typename T > class Queue { struct Node { bool empt; T data; Node * next; }; bool empt; Node * head; Node * tail; public: Queue() { head = new Node(); head->data = NULL; head->next = NULL; tail = NULL; empt = true; } bool empty() const { return empt; } void put( const T & dat ) { Queue::Node * tmp = new Queue::Node(); tmp->data = dat; tmp->next = NULL; if( head->data == NULL ) { head = tmp; } if( tail != NULL ) tail->next = tmp; tail = tmp; empt = false; } T get() { T result; Node * tmp; result = head->data; if( head->next != NULL ) { tmp = head->next; tail = NULL; } else { empt = true; } delete head; head = tmp; return result; } ~Queue() { Node * tmp = head; Node * deltmp = NULL; while( tmp != NULL ) { deltmp = tmp; tmp = deltmp->next; std::cout << "DEL: " << deltmp->data << std::endl; delete deltmp; } } }; int main() { int data1, data2; Queue < int >* q = new Queue < int >(); q->put( 1 ); data1 = q->get(); std::cout << " data1=" << data1 << std::endl; q->put( 1 ); q->put( 2 ); data1 = q->get(); data2 = q->get(); std::cout << " data1=" << data1 << " data2=" << data2 << std::endl; q->put( 1 ); q->put( 2 ); q->put( 3 ); q->put( 4 ); q->put( 5 ); q->put( 6 ); while( !q->empty() ) std::cout << " " << q->get(); std::cout << std::endl; q->put( 1 ); q->put( 2 ); q->put( 3 ); delete q; } |
|
pekfos |
» 2014-01-06 15:26:34 W get() wyzeruj na początku tmp. |
|
mefmund Temat założony przez niniejszego użytkownika |
» 2014-01-06 16:08:23 Po wyzerowaniu wyswetla tylko data1=1 i sie zawiesza.. :( Program zawiesza sie w momencie tworzenia obiektu Queue::Node* tmp = new Queue::Node(); Jednak to cos w get() jest nie tak. Cos z kasowaniem tych obiektow, ale nie wiem co bo proboalem juz na milion sposobow zmieniac to usuwanie. Zauwazylem, ze jak usune calkiem 'delete head' to program normalnie sie uruchamia i dochodzi do konca... |
|
« 1 » |