3 listas doblemente enlazadas

Anuncio
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
OBJETIVOS
Explicar la estructura dinámica lista doblemente
enlazadas.
Implementar el TAD lista doblemente enlazadas.
Utilizar el TAD lista doblemente enlazadas para
resolver problemas.
3
Msc. Walter Fernandez Toglio.
LISTAS DOBLEMENTE
ENLAZADAS
1
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
TEMAS
Listas doblemente enlazadas.
Operaciones con Listas doblemente enlazadas
Resolución de problemas usando listas doblemente
enlazadas
SOFTWARE NECESARIO
Dev-C++ 4.9.9.2
http://sourceforge.net/projects/dev-cpp/files/Binaries/
NetBeans IDE C/C++
http://netbeans.org/features/cpp/
Code::Blocks
http://www.codeblocks.org/downloads/26
Eclipse C++
http://www.eclipse.org/downloads/packages/eclipse-ide-ccdevelopers-includes-incubating-components/indigosr1
Visual C++
http://www.microsoft.com/visualstudio/eng/products/visual-studioexpress-products
Borland C++
http://edn.embarcadero.com/article/20633
Msc. Walter Fernandez Toglio.
2
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
LISTAS DOBLEMENTE ENLAZADAS ORDENADAS (DE)
Cada elemento contiene 2 punteros: hacia atrás y hacia delante en la Lista
Las Operaciones son las mismas que para las Simplemente Enlazadas, pero aquí se pueden
dar en ambas direcciones.
El Borrado supone realizar los enlaces entre el puntero del nodo anterior con siguiente al
que se desea eliminar.
En una lista doblemente enlazada cada nodo tiene al menos tres campos:
Enlace al nodo siguiente.
Elemento. El dato de la lista.
Enlace al nodo anterior.
1 5
Los algoritmos para las operaciones sobre listas doblemente enlazadas son normalmente más
complicados.
Pueden ser recorridas fácilmente en ambos
sentidos.
L
Primero
nil
DATO 1
nil
DATO 2
DATO 3
Listas doblemente enlazadas
EJEMPLO
L
Primero
nil
5
15
30
50
70
nil
Msc. Walter Fernandez Toglio.
3
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
LISTAS DOBLEMENTE ENLAZADAS ORDENADAS: LISTA VACÍA
Primero
Primero
Msc. Walter Fernandez Toglio.
4
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
LISTAS DOBLEMENTE ENLAZADAS ORDENADAS: DECLARACIÓN FORMAL
class nodo
{
public:
nodo(int v,nodo *ant=NULL,nodo
*sig=NULL)
{
valor=v;
siguiente=sig;
anterior=ant;
}
private:
int valor;
nodo *anterior;
nodo *siguiente;
friend class listaDE;
};
typedef nodo *pnodo;
class listaDE
{
public:
listaDE()
{
primero=actual=NULL;
}
~listaDE();
void Insertar(int v);
void Borrar(int v);
bool ListaVacia()
{
return primero==NULL;
}
void Mostrar();
void Siguiente();
void Primero();
void Ultimo();
bool Actual()
{
return actual!=NULL;
}
int ValorActual()
{
return actual->valor;
}
private:
pnodo primero;
pnodo actual;
};
Msc. Walter Fernandez Toglio.
actual
5
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
LISTAS DOBLEMENTE ENLAZADAS ORDENADAS: INSERCIÓN
Parámetros: Lista (L) , elemento (e), posición (p)
La posición debe ser válida (1 <= p <= (Long(L) + 1)
Considerar: Inserción en primera posición, al final de la lista, en lista vacía
Procedimiento:
1. Localizar la posición
2. Crear el nodo con el elemento
3. Actualizar los apuntadores involucrados
EJEMPLO
Dada la siguiente lista doblemente enlazada, se desea insertar un nodo cuyo valor es
Primero
18
L
nil
5
15
30
50
70
50
70
nil
SOLUCIÓN
1 Localizar la posición del nuevo nodo
L
ant
sig
15
30
primero
nil
5
nil
1. Localizar la
posición del nuevo
nodo
sig=primero;
while(sig && sig->valor<=v)
{
ant=sig;
sig = sig->siguiente;
}
Msc. Walter Fernandez Toglio.
6
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
2. Crear nuevo nodo
2. Crear nuevo
18
nodo
new nodo(18, ant, sig);
3. Actualizar apuntadores del nuevo nodo
L
primero
ant
sig
15
30
nil
5
50
70
nil
18
3. Actualizar
apuntadores
del nuevo
nodo
n== new nodo(18, ant, sig);
if (ant)
ant->siguiente = n;
if(sig)
sig->anterior = n;
Msc. Walter Fernandez Toglio.
7
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
void listaDE::Insertar(int v)
{
pnodo ant=NULL, n=NULL;
pnodo sig;
if (primero==NULL )
{
primero=new nodo(v,NULL,NULL);
}
else
{
if(primero->valor>v)
{
n=new nodo(v,NULL,primero);
primero->anterior=n;
primero=n;
}
else
{
sig=primero;
while(sig && sig->valor<=v)
{
ant=sig;
sig = sig->siguiente;
}
n=new nodo(v, ant,sig);
if (ant)
ant->siguiente = n;
if(sig)
sig->anterior = n;
}
}
}
Msc. Walter Fernandez Toglio.
8
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
LISTAS DOBLEMENTE ENLAZADAS ORDENADAS: ELIMINACIÓN
Parámetros: Lista (L) , elemento (e), posición (p)
La posición debe ser válida (1 <= p <= (Long(L))
Considerar: Eliminación en primera posición, al final de la lista
Procedimiento:
1. Localizar la posición
2. Actualizar los apuntadores involucrados
3. Liberar el espacio ocupado por el nodo
EJEMPLO
Dada la siguiente lista doblemente enlazada, se desea eliminar el nodo cuyo valor es 30
L
primero
nil
5
15
30
50
70
nil
SOLUCIÓN
1. Localizar la posición del nodo a eliminar
1. Localizar la posición
del nodo a eliminar
ant=NULL;
var=primero;
while(var)
{
if (var->valor==v)
break;
ant=var;
var=var->siguiente;
}
primero
L
ant
var
nil
5
15
30
50
70
nil
Msc. Walter Fernandez Toglio.
9
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
2. Actualizar apuntadores de los nodos
primero
L
var
ant
nil
5
15
30
50
70
nil
if(var)
{
if (ant)
{
ant->siguiente=var->siguiente;
if(var->siguiente)
2. Actualizar
apuntadores
de los
nodos
involucrad
os
var->siguiente>anterior=ant;
}
Else
{
primero=var->siguiente;
var->siguiente->anterior=NULL;
}
delete var;
}
3. Liberar espacio ocupado por el nodo
primero
L
3. Liberar espacio
ocupado por el
ant
var
nodo
delete var;
nil
5
15
30
50
70
nil
Msc. Walter Fernandez Toglio.
10
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
void listaDE::Borrar(int v)
{
pnodo var,ant;
ant=NULL;
var=primero;
while(var)
{
if (var->valor==v)
break;
ant=var;
var=var->siguiente;
}
if(var)
{
if (ant)
{
ant->siguiente=var->siguiente;
if(var->siguiente)
var->siguiente->anterior=ant;
}
else
{
primero=var->siguiente;
var->siguiente->anterior=NULL;
}
delete var;
}
}
Msc. Walter Fernandez Toglio.
11
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
EJEMPLO: LISTAS DOBLEMENTE ENLAZADAS ORDENADAS
Nodo.h
#include <stdio.h>
class nodo
{
public:
nodo(int v,nodo *ant=NULL,nodo *sig=NULL)
{
valor=v;
siguiente=sig;
anterior=ant;
}
private:
int valor;
nodo *anterior;
nodo *siguiente;
friend class listaDE;
};
ListaDE.h
#include <iostream>
#include "Nodo.h"
using namespace std;
class listaDE
{
public:
listaDE()
{
primero=actual=NULL;
}
~listaDE();
void Insertar(int v);
void Borrar(int v);
bool ListaVacia()
{
return primero==NULL;
}
void Mostrar();
void Siguiente();
void Primero();
void Ultimo();
bool Actual()
{
return actual!=NULL;
}
int ValorActual()
{
return actual->valor;
}
private:
nodo *primero;
nodo *actual;
};
Msc. Walter Fernandez Toglio.
12
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
listaDE::~listaDE()
{
nodo *aux;
while(primero)
{
aux=primero;
primero=primero->siguiente;
delete aux;
}
actual=NULL;
}
void listaDE::Insertar(int v)
{
nodo *ant=NULL, *n=NULL;
nodo *sig;
if (primero==NULL )
{
primero=new nodo(v,NULL,NULL);
}
else
{
if(primero->valor>v)
{
n=new nodo(v,NULL,primero);
primero->anterior=n;
primero=n;
}
else
{
sig=primero;
while(sig && sig->valor<=v)
{
ant=sig;
sig = sig->siguiente;
}
n=new nodo(v, ant,sig);
if (ant)
ant->siguiente = n;
if(sig)
sig->anterior = n;
}
}
}
void listaDE::Mostrar()
{
nodo *aux;
aux=primero;
cout<<endl<<"***DATOS LISTA***"<<endl;
while(aux)
{
cout<<aux->valor<<"->";
aux = aux->siguiente;
}
cout<<endl;
this->Ultimo();
aux=actual;
cout<<endl<<"***DATOS LISTA INVERSO***"<<endl;
while(aux)
Msc. Walter Fernandez Toglio.
13
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
{
cout<<aux->valor<<"->";
aux = aux->anterior;
}
cout<<endl<<endl;
}
void listaDE::Primero()
{
actual=primero;
}
void listaDE::Siguiente()
{
if(actual)
actual=actual->siguiente;
}
void listaDE::Ultimo()
{
nodo *var;
var=primero;
while(var)
{
actual=var;
var=var->siguiente;
}
}
void listaDE::Borrar(int v)
{
nodo *var,*ant;
ant=NULL;
var=primero;
while(var)
{
if (var->valor==v)
break;
ant=var;
var=var->siguiente;
}
if(var)
{
if (ant)
{
ant->siguiente=var->siguiente;
if(var->siguiente)
var->siguiente->anterior=ant;
}
else
{
primero=var->siguiente;
var->siguiente->anterior=NULL;
}
delete var;
}
}
Prinicpal.cpp
Msc. Walter Fernandez Toglio.
14
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
#include "ListaDE.h"
int main(char *arg)
{
listaDE ObjLista;
ObjLista.Insertar(20);
ObjLista.Insertar(10);
ObjLista.Insertar(45);
ObjLista.Insertar(30);
ObjLista.Insertar(40);
ObjLista.Mostrar();
cout<<"Lista elementos"<<endl;
ObjLista.Primero();
while(ObjLista.Actual())
{
cout<<ObjLista.ValorActual()<<endl;
ObjLista.Siguiente();
}
ObjLista.Primero();
cout<<"Primero->"<< ObjLista.ValorActual()<<endl<<endl;
ObjLista.Ultimo();
cout<<"Ultimo->"<< ObjLista.ValorActual()<<endl<<endl;
ObjLista.Borrar(45);
cout<<"Borrar 45: "<<endl;
ObjLista.Mostrar();
cout<<endl;
ObjLista.Borrar(10);
cout<<"Borrar 10: "<<endl;
ObjLista.Mostrar();
cout<<endl;
ObjLista.Insertar(5);
cout<<"Insertar 5: "<<endl;
ObjLista.Mostrar();
cout<<endl;
ObjLista.Insertar(60);
cout<<"Insertar 60: "<<endl;
ObjLista.Mostrar();
cout<<'\n';
system("PAUSE");
return 0;
}
Presione F5
o haga clic en
Msc. Walter Fernandez Toglio.
15
C
CE
EN
NTTR
RO
OS
SU
UP
PE
ER
RIIO
OR
RS
SU
UP
PE
ER
RIIO
OR
RD
DE
EA
ALLTTA
A
E
S
P
E
C
I
A
L
I
Z
A
C
I
Ó
N
Y
A
S
E
S
O
R
Í
A
ESPECIALIZACIÓN Y ASESORÍA
http://www.cfape.com
P
PR
RO
OG
GR
RA
AM
MA
AC
CIIÓ
ÓN
NE
EN
N LLA
AP
PLLA
ATTA
AFFO
OR
RM
MA
AW
WIIN
ND
DO
OW
WS
S http://www.cfape.com/
E
E
S
T
R
U
C
T
U
R
A
D
E
D
A
T
O
S
N
E
A
E
S
E
N
C
C
C
U
R
S
O
O
N
N
E
ES
ST
TR
RU
UC
CT
TU
UR
RA
AD
DE
ED
DA
AT
TO
OS
S LLLIIIN
NE
EA
ALLLE
ES
SE
EN
NC
C///C
C++++++ (((C
CU
UR
RS
SO
OO
ON
N---LLLIIIN
NE
E)))
Msc. Walter Fernandez Toglio.
16
Descargar