marsel Δημοσ. 23 Ιανουαρίου 2010 Δημοσ. 23 Ιανουαρίου 2010 καλησπερα, παιδια εχω ενα προβλημα με μια εργασια στις δομες δεδομενων. η ασκηση ειναι μια συγχωνευση 2 λιστων χωρις εισαγωγεται 2 φορες το ιδιο στοιχειο. εχω γραψει τον κωδικα,αλλα πρεπει να μπαινει σε ατερμονο loop,και οταν το εκτελω εχει προβλημα. παρακατω παρα8ετω το κομματι που νομιζω οτι εχει το προβλημα,οποιος μπορει να καταλαβει που ειναι το προβλημα παρακαλω ασ απαντησει. ευχαριστω. CListNode* merge_no_duplicates(CListNode* head1, CListNode* head2) { CListNode* head = create(); CListNode* cur = head; CListNode* cur1 = head1; CListNode* cur2 = head2; while(isEmpty(head1)==false || isEmpty(head2)==false) { if(cur1->item < cur2->item) { if(isEmpty(head) == false) { if(head1->item != cur->item) { insertLast(head,cur1->item); cur = cur->next; cur1 = cur1->next; deleteFirst(head1); }else { cur1=cur1->next; deleteFirst(head1); } }else { insertFirst(head,cur1->item); cur = cur->next; cur1 = cur1->next; deleteFirst(head1); } } else if(cur1->item > cur2->item) { if(isEmpty(head) == false) { if(cur2->item != cur->item) { insertLast(head,cur2->item); cur = cur->next; cur2 = cur2->next; deleteFirst(head2); }else { cur2=cur2->next; deleteFirst(head2); } }else { insertFirst(head,cur2->item); cur = cur->next; cur2 = cur2->next; deleteFirst(head2); } }else { if(isEmpty(head) == false) { insertLast(head,cur2->item); cur1 = cur1->next; cur2 = cur2->next; deleteFirst(head1); deleteFirst(head2); }else { insertFirst(head,cur2->item); cur1 = cur1->next; cur2 = cur2->next; deleteFirst(head1); deleteFirst(head2); } } if(isEmpty(head1)) { while(isEmpty(head2) == false) { if(cur2->item != cur->item) { insertLast(head,cur2->item); cur = cur->next; cur2 = cur2->next; deleteFirst(head2); }else { cur2=cur2->next; deleteFirst(head2); } } }else if (isEmpty(head2) == false) { while(isEmpty(head1) == false) { if(cur1->item != cur->item) { insertLast(head,cur1->item); cur = cur->next; cur1 = cur1->next; deleteFirst(head1); }else { cur1=cur1->next; deleteFirst(head1); } } } } return head; }
bnvdarklord Δημοσ. 23 Ιανουαρίου 2010 Δημοσ. 23 Ιανουαρίου 2010 Ο καλύτερος τρόπος για να βρεις το πρόβλημα κατα την γνώμη μου είναι να τρεξεις το πρόγραμμα σου βημα βημα στο χαρτί... Ετσι θα καταλαβεις ακριβως που ειναι το πρόβλημα...
nikolaos_ Δημοσ. 23 Ιανουαρίου 2010 Δημοσ. 23 Ιανουαρίου 2010 Μου φαίνεται ότι όταν cur1->item==cur2->item (ίσως έπρεπε να το σημειώσεις σαν comment στο κατάλληλο else) o cur δείκτης μένει πίσω. Έκανα με το χέρι: head1->20->12->17->11 head2->20->14->17->12->11->10 τα δυο πρώτα loop του while και κατέληξα: (head1, cur1)->11 (head2, cur2)->12->11->10 όμως head->20->12->(cur->)14->17 ενώ μου φαίνεται ότι το cur θα έπρεπε να δείχνει το 17. Επίσης, ο ίδιος ο αλγόριθμος δεν είναι πολύ σαφής, δηλαδή δεν μου είναι σαφές ποιο αποτέλεσμα πρέπει να προκύπτει από την merge_no_duplicates όταν της δώσεις δυο λίστες. Π.χ. στις λίστες που έφερα ως παράδειγμα θα μπορούσα να κάνω ένα cascading της δεύτερης στο τέλος της πρώτης: cascade->20->12->17->11->20->14->17->12->11->10 και να το αποκαλέσεις κι αυτό merging without duplicates.
Evgenios1 Δημοσ. 23 Ιανουαρίου 2010 Δημοσ. 23 Ιανουαρίου 2010 Ο καλύτερος τρόπος για να βρεις το πρόβλημα κατα την γνώμη μου είναι να τρεξεις το πρόγραμμα σου βημα βημα στο χαρτί... Ετσι θα καταλαβεις ακριβως που ειναι το πρόβλημα... Ψαξε κανα καλο debugger.
virxen75 Δημοσ. 24 Ιανουαρίου 2010 Δημοσ. 24 Ιανουαρίου 2010 έστω ότι έχεις 2 λίστες(λίστα 1,λιστα 2) ποιο το σωστό αποτέλεσμα? λίστα1-->0-->2-->2-->3-->16 λίστα2-->0-->3--17 α)λίστα νέα-->0-->2-->3-->16-->17 β)λίστα νέα-->0-->2-->2-->3--16-->17
marsel Δημοσ. 24 Ιανουαρίου 2010 Μέλος Δημοσ. 24 Ιανουαρίου 2010 παιδια ευχαριστω για τις αμεσες απαντησεις σας, προφανως ειχα κανει πατατα,το ελυσα το προβλημα, με αλλον τροπο,ευχαριστω κ παλι. αμα καποιος χρειαζεται τον σωστο κωδικα, για εργασια η οποιονδηποτε αλλο σκοπο,ας στειλει ενα μυνημα.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.