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

Tworzenie listy przy pomocy węzłów. Program sie zawiesza.

Ostatnio zmodyfikowano 2014-01-06 16:08
Autor Wiadomość
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.
C/C++
#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;
        //    std::cout << tmp->data << std::endl;
        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;
}
P-101427
pekfos
» 2014-01-06 15:26:34
W get() wyzeruj na początku tmp.
P-101428
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...
P-101439
« 1 »
  Strona 1 z 1