Estructura de Datos
Estructura de Datos
Estructura de Datos
flD5T[fl«rOil
»r»0ro5
OBJETIVOS
. Entender en qué consiste el proceso de abstracción.
. Describir la técnica de la abstracción de datos para el diseño de
estructuras de datos.
. Comprender qué es una estructura de datos.
. Entender el diseño de una estructura de datos a través de una
especificación lógica.
. Ubicar los niveles de abstracción al programar.
. Identificar los beneficios de utlltzar la abstracción de datos como
estrategia de trabajo en el desarrollo de software.
f,bstracción de datos
estructura de datos'
1. Elementos que conformarán la
individuales que guar-
En este puná se describe el tipo de los datos
datálaestnrctura'Porejemplo'númeroserteros'caracteres'fechas'
etcétera'
registros con los datos de un empleado'
guardarán los-elementos'
2. Tipo de organización en que se
pala los datos en la
O-* -- Existen solamerrte cuatro ilpo. J" organizaaión
estructura,tacualdeberáteneralgunadelassiguientesorganizaciones:
.Lineal:Sihayunarelacióndeunoaunoentreloselementos.
los
una relación de uno a muchos entre
' Jerrúrquicá, éi nuy
elementos.
.Red:Sihayunarelacióndemuchosamuchosentreloselementos.
entre los elementos'
' Sin relacián: Sino hay relaciones
Lasrelacionesentreloselementossedan'porejemplo'cuandoexiste
esté antes o después que otro
algún motivo para que un elemento
(figura 1.1).
Estructuna Estructura
Estructuras
jer"ár"quica de red
lineales
"o e
e 8e
@
No hay relac¡Ón
Relación de muchos a muchos
Belación de uno a uno Belación de uno a vanlos
de datos'
Figura 'lf . Tipos de estructuras u organizaciones
de la es-
Este punto op"io"uf, y en é1 se describkála capacidad
",
tructura en cuanto al rango posible de
datos por guardar'
estructura'
4. Descripción de las operaciones de la
debe describirse con
cada operacion retailonada con la estructura
los siguientes Puntos:
. Nombre de la oPeración'
. Descripción breve de su utilidad'
. Datos de entrada a la oPeración'
Ejemplo
@ Ejemplo
-a
flbstracción de dalos
LLENA
UTILIDAD: .
§irve para yerificar si una caden¿ está llena o no,
ENTRffW' 'cadenaSqrte,správerificada',,, l'
II.IVIERTE. ,
.//,*^
66k
§@
Ejemplo
int l;
factorial =
for(intj-n;j>0;.i--)
factorial = factorial x ji
Sin embargo, es importante notar que:
Por 1o tanto, se requiere de un tipo de dato con una capacidad para al-
macenar a cualquier número entero, sin importar qué tan grande sea;
o" ya que C++ no provee de un tipo estándar paru este caso, se puede di-
señar un TDA para lutllizar números enteros grandes, el cual a su vez
será una estructura de datos.
GONCLUSIONES
En la evolución del desarollo de software, se han descubierto una gran
cantidad de estructuras de datos, con propósitos firmes y claros, que no
pierden actualidad y forman parte de las bases para cualquier futuro
desarrollador de software. El propósito de este material, es mostrar ca-
da una de estas estructuras en sus tres niveles de abstracción, por lo que
los capítulos posteriores, se vuelven el mejor ejemplo de las ideas mos-
tradas en este capítulo. Deben ser de especial interés los capítulos de
strings, pilas y filas.
Sin embargo, la metodología aquí presentada puede ser utilizada
para ef diseño de nuevas estructuras de acuerdo con las necesidades de
aplicaciones y ajustando el punto de referencia de los niveles de abs-
tracción. Además, la comprensión de estas ideas facilitaú el entendi-
miento de la filosofía de la programación orientada a objetos.
EJEBCICIOS
* Abstracción
x Abstracción de datos
* Especificación lógica
x Nivel de abstracción
* Independencia de niveles
x Precondición
x Postcondición
x Módulo
x Abstracción modular
flbstracción de datos
a
J. Recuerde cómo comprendió el concepto de una matriz (arreglo bi-
dimensional) en un lenguaje de programación. Si se considera la
matizcomo un TDA, defina su especificación lógica y comente las
o**- característicasdesunive1físicoya1gunasdesusposiblesap1ica--
ciones.
' Identifique cuál es ra función que se está rearizando con estos códigos.
. Clasifique los códigos de mayor a menor abstracción.
' Identifique en qué niver de abstracción se
está trabajando en cada
uno de los códigos.
i-----
l¡
RUToEURLURc I óN q ?
f ¡r¡E-r
-___¡r-r__-___-___-E_ ___.!
verdadero o falso
...Conteste:
-"***o
l' La abstracción de datos es una metodologíaparadiseñar
sistemas
computacionales.
:
i
T
il
I
{
+
:i
I
:
;l
il
t -L
I
Capltulo
I
DIOQflIIflrcil
OilIIIIflDfl fl ODJTIOS
OBJETIVOS
¿Qué es un obieto?
F: J:
iOué son la herencia.g et polimorfismo?
66 Ejemplo
En un sistema bancario,'las cuentas de cheques de los clientes pueden
considerarse objetos. Todos ellos pertenecerían a una clase llamada
CUENIA_DEJHEQUES que define, para cada instancia,los siguien-
tes datos:
- Número de la cuenta
- Nombre del cliente
- Sucursal donde se abrió la cuenta
- Saldo de la cuenta
I
Ejemplo
Mensajes
El objeto responderá
a lbs mensajes eiecutando
los métodos correspondientes.
->
clnss no,mbre
,{ ll Lista de atributos, con.la sintaxis de la
// declaración tradiciotwl de variables en C
Envío de mensajes:
@ Eiemplo
¿Recuerda la necesidad del TDA numerote en el ejemplo del cálculo
del factorial en el capítulo anterior? Ahora procederemos a analizar
cómo podría ser su implementación en el nivel físico.
class Numerote
{ private:
char iiigitos[1000];
int cantidad;
public:
//. Métodos que programan las operaciones
];
Es muy importante notar que el nombre de la clase es un nuevo tipo de
dato. t¿r E¡
a
ut§§g!
¿Cómo se impleme ntaránlas operaciones?
{hs
Flr L
pff
'l'*
'tr ¡
x§j
l,*T!t
El diseño lógico determina la abstracción modular para cada una de las - dt,'t
operaciones. Sin embafgo, dado que el TDA numerote es un objeto, . ril'
conviene programar las operaciones como un método de la clase l¿J§f
I
;ffi
a,H
(función miembro). Además, puesto que un objeto nulmerote está invo- u_:5 §tr
q
lucrado en la implementación de la operación, no será necesario maRe-
jado como parámeffo.
msa ,\§
0a* [u
H
H
La programación de la operación despliega, sería:
¡¡i
void Numerote : : de splie Sa( )
{ for (int i = 0; i<cantidad;i++)
cout << disitosfjJ;
]:
Es importante notar cómo la función no reqaiere el parámetro del
numerote, pues al ser un método de la clase, se trabaja automática-
mente sobre los atributos del objeto involucrado.
La operación suma no representa estrictamente un comportamiento de
los numerofes, sino que puede verse como una aplicación, por lo que
puede implementarse como una función libre y pafa facilitar su irn-
plementación se puede hacer amiga de la clase:
Por otro lado, utilizando las características del lenguaje C++, se puede
aprovechar el concepto de sobrecarga de operadores para dar un nom-
bre más práctico a las operaciones:
Programación orientada a objetos
Numerote factorial;
for(intj-n;j>0;j--)
factorial = factorial * j ;
class Punto
{ public:,
: punto(
); //,Método constructor qu1 iyiciqliza
en la coordenqda (0,0)
, void Lee( ); // !!éndo que tee aa iirt"rir-"lrírr'";rr":;::;"ada (x,y)
v o i d D e sp ti e a('j
s ; 1
i
u n la ;; ;; ;ü, "i*li
i i', ¿lráííí,
@,,y ) d e t
Distancia = \/1xr_fil-r-qf;D
o
class Tricingulo
{ public:
se encuentran los encabezados
,rrrror'f,&'í de los métodos asociados a un tridnguro.
r----- RuToEuRLURc I ÓN q i
Ir
t
de programación orienta-
l. Carac@rtsdcas esenciales de los lenguajes
dos a objetos:
b) EncaPsulamiento
a) Recursividad
d) Todas las anteriores
c) Funcionalidad
e) Ninguna de las anteriores
2.Contesteverdaderoofalso.Unmétodoeslapeticiónquesehacea
comportamiento:
un'objeto para que éste reaccione con cierto
flutoeualuación
."_ t,t,
I -
class Fecha
{ public:
Fecha( );
Fecha(int a, int m, int d); ll inicializa la fecha con valores dados
void despliega ( ); ll despliega en pantalla unafecha
"-o
int cantidad-dias-franscurridos( ): llcalcula cantidad de días transcurridos desde
ltl/t/1900
private:
int Año, Mes, Dia; ];
Fecha fl , fl,(1997, 8, 20);
a) fl
esun objeto de la clase b)Fecha es un objeto de la clase
Fecha f2
e) fl es un método de la clase d)Fecha es un método de la
Fecha clasefl
e)/ es un mensaje de la clase
Fecha
Sogmlrció¡añentada a objetos
a) ft.despliega( );
b) fl,(1997,1,12);
o--"-" c) Fechafl( );
d) fI.mes;
e) cantidad_dias _tra.ns c urrido s (f2, ) ;
a) ningún objeto
b) sólo un objeto
c) dos objetos
d) tres objetos
e) tantos objetos como se requieran
DrtST[Uffi[fl50r
»ITO5
OBJETIVOS
'Entender qué es la representación física de una estructura de datos.
'Describir las características que distinguen a la representación por posiciones,
y ala representación por ligas o encadenamientos.
'Definir qué es un apuntador y cuáles su aplicación en el contexto de un lenguaje
de programación.
'Distinguir la diferencia entre una dirección de memoria física o real y una dirección
lógica o relativa (arreglos).
'Entender cuáles son las diferencias entre el uso de la memoria estática y la memoria
dinámica.
' Comprender las ventajas de utilizar la memoria dinámica en las aplicaciones de
software.
' Conocer las operaciones para crear y liberar espacios de memoria dinámica.
' Aplicar correctamente las reglas para utilizar a la memoria dinámica.
'Aplicar los conceptos de apuntadores y memoria dinámica para trabajar con objetos
dinámicos y objetos con atributos dinámicos.
' Ejemplificar los conceptos con la programación del nivel físico de un TDA utilizando
la programación orientada a objetos y los atributos dinámicos.
Bepresentación de estructuras de datos
pafa una
¿Qué tipos de representaciones ex¡sten
datos?
r.
estructura de
Independientemente de las facilidades de implernentació¡ que oftez,
ür lenguajes de programación, una estructura de datos (TDA) pue{e
"u,
representarse de dos formas:
o***-.--*
I
persa, es decir, dos elementos contiguos
en la estructura"nde datos no
necesariamente deben estár almacenados
físicamente en posiciones
contiguas dentro del espacio de almacenamiento,
como se muestra en
la figtlr.a 3.4.
2
-'o
K+1
¿Qué es un apuntadotQ
Un apuntador se define como un tipo de d,ato capazde almacenar una
dirección de memoria. Se considera como referencia indirecta a un ele-
mento.
Los apuntadores pueden ser un tipo de dato especial dentro del len-
guaje de programación en cuyo caso, guardarán direcciones de memoria
real; o bien, el programador puede simular el funcionamiento de un
Representación de estructuras de datos
n
VABl
:
n+1
ffi
t
:
É
t
i
J
*VAFI2
"*
l4
-l
ffi*ffi¡Hffi
Figura 3.6. Difenencia entre una variable Fadicional VABl y un apuntador VAR2.
¿Pafa
No todos los lenguajes de programaciónpermiJen el uso de apuntadores,
aunque la mayoría 1o hace. Sus principales aplicaciones están relacio-
nadas con el manejo de la memoria dinámica (concepto que se explica-
rá más adelante) y en lenguajes como C y C++; además, se emplean
para permitir el paso de los parámetros por referencia a los módulos.
Is
I
áCómo se utiliza un apuntador en lenguaje C/C++?
tipo_de_dato xnombre-apuntador;
Por ejemplo:
int *p;
char *c;
&Variable.
ii
#
¿Qué es la memoria"dinámica?
.ffi
{
*lti'
,U
"'ll;
ffi Muchoslenguajesdeprogramaciónpermitenmanejardostiposd:d
macenámientodedatosenlamemórianrinciga}:glalmacenamiento
dinámico'
estático lo automático) y el almacenamiento
:
,l:,"
LamemoriaestáticaeslaquesemaneJatradicionalmente.Sus
son:
PrinciPales características
Lamemoriadinámicapermitecrearydestruirespaciosdememona'
la ejecución del
progiamador durante
segrín indicaciones explícitas del
son:
programa' Sus principales características
denominada heap'
' lJttlizauna parte de la memoria principal
'Ñ;;etusoeficientedelamemoriadurantelaejeclción'
que almlce,nel direcciones de memorra
' nlqíit" apuntadores
que éstas se asignart dinámicamente'
,.u1, dudo
zcómo se pueden crear g liberar espacios
de memoria dinámica?
l.Porcadavezqueseejecute|lrlnew,deberáejecutarselufndelete
antes de terminar la ejecución de un
programa'
Lamemoriadinámicanoesglobalnilocal;provienedeun¿írea
dememoria,heap,queadministraelsistemaoperativo.Porlotan-
to, ,i.i"á op"*,ino reserya_los espacios {3 memoria dinámica
"t importar si el
sin
que se solicitan hasta que se indica su liberación,
programa en cuestión terminó o no su ejecución'
2.lJnd.eleteactúaliberandoelespaciodememoriaapuntado,inde.
en el mismo
pendientemente de que existan más apuntadores
espacio.
al terminar su eje-
3. Un apuntador local a un módulo se destruye
hace referencia.
cucián, sin importar a qué espacio de memoria
Elvalornadaesválidoparaunapuntadoryrepresenta''noapun-
taraalgúnelementoenrnemoria.';elva|orbasuraescualquier
zcuáles son las reglas para programar con apuntadores U memoria dinámica?
@ Eiempto
Ejemplo 'ap;
ap = new Ejemplo;
ap = new Ejernplo(argumentos);
de datos
Bepresentación de estructuras
Paraaccesarlosatributosométodospúblicos.deunobjetodinámi-
así sobre el apuntador:
co, el op",uao,^ o" indirección
'" "iirá"'ra el lenguaje provee de
Sin embargo' ó;tcaso'
fap).mensaje'
simplifica esta escritut"" t]":1: equivalente a:
un operador que que se haga
L't op"'uOor -) se puede emplear siempre
ap->mensaie' por medio de un apuntador'
d" J";#; on ou1"to ilil; 1o------"-'-"*:
referencia
p"J;;';"n"' utriUutos dinámicos'
to, objetos
a"*, por otro taáo,f' ¿"
de memoria variables'
que permite
"'"*iO' á"
"bj""t """tputiot
Para este caso, se esperaría
que el
según ru, o"á*1JJ", "¡""*ión.
métodoconstructorhagaelrr.*"o*.pondienteyqueelmétododes- caso' ad-
tiuere tl-ile;;;' d"l to"" delete' En estedefinición
tructor "t'ib;;; destructores en la
de los métodos
quiere
'"'tid;i";;;;;'"ia i
á",,"u clase' i
@ Eiemulo
class EiemPl
{ private: que apuntard a un espacio
dinómico d'e memorru
int *aP; ll atributo
i
que pueden
diferentes combinaciones
Ahora, se ejemplifi catánlas
I
I
y memoria dinámica-
II ocurrir entre memoria estática
t
atributos estáticos'
tr 1. Objetos estáticos con una clase:
¡
que t*""to' la siguiente definición de
$ Supongamos
Ip, class EiemPlo
t
{l
{ public:
i: int ai
.....];
tjemplo
y ge declara'un objeto:
Ejemplo obj;
class Ejemplo
{public:
int xa;
.....];
y se declara un objeto:
Ejemplo obj;
,
obj es un objeto estático con un atributo apuntadol que puede di.
reccionar a uR espacio dinámicor.que si se quiere accesar se harla
con la expresión obj.a y, obviamente, lo único que se puede asig-
nar al apuntador ¿ es una dirección.
una forma de asignar un espacio de memoria dinámico al apun-
tador a sería: obj.a = new int; y la forma de referenciar este espa-
cio dinámico para asignarle ün Valor sería: *(obj.a) = valor; que
es equivalente a *obJ,a = 8; dado que el operador punto (.) tiene
prioridad sobre el operador de indirección (*). -'*-*"a
class Ejemplo
{ pubtic:
int a;
..... J ,
ap->a=valor;
o"-
4. Objetos dinámicos con atributos dinámicos
Finalmente, supongamos que tenemos el caso anterior, pero con un
atributo dinámico:
class Ejemplo
{public:
int *a;
.....];
pero se declara un objeto dinámico a través de un apuntador:
*ap->a=8;
dado que el operador flecha(->) tiene prioridad sobre el
operador de
indirección (*).
,4*G}'t
l, est¿ticos ,\ obj
x I *ffi/
r---r I
\:
\*_-/
Figura 3.7.
x obj
-o
Figura 3.8.
x obi
Figura 3.9.
obj
/;
qfu.
Figura 3fO.
,i
til!
L,
Ejerc¡c¡os
EJERCICI.OS
1. suponga la siguiente definición dé clases y variables en lenguaje
C++:
class Cornplejo
{ public:
Complejo);
Complejo(float x, float y);
float parte_Real0;
void escribe);
void lee);
private:
float real, imaginario; ];
a) escribe(numl);
b) num3.lee\;
c) num2.Complejo( l, j ) ;
d) num3->Complejo;
e) (*num3).Parte_Real0; ' :
a) Comptejo *num\( l, 0) ;
b) Complejo num6=new Complejo (3,1);
c) numl=new Complejo;
d) num3=new Complejo (4,0);
e) Ninguna de las anteriores.
"**--o
3. suponiendo que se pudieran accesar los affibutos privados de
la cla-
se, ¿cuálde las siguientes asignaciones es válida?
a) numl.real = *num3.real;
b) arre g lo - >re al = num3 ->re al ;
c) x numl .real=num2.real
d) arre glo [2 J ->real = ( x num3 ).real ;
e) num3->real = arreglo[5J.real
.:
i
,il
d
i,l Bepresentacién de estructuras de datos
i¡
o
a) if (P == Q) P = new Tipo; b) Q = new Tipo;
elseQ=newTiPo; P =NULL;
cout << *P << *Q; tf (P == Q) P=new Tipo;
else delete Q;
b= &a;
c=new float;
*c = *b;
a= *c +1.5;
cout <<*b <<*c,'
a) 2.0 2.0
b) 3.s 2.0
c) dirección de a y dirección dada en el new.
d) dirección de a y 3.5
e) 3.5 3.5
aprtulo
F-*.-.-
r51fl5 ilr(flDiltflDfl5
.OBJETIVOS
t_
L----LE []!=--* H]-trf-"*[,, Nl
Figura 41.
METER-FINAL* LISTA
ENTRADA: la lista y el nuevo elemento
SALIDA: la lista con el nuevo elemento al final
PRECONDICIÓN: ninguna
POSTCONDICIÓN: la lista contiene al elemento nuevo al final
SACAR-INICIO LISTA
ENTRADA: la lista a la que se va a sacar el elemento
SALIDA: lalista con un elemento menos y, en viejo, el valor que se sacó
PRECONDICION: la lista no está vacía
POSTCONDICION: la lista contiene un elemenro menos (el del inicio)
SACAR_FINAL_LISTA
ENTRADA: la lista de la que se va a sacar el elemento
SALIDA: Ia lista con un elemento menos y. en viejo, el valor que se sacó
PRECONDICIÓN: la lista no está vacía
POSTCONDICIÓN: h lista contiene un elemento menos (el del final)
ffi
SACAR-EN CIAL-LISTA
-ORDEN-ESPE
ENTRADA: la lista de la que se va a sacar el elemento y el elemento que se
desea sacar
la lista con un elemento menos
la lista no estiá vacíay contiene al elemento que se quiere sacar.
la lisla contiene un elemento menos y corresponde al que se sacó
ffi%
'e.,d
I
Listas Encadenadas
Elemento
Lista
LFnB-rut----=---ry*_-gL_-ry
I
6ffi Eiemplo
Ejempla f. Agregar un nodo,innrediatamenté'después' del' nodo
apuntado por P en la lista de'la figura 4.5: i
!ntglo
l
I
I
I
ln
Figura 4.5.
inicio
[ru*
Figura 4.6.
o
--ffiu
Figura.4.7.
(s Eiemplo (continúa)
tntcto
o--
Figura 4.8. I
Eiemplo (continúa)
@
inicio
Figura 4.9.
Nodo *q;
q = inicio;
while (q->sig!=P) /l este ciclo recorre al apuntador q hasta que esté en el nodo
q = q->sig; // anterior al que se deseaborrar
e->sig=p-rtrf ' // esta instrucción "hace el puente"
delete P;
Los casos que hemos analizado representan todas las situaciones tí-
picas con las que se puede enfrentar un programador al trabajar con
una lista; si se comprenden, es fácil extrapolar las situaciones con di-
ferentes variantes.
Í,.1.,
:i
iiú,
!r'-l
¿Gómo es una lista encadenada circular?
li,.,
L
La lista encadenada circular es una ligera variante de la lista encadena-
í1i da lineal; se obtiene al considerar el "primer" nodo de la lista como el zu-
t{
cesor del último nodo, almacenando la dirección del primer elemento en
,t]l el campo de dirección delúltimo, en lugar de almacenar la dirección nu-
i
It, la. Al realizar esta modificación se genera automáticamente un círculo'
donde realmente ya no existe ni el primero ni un último elemento.
Lista
if (inicio != NULL)
{P=inicio;
do
{ cout << P -> info ;
P=P-¡slg,'
] while (P != inicio) )
Observe la importancia de validar el caso extremo de la lista vacía, y
de controlar con un ciclo do...white el desplegado de la información-
iCómo es una lista doblemente encadenada?
Lista
I
V
ffiI ryT--Tq-> ffi*T--TW->W-T-TH
I
" t . {<--t*L__IJ<--fu^I_lJ<--ffi1__ÍJ
P->ant->sig = P->sig;
P->sig->ant = P-)ant;
delete P;
[¡stas Encadenadas
Lista
v
-
ffi-ffi ffi
-T- M
ffi
Figura zlf3. Esquéma de una lista con múltiples
encadenamientos.
EJEBCICIOS
,. ." ."....
Resuelva cada uno de los siguientes ejercicios
sobre listas encadena_
das' considere que cada uno debe prolramarse
como si fuera un mé-
rodo de la crase Lista. para esto, to*.
á;;;;h d"ffi;n
¿" lu.lu_
se Lista explicada previament". t;r-;lb i;ffi.láo,J; ¿..
I. Escriba la implemenración de un método
llamado: MIEMBRO_DE,
el cual recibe un daro y verifique si existe
lu ii.iu. Er'método re_
gresará un I si el elemento se encuentra "n
dentro ¿. u ririu o un 0, en
caso contrario.
Listas Encadenadas
2.Escribalaimplementacióndeunmétodollamado:INDICE'elcual
recibeundatoyregresalaposicióndondeseubicalaprimeraocu-
dío. considere que el primer elemento de la lista
rrencia de dicho
Seencuentraenlaposibión1yasísucesivamente.Encasodefloglll
un 0'
contrarse el dato, el método deberá regresar
3.EscribalaimplementacióndeunmétodollamadoCUENTA-DAIOS,
elcualrecibeundatoygeneracomoresultadolacantidaddeveces
queexisteeldato"ntuti*ta.Elmétodonomodificalalistaysedebe
elementos'
considerar que la lista puede o no tener
4.EscribalaimplementacióndeunmétodollamadoCoPIA,quesirva
pafagener*"o*salidaunacopiadelalista.Elmétodo,alejecu-
para la lista que será una copia'
tarse, debe generar nuevos nodos
5.EscribalaimplementacióndeunmétododenominadoIMPARES,
"q*""ri-inalosnodosqueseencuentrenenposicionesimparesde
al primer elemento' al tercero' al quinto
y
la lista; es decir, borrará
que Ia lista no está vacía'
así sucesivamente. Se puede suponer
MEZCLA listas'
elementos de dos
FUNCIONAMIENTO: une, en fornÍa alterna,'los
ENTRADA: dos listas encadenadas, Ll'Y L2'
la lista L1 contiene los elementos de las dos listas'
SALIDA:
acomodados de manera alterna'
PRECONDICIÓN: las listas existen y no estiín vacías'
la lista L2 queda vacíay la L1 queda con los
elementos
POSTCONDICIÓN:
en forma altema.
T.EscribalaimplementacióndeunmétodollamadoINVIERTE,que
la lista, de tal forma
invertirá el orden original de 1o§ elementos en
primero, el penúltimo será el
ür" "i?frr-" "t"-"ri* será ahora el elúltimo' Considere que la
,"g,rndo,y así hasta que el primero sea
ii;";;" ár,a ru"áy.q,r" no se construiráwanueva, sólo se inverti-
rá el orden de loJ áta'.""ot de la lista original'
SPLIT .: I
,INFO
t1l
fzl
t3l Valor del apuntador
e*enno a la lista=4
l4l
t5l
t6I
17l
tB1
--"-- --o
2. ¿Cuál de los códigos une dos listas encadenadas que ya tienen valores
para forrnar una sola lista? Utilice,la siguiente declaración:
struct Nodo.
xsig;
{ int valor; Nodo };
Nodo *aux,
*listql, *lista2; ll donde listal y lisn2 son apuntctdores al primer nodo de cada lista.
]-*""-
Lista