Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Την καλησπέρα μου στην διαδικτυακή παρέα των προγραμματιστών. Οτι λέει ο τίτλος και περνάμε απευθειας στον κώδικα :

 
struct node *insert_into_ordered_list (struct node *list , struct node *new_node)
{
 
struct node *cur = list , *prev = NULL ;
 
while( cur-> value <= new_node->value) {
prev = cur;
cur = cur->next;
}
 
prev->next = new_node;
new_node->next = cur;
 
return list;
}
 

A. Σε ποιες περιπτώσεις η παραπάνω συνάρτηση δεν δουλεύει σωστά? 

Β. Να γινουν οι απαραίτητες αλλαγές στον κώδικα της συνάρτησης ετσι ώστε να δουλεύει σωστά για όλες τις περιπτώσεις του ερωτήματος Α.

 

Α. Αν θεωρήσουμε οτι η λίστα ειναι ηδη η 1->2->NULL και θελήσουμε να εισάγουμε τον κομβο με value 3 τοτε θα έχουμε :

 

cur -> 1 -> 2 -> NULL 

 

επειδή 1 <= 3 δινει TRUE ο βρόχος θα εκτελέσει το σώμα του επομένως prev -> 1 -> 2 -> NULL ενω cur -> 2

επειδή 2 <= 3 δινει TRUE ο βρόχος θα εκτελέσει το σώμα του επομένως prev -> 2  ενω cur -> NULL και στην συνέχεια το λάθος βρίσκεται στο οτι ο κομβος στον οποιο δειχνει ο cur δεν υπάρχει για να συνεχισει ο βροχος. Ένα ακομη ζήτημα προκυπτει αν στην λιστα 1->2->NULL ο χρήστης εισάγει τον κομβο 0 οποτε 1 <= 0 δινει FALSE και αρα ο prev ειναι NULL και μη δημιουργημένος στην μνήμη. Η έκφραση prev->next = new_node; θα ειναι λάθος. Διοτι ειναι σαν να προσπαθούμε να αποαναφοροποιήσουμε έναν δεικτη αρχικοποιημένο στο NULL.

 

Β. Η λύση στα δυο παραπάνω προβλήματα ειναι αν αρχικά βγάλουμε το σύμβολο '=' μέσα απο την συνθηκη ελέγχου του while και επισης προσθέσουμε πριν τον βροχο το snippet :

 
 
if( new_node-> value < list->value) {
 new_node->next = list;
 list = new_node;
 return list;
}
 

Σωστή δεν ειναι αυτη η λύση? ακουω γνώμες.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...