Documente Academic
Documente Profesional
Documente Cultură
Listas Enlazadas
2
8. Implemente una funcion que dada una lista enlazada l, devuelva otra
lista l1 con solamente los nodos que almacenan un dato impar.
9. Implemente una funcion que dada una lista enlazada l, devuelva otra
lista l1 con solamente los nodos que almacenan un dato mayor que el
promedio.
EJERCICIO 7
#include <iostream>
#include <cstdlib>
using namespace std;
struct nodo{
int nro; //los
datos seran de tipo
entero
struct nodo
*sgte; //puntero
};
typedef struct
nodo;//definimos a
nodo como un tipo de
variable
nodo *fin;//puntero
que ira siempre al
final de la lista
nodo *lista;//puntero
que para nosotros
apuntara a la cabeza
de nuestra lista
void menu1();
//declaramos las
funciones a usar
void insertarInicio();
void insertarFinal();
void mostrar();
void
buscarElemento();
void
eliminarElemento();
void
eliminarElementos();
/*
Funcion Principal
---------------------------
---------------------------
---------------*/
int main(void)
{
lista = NULL;
int op; // opcion
del menu
do
{
menu1();
cin>>op;
switch(op)
{
case 1:
insertarInicio();
break;
case 2:
insertarFinal();
break;
case 3:
buscarElemento();
break;
case 4:
eliminarElemento();
break;
case 5:
cout<<"\n\n Lista
Circular \n\n";
mostrar();
break;
case 6:
eliminarElementos();
break;
default:
cout<<"OPCION
NO VALIDA...!!!";
break;
cout<<endl<<endl;
system("pause");
system("cls");
}while(op!=7);
return 0;
}
void menu1()
{
cout<<" 1.
CREAR LISTA
"<<endl;
cout<<" 2.
INSERTAR AL
FINAL
"<<endl;
cout<<" 3. BUSCAR
ELEMENTO X
"<<endl;
cout<<" 4.
ELIMINAR
ELEMENTO 'V'
"<<endl;
cout<<" 5.
REPORTAR LISTA
"<<endl;
cout<<" 6.
OBTENER
NUMERO DE
ELEMENTOSX '
"<<endl;
cout<<" 7. SALIR
"<<endl;
cout<<"\n
INGRESE OPCION:
";
//////////////////////INSER
TAR AL
INICIO/////////////////////
/////
void insertarInicio()
{
nodo *nuevo;
nuevo=new struct
nodo;
cout<<"\n***INSER
TA AL
INICIO*****\n";
cout<<"\nINGRESE
DATO:";
cin>>nuevo->nro;
nuevo-
>sgte=NULL;
if(lista==NULL)
{
cout<<"PRIMER
ELEMENTO..!!!";
lista=nuevo;
lista->sgte=lista;
fin=nuevo;
}
else
{
nuevo->sgte =
lista;
lista = nuevo;
fin->sgte = lista;
}
}
//////////////////INSERT
AR AL
FINAL/////////////////////
void insertarFinal()
{
nodo *nuevo;
nuevo=new struct
nodo;
cout<<"\n***INSER
TA AL
INICIO*****\n";
cout<<"\nINGRESE
DATO:";
cin>>nuevo->nro;
nuevo-
>sgte=NULL;
if(lista==NULL)
{
cout<<"PRIMER
ELEMENTO..!!!";
lista=nuevo;
lista-
>sgte=lista;
fin=nuevo;
}
else
{
fin->sgte =
nuevo;
nuevo->sgte =
lista;
fin = nuevo;
}
}
//////////////////MOSTR
AR TODOS LOS
DATOS/////////////////////
///
void mostrar()
{ nodo *aux;
aux=lista;
int i=1;
if(lista!=NULL)
{
do
{ cout<<"
"<<aux->nro;
aux = aux-
>sgte;
i++;
}while(aux!
=lista);
}
else
cout<<"\n\n\tLista
vacia...!"<<endl;
}
//////////////////BUSCAR
ELEMENTO////////////
///////////
void
buscarElemento()
//esta funcion
muestra la posicion
del primer dato
coincidente
//encontrado en la
lista
{
nodo *aux;
int i = 1, valor ,
flag = 0;
cout<<"\nINGRESE
ELEMENTO A
BUSCAR:";
cin>>valor;
if(lista !=NULL)
{
aux = lista;
do
{
if(aux->nro
== valor)
{
cout<<"\n\n
Encontrado en
posicion "<< i
<<endl;
flag=1;
}
else
{
aux =
aux->sgte;
i++;
}
}while(aux!
=lista);
if(flag==0)
cout<<"\n\n\tNumer
o no
econtrado..!"<<endl;
}
else
cout<<"\n\n\tLista
vacia...!"<<endl;
}
////////////////ELIMINA
R ELEMENTO
DETERMINADO/////
/////////////////
void
eliminarElemento()
{
nodo *aux, *r, *q;
int i = 1, flag =
0,valor;
cout<<"\n
INGRESE
ELEMENTO A
ELIMINAR:";
cin>>valor;
if(lista !=NULL)
{
aux = lista;
do
{
if(aux->nro
== valor)
{
if(aux==lista)//si es
que el dato a
eliminar es el
primero
{ r=lista;
lista=lista->sgte;
aux=aux->sgte;
fin-
>sgte=lista;
r-
>sgte=NULL;
if(fin-
>sgte==NULL)
{
lista==NULL;
aux==NULL;
delete(r);
cout<<"\nELEMEN
TO
ELIMINADO...!!!\n"
;
return;
}
else
{
delete(r);
cout<<"\nELEMEN
TO
ELIMINADO...!!!\n"
;
return;
}
}
else
{
if(aux==fin)//si es
que el dato a
eliminar es al que
apunta a fin
{
r=aux;
aux=aux->sgte;
q-
>sgte=aux;
fin=q;
r-
>sgte=NULL;
delete(r);
cout<<"\nELEMEN
TO
ELIMINADO...!!!\n"
;
return;
}
else
{
r=aux;
aux=aux->sgte;
q-
>sgte=aux;
r-
>sgte=NULL;
delete(r);
cout<<"\nELEMEN
TO
ELIMINADO...!!!\n"
;
return;
}
}
flag=1;
}
else
{ q=aux;
aux =
aux->sgte;
i++;
}
}while(aux!
=lista);
if(flag==0)
cout<<"\n\n\tNumer
o no
econtrado..!"<<endl;
}
else
cout<<"LISTA
VACIA...!!!!";
}
//////////////////////ELIMI
NAR
REPETIDOS////////////
/////////
void
eliminarElementos()
{
nodo *aux, *r, *q;
int flag = 0,valor;
cout<<"\n DATO
REPETIDO A
ELIMINAR:";
cin>>valor;
if(lista !=NULL)
{ aux=lista;
while(aux-
>nro==valor)//si los
primeros elementos
son repetidos
if(aux==lista) //esta
funcion borra a estos
{
r=lista;
aux=lista-
>sgte;
lista=lista-
>sgte;
fin-
>sgte=lista;
r-
>sgte=NULL;
if(fin-
>sgte==NULL)
{
lista==NULL;
aux==NULL;
delete(r);
flag=1;
}
else
{
delete(r);
flag=1;
}
}
do
{
if(aux->nro
== valor)
{
while(aux==lista)
{
r=lista;
aux=lista->sgte;
lista=lista->sgte;
fin-
>sgte=lista;
r-
>sgte=NULL;
if(fin-
>sgte==NULL)
{
lista==NULL;
aux==NULL;
delete(r);
}
else
delete(r);
if(aux==fin)//para si
el elemento a borrar
es apuntado por *fin
{
r=aux;
aux=aux->sgte;
q-
>sgte=aux;
fin=q;
r-
>sgte=NULL;
delete(r);
}
else
{
r=aux;
aux=aux->sgte;
q-
>sgte=aux;
r-
>sgte=NULL;
delete(r);
}
flag=1;
}
else
{ q=aux;
aux =
aux->sgte;
}
}while(aux!
=lista);
if(flag==0)
cout<<"\n\n\tNumer
o no
econtrado..!"<<endl;
}
else
cout<<"LISTA
VACIA...!!!!";
}
Ejercicio 11
#include <iostream>
#include <stdlib.h>
// @Enderson
Vizcaino -
EndersonTutoriales.c
om
int op;
int sw=1;
int enter;
int datoBus;
int swDB=0;
struct nodo{
int dato;
nodo *siguiente;
nodo *anterior;
};
nodo
*primero=NULL;
nodo
*ultimo=NULL;
void
ingresar_datos();
void mostrar();
void buscar();
void eliminar();
int main(){
do{
system("/usr/bin/clea
r");
//system("c
ls");
cout<<"1.
Ingresar dato al
inicio de la
lista"<<endl;
cout<<"insertar
dato al finalde la
lista"<<endl;
cout<<"2.
Eliminar dato
posicion"<<endl;
cout<<"3.insertar
dato forma
ascendente y
descendente"<<endl;
cout<<"4-
reportar
nodos"<<endl;
cout<<"0.
salir"<<endl;
cin>>op;
switch(op){
case
1:
ingresar_datos();
system("/usr/bin/clea
r");
//system("cls");
break;
case
2:
eliminar();
cout<<"\nPulse 1
para continuar... ";
cin>>enter;
system("/usr/bin/clea
r");
swDB=0;
break;
//system("cls");
//system("PAUS
E");
break;
case
3:
break;
case
4:
mostrar();
cout<<"\nPulse 1
para continuar... ";
cin>>enter;
system("/usr/bin/clea
r");
case
0:
sw=0;
break;
default:
cout<<"Opcion
no valida..";
cout<<"\nPulse 1
para continuar... ";
cin>>enter;
system("/usr/bin/clea
r");
//system("cls");
}
} while(sw!=0);
return 0;
}
/*
5
primero=5;
ultimo=5;
5 <- 5 -> 5
7
primero=5;
ultimo=7;
7 <- 5 -> <- 7 -> 5
9
primero=7;
ultimo=9;
9 <- 5 -> <- 7 -> <- 9
-> 5
*/
void ingresar_datos()
{
nodo
*nuevo_nodo = new
nodo();
cout<<"Digite el
dato que desea
guardar: ";
cin>>nuevo_nodo-
>dato;
if(primero==NULL){
primero=nuevo_nodo
;
primero-
>siguiente=primero;
primero-
>anterior=primero;
ultimo=primero;
}else{
ultimo-
>siguiente=nuevo_no
do;
nuevo_nodo-
>siguiente=primero;
nuevo_nodo-
>anterior=ultimo;
ultimo=nuevo_nodo;
primero-
>anterior=ultimo;
}
}
void mostrar(){
nodo *aux = new
nodo();
aux = primero;
if(primero!
=NULL){
do{
cout<<"["<<aux-
>dato<<"] ";
aux=aux-
>siguiente;
}
while(aux!=primero);
}else{
cout<<"
La Lista Esta
VACIA!! \n";
}
}
void eliminar(){
nodo *buscar =
new nodo();
nodo
*nodo_eliminar =
new nodo();
buscar =
primero;
nodo_eliminar=NUL
L;
cout<<"Digite el
dato a eliminar: ";
cin>>datoBus;
if(primero!
=NULL){
do{
if(buscar-
>dato==datoBus){
cout<<"Dato
encontrado! \n";
if(buscar==primero){
primero =
primero->siguiente;
primero-
>anterior=ultimo;
ultimo-
>siguiente=primero;
}else
if(buscar==ultimo){
ultimo =
ultimo->anterior;
primero-
>anterior = ultimo;
ultimo-
>siguiente =
primero;
}else{
nodo_eliminar-
>siguiente=buscar-
>siguiente;
buscar-
>siguiente-
>anterior=nodo_elim
inar;
swDB=1;
}
nodo_eliminar=busc
ar;
buscar=buscar-
>siguiente;
}
while(buscar!
=primero &&
swDB==0);
if(swDB==0){
cout<<"El dato
buscado no se
encontro \n";
}else{
free(nodo_eliminar);
}
}else{
cout<<"
La Lista Esta
VACIA!! \n";
}
}