Está en la página 1de 11

UNIVERSIDAD NACIONAL DE TRUJILLO

FACULTAD DE CIENCIAS FÍSICAS Y MATEMÁTICAS


ESCUELA DE INFORMATICA

LABORATORIO 5

ESTRUCTURA DE DATOS

DOCENTE:

• ING. CRUZ FLORIÁN, IRIS AUREA

ALUMNO:

• ASUNCION VELASQUEZ, LUIS ENRIQUE

CICLO: II

TRUJILLO - PERU

2022
Listas Enlazadas Simples Lineales (LESL)
I) Crea una lista (LESL) e insertar “n” números enteros hacia el final
II) Luego Sobre dicha Lista de números enteros. Diseñe e implemente los
siguientes algoritmos:
1.- Inserción:
a) Insertar al Inicio.
b) Insertar al Final.
c) Insertar un elemento justo antes de uno especificado.
d) d. Insertar un elemento justo después de uno especificado.
2.- Reporte.
3.- Búsqueda.
4.- Eliminación de un elemento con valor ‘V’.
5.- Eliminación de todos los elementos con valor ‘V’.
6.- Eliminar x-ésimo elemento

#include<iostream>
#include<conio.h>
#include<string.h>
#include<stdlib.h>

using namespace std;

//Estructura Nodo
struct Nodo{
int dato;
Nodo *siguiente;
};

//Prototipos Funciones
void insertarInicio(Nodo *&, int);
void insertarFinal(Nodo *&, int);
void insertarElemento(Nodo *&, int, int);
int insertarAntesDespues();
void mostrarLista(Nodo *);
void buscarLista(Nodo *, int);
void eliminarNodo(Nodo *&, int);
void eliminarRepetido(Nodo *&, int);
void eliminarPosicion(Nodo *&, int);
void menu();
void menuInsercion();
//Funcion Principal
int main()
{
int n;

cout<<"\n\n\tIngrese la cantidad de nodos a crear: ";


cin>>n;

for(int i = 0; i<n; i++){


cout<<"\n\tElemento "<<i+1<<": ";
Nodo *nuevo_nodo = new Nodo();
cin>>nuevo_nodo->dato;
nuevo_nodo->siguiente = lista;
lista = nuevo_nodo;
}

system("cls");

menu();

getch();
return 0;
}

