Poniżej kod procedury, która usuwa element o wskazanej wartości val z listy jednokierunkowej - element listy jest typu Node - jest to struktura, która zawiera pole int value oraz wskaźnik next na następny element.
Problem w tym, że przy mierzeniu czasu działania tej procedury, zawsze działa ona w dokładnie zerowym czasie, nawet dla 100000 elementów. Mierzenie czasu działa na pewno dobrze (używam funkcji clock()), bo działanie innych procedur jest mierzone poprawnie.
Wydaje się, że usuwanie działa ok, bo jak wyświetlam potem listę, to brakuje właśnie usuniętego elementu. Tyle, że ten czas taki krótki - wiem, że jest liniowy, ale czy to możliwe, by dla 100000 elementów tak krótko trwało to usuwanie? Lista jest posortowana (tworzona metodą insertion sort).
Czy ktoś mógłby mi powiedzieć, czy takie zachowanie jest normalne? Jak dla mnie, czas powinien być liniowy względem długości listy i powinien wynieść co najmniej te kilka milisekund... a tu ciągle 0. Próbowałem powtarzać pomiary np. 1000 razy i wyliczać średnią - zawsze 0.
int delItemOfList(Node **root, int valToDel) { /* if deleted, returns 0, else returns -1 */
Node *curr = *root, *toDel = NULL;
if ((**root).value == valToDel) {
toDel = *root; /* delete current root */
*root = (**root).next; /* new root */
} else {
while ((curr -> next -> next != NULL) && (curr -> next -> value != valToDel)) /* seeking */
curr = curr -> next;
if (curr -> next -> value == valToDel) { /* item found */
toDel = curr -> next;
curr -> next = curr -> next -> next;
} else return -1; /* item not found */
}
free(toDel);
return 0;
}