Δημοσιεύτηκε: 29 Σεπ 2011, 09:17
από migf1
Για την prepend, το 1ο που βλέπω είναι πως μέσα στο loop ξεκινάς με: table->buffer[i] = tmp; με το tmp να έχει undefined τιμή!

Όσο για το ίδιο το loop, δεν το έκανα trace (μπορείς να το κάνεις εσύ, είτε με χαρτί & μολύβι, είτε προσθέτοντας printf να σου τυπώνουν τις τιμές των στοιχείων σε ενδιάμεσα στάδια, είτε με debugger).

Για αυτές τις δουλειές πάντως (εννοώ τη μαζική μετακίνηση συνεχόμενων στοιχείων) ο ενδεδειγμένος και μακράν ταχύτερος τρόπος είναι με χρήση της έτοιμης συνάρτησης: memmove... δες επίσης κι εδώ: http://www.java-samples.com/showtutoria ... rialid=591.

Παραθέτω και τον κώδικα της table_prepend_element() για την δική μας περίπτωση...

Κώδικας: Επιλογή όλων

/* --------------------------------------------------------------------------------
*
* --------------------------------------------------------------------------------
*/
Bool table_prepend_element( Table *table, const int element )
{
if ( !table ) /* έλεγχος ασφαλείας */
return FALSE; /* ... πρόωρη έξοδος */

if ( !table->buffer ) /* το buffer δεν υπάρχει */
return FALSE; /* ... πρόωρη έξοδος */

if ( table->buflen < 0 ) /* αποτροπή άκυρης θέσης */
return FALSE; /* ... πρόωρη έξοδος */

if ( table->buflen == table->bufmaxlen ) /* το buffer είναι γεμάτο */
return FALSE; /* ... πρόωρη έξοδος */

/* μετακίνηση στοιχείων δεξιά */
memmove( &table->buffer[1], &table->buffer[0], table->buflen * sizeof(int) );

table->buffer[ 0 ] = element; /* εισαγωγή του element */
(table->buflen)++; /* ενημέρωση τρέχοντος μήκους */

return TRUE;
}