Eliminar por pos ordinal
unknown
c_cpp
10 months ago
1.4 kB
12
Indexable
#include <stdio.h>
struct Nodo {
TipoElemento datos;
int siguiente;
int anterior;
}
struct ListaRep {
struct Nodo *cursor;
int inicio;
int libre;
int cantidad;
}
int l_eliminar(Lista lista, int pos) {
int p = -1; // pos fisica tomada a retornar
int aux;
int actual = lista->inicio;
if (1 <= pos && pos <= l_longitud(lista)) {
if (pos == 1) {
p = actual;
lista->inicio = lista->cursor[actual].siguiente;
lista->cursor[p].siguiente = lista->libre;
lista->libre = p;
} else {
// recorro hasta el nodo anterior a eliminar (-1 porque pos va de 0 a n-1, -1 porque queremos el anterior)
for (int i = 0; i < pos - 2; i++) {
actual = lista->cursor[actual].siguiente;
}
p = lista->cursor[actual].siguiente; // pos de elemento a borrar
lista->cursor[actual].siguiente = lista->cursor[p].siguiente; // C
aux = lista->cursor[p].siguiente; // D
lista->cursor[aux].anterior = actual;
lista->cursor[p].anterior = NULO; // B
lista->cursor[p].siguiente = lista->libre; // A
lista->libre = p;
}
lista->cantidad--;
}
return p; // si nunca elimino dara -1, sino pos. fisica
}
int main() {
// llamada de funciones
return 0;
}Editor is loading...
Leave a Comment