void menu(){

do{
cout<<"\n\n\t\t.:MENU:.\n";
cout<<"\t[1] Insercion\n";
cout<<"\t[2] Reporte\n";
cout<<"\t[3] Busqueda\n";
cout<<"\t[4] Eliminar elemento con valor 'V' \n";
cout<<"\t[5] Eliminar todos los elementos con valor 'V'"<<endl;
cout<<"\t[6] Eliminar x-esimo elemento \n";
cout<<"\t[7] Salir\n";
cout<<"\tOpcion: ";cin>>op;

system("cls");

switch(op){
case 1: menuInsercion();
break;

case 2: mostrarLista(lista);
cout<<"\n";
system("pause");
break;

case 3: cout<<"\nDigite un numero a buscar: "; cin>>dato;


buscarLista(lista, dato);
cout<<"\n";
system("pause");
break;
case 4: cout<<"\nDigite el elemento a eliminar: ";cin>>dato;
eliminarNodo(lista, dato);
cout<<"\n";
system("pause");
break;

case 5: cout<<"\nDigite un numero a eliminar: "; cin>>dato;


eliminarRepetido(lista, dato);
cout<<"\n";
system("pause");
break;

case 6: cout<<"\nDigite la posicion del elemento a eliminar: ";cin>>dato;


eliminarPosicion(lista,dato);
cout<<"\n";
system("pause");
break;
}

system("cls");

} while(op != 7);

void menuInsercion(){

do{
cout<<"\n\n\t\t.:MENU INSERCION:.\n";
cout<<"\t[1] Insertar al Inicio\n";
cout<<"\t[2] Insertar al Final\n";
cout<<"\t[3] Insertar en una posicion\n";
cout<<"\t[4] Volver\n";
cout<<"\tOpcion: ";cin>>op;

switch(op){
case 1: cout<<"\n\tDigite un numero: "; cin>>dato;
insertarInicio(lista,dato);
cout<<"\n";
break;

case 2: cout<<"\n\tDigite un numero: "; cin>>dato;


insertarFinal(lista,dato);
cout<<"\n";
break;

case 3: cout<<"\n\tDigite un numero: "; cin>>dato;


cout<<"\tPosicion: "; cin>>pos;
insertarElemento(lista, dato, pos);
break;
}

system("cls");
//Funcion Principal
int main()
{
int n;

cout<<"\n\n\tIngrese la cantidad de nodos a crear: ";


cin>>n;

for(int i = 0; i<n; i++){


cout<<"\n\tElemento "<<i+1<<": ";
Nodo *nuevo_nodo = new Nodo();
cin>>nuevo_nodo->dato;
nuevo_nodo->siguiente = lista;
lista = nuevo_nodo;
}

system("cls");

menu();

getch();
return 0;
}

void menu(){

do{
cout<<"\n\n\t\t.:MENU:.\n";
cout<<"\t[1] Insercion\n";
cout<<"\t[2] Reporte\n";
cout<<"\t[3] Busqueda\n";
cout<<"\t[4] Eliminar elemento con valor 'V' \n";
cout<<"\t[5] Eliminar todos los elementos con valor 'V'"<<endl;
cout<<"\t[6] Eliminar x-esimo elemento \n";
cout<<"\t[7] Salir\n";
cout<<"\tOpcion: ";cin>>op;

system("cls");

switch(op){
case 1: menuInsercion();
break;

case 2: mostrarLista(lista);
cout<<"\n";
system("pause");
break;

case 3: cout<<"\nDigite un numero a buscar: "; cin>>dato;


buscarLista(lista, dato);
cout<<"\n";
system("pause");
break;
case 4: cout<<"\nDigite el elemento a eliminar: ";cin>>dato;
eliminarNodo(lista, dato);
cout<<"\n";
system("pause");
break;

case 5: cout<<"\nDigite un numero a eliminar: "; cin>>dato;


eliminarRepetido(lista, dato);
cout<<"\n";
system("pause");
break;

case 6: cout<<"\nDigite la posicion del elemento a eliminar: ";cin>>dato;


eliminarPosicion(lista,dato);
cout<<"\n";
system("pause");
break;
}

system("cls");

} while(op != 7);

void menuInsercion(){

do{
cout<<"\n\n\t\t.:MENU INSERCION:.\n";
cout<<"\t[1] Insertar al Inicio\n";
cout<<"\t[2] Insertar al Final\n";
cout<<"\t[3] Insertar en una posicion\n";
cout<<"\t[4] Volver\n";
cout<<"\tOpcion: ";cin>>op;

switch(op){
case 1: cout<<"\n\tDigite un numero: "; cin>>dato;
insertarInicio(lista,dato);
cout<<"\n";
break;

case 2: cout<<"\n\tDigite un numero: "; cin>>dato;


insertarFinal(lista,dato);
cout<<"\n";
break;

case 3: cout<<"\n\tDigite un numero: "; cin>>dato;


cout<<"\tPosicion: "; cin>>pos;
insertarElemento(lista, dato, pos);
break;
}

system("cls");

} while(op != 4);
}
int insertarAntesDespues(){

system("cls");

do{
cout<<"\n\n\t\t.:INSERTAR EN UNA POSICION:.\n";
cout<<"\t[1] Insertar antes de una posicion\n";
cout<<"\t[2] Insertar despues de una posicion\n";
cout<<"\t[3] Volver\n";
cout<<"\tOpcion: "; cin>>op;

system("cls");

switch(op){
case 1: band = -1;
break;

case 2: band = 0;
break;
}

return band;

} while(op != 3);

}
void insertarInicio(Nodo *&lista, int n){
Nodo *nuevo_nodo = new Nodo();
nuevo_nodo->dato = n;
nuevo_nodo->siguiente = lista;
lista = nuevo_nodo;
}

void insertarFinal(Nodo *&lista, int n){


Nodo *nuevo_nodo = new Nodo();

nuevo_nodo->dato = n;
nuevo_nodo->siguiente = NULL;

Nodo *aux;

if(lista == NULL){
lista = nuevo_nodo;
}
else{
aux = lista;

while(aux->siguiente != NULL){
aux = aux->siguiente;
}
aux->siguiente = nuevo_nodo;
}
}
void insertarElemento(Nodo *&lista, int n, int pos){
Nodo *nuevo_nodo = new Nodo();
nuevo_nodo->dato = n;

Nodo *aux;

if(pos == 1){
nuevo_nodo->siguiente = lista;
lista = nuevo_nodo;
}
else{
int x = insertarAntesDespues();
aux = lista;

for(int i = 1; aux != NULL; i++){


if(i == pos + x){
nuevo_nodo->siguiente = aux->siguiente;
aux->siguiente = nuevo_nodo;

}
aux = aux->siguiente;
}
}
cout<<"\tError ...Posicion no encontrada..!"<<endl;
}
void mostrarLista(Nodo *lista){
Nodo *actual = new Nodo();
actual = lista;

while(actual != NULL){
cout<<actual->dato<<" -> ";
actual = actual->siguiente;
}

}
void buscarLista(Nodo *lista, int n){
bool band = false;

Nodo *actual = new Nodo();


actual = lista;

while(actual != NULL){
if(actual->dato == n){
band = true;
}
actual = actual->siguiente;
}

if(band == true){
cout<<"\n\tEl elemento "<<n<<" SI ha sido encontrado";
}
else{
cout<<"\n\tEl elemento "<<n<<" NO ha sido encontrado";
}

}
void eliminarNodo(Nodo *&lista, int n){
Nodo *aux_borrar = lista;
Nodo *anterior;

if(lista != NULL){
while(aux_borrar != NULL){
if(aux_borrar->dato==n){
if(aux_borrar==lista){
lista = lista->siguiente;
}
else{
anterior->siguiente = aux_borrar->siguiente;

delete aux_borrar;

}
}
anterior = aux_borrar;
aux_borrar = aux_borrar->siguiente;
}
}
else{
cout<<"\n\tLista Vacia..!";
}
}

void eliminarRepetido(Nodo *&lista, int n){

Nodo *aux_borrar = lista;


Nodo *anterior = lista;

while(aux_borrar != NULL){
if(aux_borrar->dato == n){
if(aux_borrar==lista){
lista = lista->siguiente;
delete aux_borrar;
aux_borrar = lista;
}
else{
anterior->siguiente = aux_borrar->siguiente;
delete aux_borrar;
aux_borrar = anterior->siguiente;
}
}
else{
anterior = aux_borrar;
aux_borrar = aux_borrar->siguiente;
}
}
cout<<"\nValores Eliminados...\n";
}
void eliminarPosicion(Nodo *&lista, int pos){
Nodo *aux_borrar = lista;
Nodo *anterior;

int i=1;

if(lista != NULL){
while(aux_borrar != NULL){
if(pos == i){
if(aux_borrar==lista){
lista = lista->siguiente;
}
else{
anterior->siguiente = aux_borrar->siguiente;

delete aux_borrar;
return;
}
}
i++;
anterior = aux_borrar;
aux_borrar = aux_borrar->siguiente;
}
}
else{
cout<<"\n\tLista Vacia..!";
}
}

También podría gustarte