Questo è il codice nel quale ho inserito una lista, la funzione $text(void ord_insert)$ e la funzione $text(Funzione)$ che, data una lista iniziale, ne crea una nuova ordinata:
- Codice:
struct list {
int value;
struct list *next_ptr;
};
void ord_insert(struct list **ptrptr, int x) { //x valore da inserire
while ((*ptrptr) != NULL && (*ptrptr)->value < x) {
ptrptr = &((*ptrptr)->next_ptr);
}
pre_insert(ptrptr,x);
};
void Funzione(struct list *ptr, struct list **ptrptr) {
init(ptrptr);
while (ptr != NULL) {
ord_insert(ptrptr,ptr->value);
ptr = ptr->next_ptr;
}
}
Domande:
1) Intanto, la lista che ho scritto è una lista di valori interi in forma collegata con puntatori?
2) Come funziona il while di $text(void ord_insert)$? Se $text((*ptrptr))$ non è nullo e il primo valore della nuova lista è < di $v$, allora passo al successivo elemento della lista, se $text((*ptrptr))$ non trova nulla e il primo valore della nuova lista è > di $v$, allora non si esegue il while e $v$ lo inserisco in testa della lista? Ma non ho una limitazione solo nell'inserimento in testa? Voglio dire, io potrei avere una lista che per i primi due elementi è ordinata, poi no, qual è la condizione che mi rende la lista tutta ordinata?
3)Sempre in $text(void ord_insert), come mai viene scritto $text((*ptrptr)->value)$ cioè perchè con il $text(*)$? $text((*ptrptr))$ è un puntatore che punta a un altro puntatore, ma $text(value)$ non è una variabile di tipo $text(int)$? Quindi non andrebbe scritto $text((ptrptr)->value)$?
4) In $text(Funzione)$, a che serve $text(init(ptrptr))$? Che significa inizializzare una lista? Significa in pratica crearla?
Grazie