Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct Nodo {
- int info;
- string nombre;
- struct Nodo *link;
- };
- typedef Nodo *Lista;
- void insertarAlInicio(Lista &l, int valor, string nombre){
- Lista nuevoNodo = new(Nodo);
- nuevoNodo->info = valor;
- nuevoNodo->nombre = nombre;
- nuevoNodo->link = l;
- l = nuevoNodo;
- }
- void mostrar(Lista l){
- while(l != NULL) {
- cout <<l->info<<"\t"<<l->nombre<<endl;
- l = l->link;
- }
- }
- int posicionX(Lista l, string X){
- int posicion = -1;
- int contador = 1;
- while(l != NULL) {
- if(l->nombre == X){
- posicion = contador;
- }
- contador++;
- l = l->link;
- }
- return posicion;
- }
- bool existe(Lista l, string X){
- int encontrado = false;
- while(l != NULL) {
- if(l->nombre == X)
- encontrado = true;
- l = l->link;
- }
- return encontrado;
- }
- void mostrarR(Lista l){
- if(l == NULL)
- return;
- cout <<l->info<<"\t"<<l->nombre<<endl;
- mostrarR(l->link);
- }
- int sumaR(Lista l){
- if(l == NULL)
- return 0;
- return l->info + sumaR(l->link);
- }
- void mostrarRI(Lista l){
- if(l == NULL)
- return;
- Lista tmp = l;
- mostrarR(l->link);
- cout <<tmp->info<<"\t"<<tmp->nombre<<endl;
- }
- void eliminarNodoIgualK(Lista &l, int k){
- if(l == NULL) {
- cout <<"[X] no puedo eliminar: Lista sin elementos";
- return;
- }
- if(l!= NULL && l->info == k){
- //respaldo de la dirección que queremso eliminar
- Lista nodoEliminar = l;
- //cambiamos la cabeza de la lista
- l = l->link;
- delete(nodoEliminar);
- } else {
- //cuando tiene un nodo y no es el primero
- Lista aux = l;
- Lista siguiente = l->link;
- while (aux != NULL){
- siguiente = aux->link;
- if(siguiente != NULL && siguiente->info == k){
- cout <<"[X]"<<siguiente->nombre<<endl;
- Lista nodoEliminar = siguiente;
- aux->link = siguiente->link;
- delete(nodoEliminar);
- }
- aux = aux->link; //con esto voy al siguiente nodo
- }
- }
- }
- void datosDePrueba(Lista &l) {
- insertarAlInicio(l, 11, "Loro");
- insertarAlInicio(l, 12, "Perro");
- insertarAlInicio(l, 13, "Gato");
- insertarAlInicio(l, 14, "Jirafa");
- insertarAlInicio(l, 15, "Lobo");
- insertarAlInicio(l, 16, "Pez");
- }
- int main()
- {
- Lista L=NULL;
- insertarAlInicio(L, 1, "Auto");
- insertarAlInicio(L, 2, "Perro");
- insertarAlInicio(L, 3, "Gato");
- insertarAlInicio(L, 4, "Loro");
- mostrar(L);
- cout <<endl<<"Mostrar Recursivo"<<endl;
- mostrarR(L);
- cout <<endl<<"Mostrar Recursivo Inverso"<<endl;
- mostrarRI(L);
- cout <<"La suma es:"<< sumaR(L);
- cout <<"mostrar posicion:"<<posicionX(L, "Gato")<<endl;
- cout <<"mostrar posicion2:"<<posicionX(L, "leon")<<endl;
- if(true)
- cout << "siempre se ejecuta"<<endl;
- if(false)
- cout << "Nunca siempre se ejecuta"<<endl;
- if(existe(L, "Gato"))
- cout <<"fue encontrado"<<endl;
- else
- cout <<"No existe en la lista";
- cout <<"\n\n\nEliminación";
- Lista L2 = NULL;
- insertarAlInicio(L2, 1, "Loro");
- insertarAlInicio(L2, 1, "Loro");
- insertarAlInicio(L2, 2, "Perro");
- insertarAlInicio(L2, 3, "Gato");
- insertarAlInicio(L2, 4, "Jirafa");
- insertarAlInicio(L2, 5, "Lobo");
- insertarAlInicio(L2, 6, "Pez");
- datosDePrueba(L2); //set de datos de prueba
- mostrarR(L2);
- eliminarNodoIgualK(L2, 1);
- eliminarNodoIgualK(L2, 1);
- eliminarNodoIgualK(L2, 2);
- eliminarNodoIgualK(L2, 3);
- eliminarNodoIgualK(L2, 4);
- eliminarNodoIgualK(L2, 5);
- eliminarNodoIgualK(L2, 6);
- cout <<"\nDespues de Eliminación";
- mostrarR(L2);
- cout <<"\n\n\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement