Created
June 4, 2019 00:18
-
-
Save AlmuHS/c23a10d4531f33b0b3d015773e2246e5 to your computer and use it in GitHub Desktop.
Implementación de una lista enlazada sencilla en C++
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
using namespace std; | |
struct TNodo{ | |
int datos; | |
TNodo* siguiente; | |
}; | |
TNodo *inicial, *final; | |
void insertar(int dato){ | |
TNodo* nuevo = new TNodo{dato, NULL}; | |
final->siguiente = nuevo; | |
final = final->siguiente; | |
} | |
void insertar_medio(TNodo* pos, int dato){ | |
TNodo* nuevo = new TNodo{dato, NULL}; | |
nuevo->siguiente = pos->siguiente; | |
pos->siguiente = nuevo; | |
} | |
void borrar(TNodo *pos){ | |
TNodo *actual = inicial; | |
while(actual->siguiente != pos && actual->siguiente != NULL){ | |
actual = actual->siguiente; | |
} | |
if(actual->siguiente != NULL){ | |
actual->siguiente = pos->siguiente; | |
} | |
else{ | |
actual->siguiente = NULL; | |
} | |
delete(pos); | |
} | |
int main() | |
{ | |
//Creamos los punteros al inicio y final de la lista | |
inicial = NULL; | |
final = inicial; | |
//Creamos el primer elemento de la lista | |
TNodo *nuevo = new TNodo{0, NULL}; | |
inicial = nuevo; | |
final = inicial; | |
//Insertamos mas elementos en la lista | |
for(int i = 1; i < 11; i++){ | |
insertar(i); | |
} | |
//Buscamos una posición intermedia donde hacer la inserción | |
TNodo *actual = inicial; | |
for(int i = 0; i < 5; i++){ | |
actual = actual->siguiente; | |
} | |
//Insertamos un nuevo elemento en medio de la lista | |
insertar_medio(actual, 23); | |
//Mostramos el contenido de la lista | |
actual = inicial; | |
for(int i = 0; i < 11; i++){ | |
actual = actual->siguiente; | |
cout<<actual->datos<<"\t"; | |
} | |
cout<<"\nBorrando nodo recien insertado\n"; | |
//Buscamos la posicion del elemento recien insertado | |
actual = inicial; | |
for(int i = 0; i < 6; i++){ | |
actual = actual->siguiente; | |
} | |
TNodo *borrar_ptr = actual; | |
//Borramos el elemento recien insertado (en medio de la lista) | |
borrar(borrar_ptr); | |
//Volvemos a mostrar la lista | |
TNodo *nodo = inicial; | |
while(nodo->siguiente != NULL){ | |
nodo = nodo->siguiente; | |
cout<<nodo->datos<<"\t"; | |
} | |
//Borramos la lista | |
nodo = inicial->siguiente; | |
inicial = NULL; | |
delete(inicial); | |
while(nodo != NULL){ | |
TNodo *borrar = nodo; | |
nodo = nodo->siguiente; | |
delete(borrar); | |
} | |
delete(nodo); | |
//Nos aseguramos de que la lista se ha borrado bien | |
if(inicial == NULL) cout<<"\nlista borrada\n"; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment