Está en la página 1de 27

Instituto Politcnico Nacional

Escuela Superior de Ingeniera Mecnica y Elctrica


Unidad Zacatenco
Estructura y Base de
Datos
Prora!" #ic! $ortes %ernnde& #ilia
#IS'(S $I)$U#()ES
*rupo +$,-
PRESENTAN:

Do.ngue& #o&ano )u/n
Brcenas Martne& Bernardo
Martne& $edillo Marco (ntonio
Pgina
1
01NDI$E
Desarrollo del te.a!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+
2peraciones con listas circulares!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,
Inserci3n de una lista 4aca!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!5
Inserci3n de una lista no 4aca!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6
Eli.inaci3n al inicio de una lista!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!7
Mostrar lista!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!88
Destrucci3n de una lista!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!89
0E:e.plos
N;.eros al a&ar!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8+
B;s<ueda!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8=
Inserci3n de un ele.ento al principio de la lista!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9>
Manual 'cnico y de Usuario!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!9+
BIB#I2*)(?1(
Progra.aci3n en $
(utores" #uis @oyanes (guilar y (ndres $astillo San&
Ed! Mc *raA %ill
Pri.era edici3n
(prenda $ en 98 dias
(utor" #ucas SancBe& *arcia
Ed! (dison Censly
'ercera edici3n
Pgina
2
*Desarrollo del Tema
Listas Circulares
#a lista circular es una especie de lista enla&ada si.ple o do/le.ente enla&adaD pero <ue
posee una caracterstica adicional para el despla&a.iento dentro de la listaD sta no
tieneDin!
Para <ue la lista sea sin inD el puntero siguiente del ;lti.o ele.ento apuntar Bacia el
8er ele.ento de la lista en lugar de apuntar al 4alor NU##D co.o Be.os 4isto en el caso
de listas enla&adas si.ples o do/le.ente enla&adas
En las listas circularesD nunca se llega a una posici3n en la <ue ya no sea posi/le
despla&arse!
$uando se llegue al ;lti.o ele.entoD el despla&a.iento 4ol4er a co.en&ar desde el
pri.er ele.ento!
III. La construccin del modelo de un elemento de la lista
Para deinir un ele.ento de la listaD el tipo struct ser utili&ado!
El ele.ento de la lista contendr un ca.po dato y un puntero siguiente!
El puntero siguiente de/e ser del .is.o tipo <ue el ele.entoD en caso contrario no
podr apuntar a ele.ento siguiente!
El puntero siguiente per.itir el acceso Bacia el pr3Ei.o ele.ento!
typede struct Ele.ento#ista F
cBar 0datoG
struct Ele.ento#ista 0siguienteG
HEle.entoG
Pgina
3
Para tener el control de l alista es preeri/le guardar ciertos ele.entos" el pri.er
ele.entoD el ;lti.o ele.entoD el n;.ero de ele.entos!
Para elloD otra estructura ser utili&ada Ino es o/ligatorioD pueden ser utili&adas
4aria/lesJ
typede struct #istaIdentiicar F
Ele.ento 0inicioG
Ele.ento 0inG
int ta.aKoG
H#istaG
El puntero inicio contendr la direcci3n del pri.er ele.ento de la lista!
El puntero in contendr la direcci3n del ulti.o ele.ento de la lista!
#a 4aria/le tamao contiene el n;.ero de ele.entos!
$ual<uiera <ue sea la posici3n en la listaD los punteros inicio y in sie.pre apuntaran
Bacia el 8er y el ;lti.o ele.ento respecti4a.ente!
El ca.po tamao contendr el n;.ero de ele.entos de la lista cual<uiera sea la
operaci3n eectuada so/re la lista!
IV. !eraciones so"re las listas circulares
(! Iniciali&aci3n
#odelo de la $uncin
4oid iniciali&aci3n I#ista 0listaJG
Esta operaci3n de/e ser BecBa antes de cual<uier otra operaci3n so/re la lista!
Iniciali&a el puntero inicio y el puntero in con el puntero NU##D y el ta.aKo con el
4alor >!
La $uncin:
4oid iniciali&aci3n I#ista 0listaJF
listaLMinicio N NU##G
listaLMin N NU##G
ta.aKo N >G
H
Pgina
4
B! Inserci3n de un ele.ento en la lista
( continuaci3n el algorit.o de inserci3n y registro de los ele.entos"
declaraci3n del ele.ento a insertar
asignaci3n de la .e.oria para el nue4o ele.ento
rellenar el contenido del ca.po de datos
actuali&ar los punteros Bacia el 8er y ulti.o ele.ento si es necesario!
o $aso particular" en una lista con un solo ele.entoD el 8er ele.ento es al
.is.o tie.po el ulti.o!
(ctuali&ar el ta.aKo de la lista!
%. Insercin en una lista &ac'a
#odelo de la $uncin:
int insOlistaOcircO4aciaI#ista 0 listaD cBar 0datoJG
#a unci3n de4uel4e L8 en caso de errorD si no de4uel4e >!
Etapas"
asignaci3n de .e.oria para el nue4o ele.ento
rellenar el ca.po de datos del nue4o ele.ento
el puntero siguiente del nue4o ele.ento apuntar Bacia si .is.o Ies la eta!a
(ue &uel&e a la lista circularJ
los punteros inicio y in apuntaran Bacia el nue4o ele.ento
el ta.aKo es actuali&ado
Pgina
5
La $uncin:
P0 inserci3n en una lista 4aca 0P
int insOlistaOcircO4aciaI#ista 0 listaD cBar 0datoJF
Ele.ento 0nue4oOele.entoG
i IInue4oOele.ento N IEle.ento 0J .alloc Isi&eo IEle.entoJJJ
NN NU##J
return L8G
i IInue4oOele.entoLMdato N IcBar 0J .alloc I5> 0 si&eo IcBarJJJ
NN NU##J
return L8G
strcpy Inue4oOele.entoLMdatoD datoJG
nue4oOele.entoLMsiguiente N nue4oOele.entoG
listaLMinicio N nue4oOele.entoG
listaLMin N nue4oOele.entoG
listaLMta.aKoQQG
return >G
H
). Insercin en una lista no &ac'a
#odelo de la $uncin:
int insOlistaOcircI#ista 0 listaD Ele.ento 0actualD cBar 0datoJG
#a unci3n de4uel4e L8 en caso de errorD si no de4uel4e >!
Etapas"
asignaci3n de .e.oria para el nue4o ele.ento
rellenar el ca.po de datos del nue4o ele.ento
el puntero siguiente del nue4o ele.ento apunta Bacia la direcci3n del pri.er
ele.ento Iconser4ar la lista circularJ
el puntero inicio no ca./ia
el puntero in apunta Bacia el nue4o ele.ento
el ta.aKo se incre.enta en una unidad
Pgina
6
La $uncin:
P0 inserci3n en una lista no 4aca 0P
int insOlistaOcircI#ista 0 listaD Ele.ento 0actualD cBar 0datoJF
Ele.ento 0nue4oOele.entoG
i IInue4oOele.ento N IEle.ento 0J .alloc Isi&eo IEle.entoJJJ
NN NU##J
return L8G
i IInue4oOele.entoLMdato N IcBar 0J .alloc I5> 0 si&eo IcBarJJJ
NN NU##J
return L8G
strcpy Inue4oOele.entoLMdatoD datoJG
iIactual RN listaLMinJ
return L8G

nue4oOele.entoLMsiguiente N actualLMsiguienteG
actualLMsiguiente N nue4oOele.entoG
listaLMin N nue4oOele.entoG
listaLMta.aKoQQG
)eturn >G
H
Pgina
7
$! Eli.inaci3n de un ele.ento en la lista
( continuaci3n el algorit.o de eli.inaci3n de un ele.ento de la lista"
uso de un puntero te.poral para guardar la direcci3n de los ele.entos a eli.inar
el ele.ento a eli.inar se encuentra despus del ele.ento actual
%acer apuntar el puntero siguiente del ele.ento actual Bacia la direcci3n del puntero
siguiente del ele.ento a eli.inar
li/erar la .e.oria ocupada por el ele.ento eli.inado
actuali&ar el ta.aKo de la lista
Para eli.inar un ele.ento de la lista Bay 4arias situaciones"
8! Eli.inaci3n dentro de la lista
9! Eli.inaci3n del ;lti.o ele.ento de la lista
%. Eliminacin al inicio de la lista
#odelo de la $uncin:
int supOlistOcircI#ista 0listaJG
#a unci3n de4uel4e L8 en caso de errorD si no de4uel4e >!
Etapas"
el puntero supOele.ento contendr la direcci3n del 8er ele.ento
el puntero inicio apuntara Bacia el 9do ele.ento
el puntero siguiente del ulti.o ele.ento apuntara Bacia el 8er ele.ento I(ue era
el )do antes de la eliminacinJ
el ta.aKo de la lista dis.inuir 8 ele.ento!
Pgina
8
La $uncin:
P0 eli.inaci3n al inicio de la lista 0P
int supOlistaOcircI#ista 0 listaJF
i IlistaLMta.aKo S 9J
return L8G
Ele.ento 0supOele.entG
supOele.ento N listaLMinicioG
listaLMinicio N listaLMinicioLMsiguienteG
listaLMinLMsiguiente N listaLMinicioG
ree IsupOele.entoLMdatoJG
ree IsupOele.entoJG
listaLMta.aKoLLG
return >G
H
). Eliminacin en una lista con un solo elemento
#odelo de la $uncin:
int supOlistOcircOunicaI#ista 0listaJG
Pgina
9
#a unci3n de4uel4e L8 en caso de errorD si no de4uel4e >!
Etapas"
el puntero supOele.ento contendr la direcci3n del ele.ento Ila lista contiene
un solo ele.entoJ
el puntero inicio apuntara Bacia NU##
el puntero in apuntara Bacia NU##
el ta.aKo de la lista dis.inuir un ele.ento!
La $uncin:
P0 eli.inaci3n en una lista con un solo ele.ento0P
int supOlistaOcircOunicaI#ista 0listaJF
i IlistaLMta.aKo RN 8J
return L8G
Ele.ento 0supOele.entoG
supOele.ento N listaLMinicioG
listaLMinicio N NU##G
listaLMin N NU##G
ree IsupOele.entoLMdatoJG
Pgina
10
ree IsupOele.entoJG
listaLMta.aKoLLG
return >G
H
D. #ostrar la lista
Para .ostrar la lista co.pletaD es necesario posicionarse al inicio de la lista Iel puntero
inicio lo per.itirJ! #uegoD utili&ando el puntero siguiente de cada ele.entoD la lista es
recorrida del 8er al ulti.o ele.ento!
En co.paraci3n con las listas si.ples y do/le.ente enla&adasD en el <ue la condici3n
para detenerse esta dada por el puntero siguiente del ulti.o ele.entoD <ue 4ale NU##D
para la lista circularD no Bay punto de detenci3nD a .enos <ue eli:a.os uno!
( continuaci3n dos 4ariantes de 4isuali&aci3n"
Mostrar la lista Idel 8er al ;lti.o ele.entoJ
Mostrar la lista sin una condici3n para detenerse!

%. #ostrar la lista *del %er al +ltimo elemento,


Utili&are.os el ta.aKo de la lista co.o la condici3n para detenerse!
#a unci3n"
P0 .ostrar la lista 0P
4oid .ostrar I#ista 0 listaJF
Ele.ento 0actualG
actual N listaLMinicioG
int iG
orIiN>GiSlistaLMta.aKoGQQiJF
print ITUp L UsVnTD actualD actualLMdatoJG
actual N actualLMsiguienteG
H
H
). #ostrar la lista sin una condicin !ara detenerse *inde$inidamente,
#a unci3n"
P0 recorrer la lista indeinida.ente0P
Pgina
11
4oid .ostrarOindeinida.ente I#ista 0 listaJF
Ele.ento 0actualG
actual N listaLMinicioG
ABile I8JF
print ITUp L UsVnTD actualD actualLMdatoJG
actual N actualLMsiguienteG
H
H
E! Destrucci3n de la lista
Para destruir la lista co.pletaD Be utili&ado al eli.inaci3n al inicio de la lista ya <ue el
ta.aKo es .ayor a 8D luego la eli.inaci3n en una lista con un solo ele.ento!
#a unci3n"
P0 destruir la lista 0P
4oid destruir I#ista 0 listaJF
ABile IlistaLMta.aKo M >JF
i IlistaLMta.aKo M 8J
supOlistaOcirc IlistaJG
else
supOlistaOcircOunicaIlistaJG
H

Pgina
12
*E-em!los
Pro.rama Numeros al A/ar: *e-em!lo%.e0e,
En este progra.a se escri/en las declaraciones y unciones necesarias para tra/a:ar en
una lista circular!
(nlisis del pro/le.a"
El progra.a se estructura de la siguiente or.a"!Pri.era.ente se Bacen las
declaraciones necesarias para tratar la #ista $ircular!El progra.a principal se encarga
de reali&ar las lla.adas correspondientes!-acia#c! Es una unci3n <ue crea una lista
circular 4aca!!Es-acia#c! Es una unci3n <ue da 4erdadero cuando la lista circular esta
4aca!!Nue4oNodo#c! Es una unci3n <ue de4uel4e un puntero a un nue4o nodo en el
<ue se Ba al.acenado el dato E!!Inserta#ista$ircular! )eali&a la inserci3n de una lista
circular del 4alor dato! #o Bace teniendo en cuenta <ue pri.ero es un puntero <ue
apunta al ;lti.o ele.ento <ue se aKadi3 a la lista! #o <ue Bace es insertar un nue4o
nodo en la #ista $ircular co.o ;lti.o ele.entoD para lo cual aparte de reali&ar los
correspondientes enlacesD .ue4e el puntero pri.ero para <ue apunte sie.pre al ;lti.o
ele.ento <ue se aKadi3! De esta or.a el pri.er ele.ento de la lista sie.pre estar en
el nodo Pri.eroLMsig!!*eneraPorEl?inal#c! $rea una lista circular de n;.eros enteros
aleatoriosD reali&ando las inserciones con la unci3n Inserta#ista$ircular!
!Escri/e#ista#c! Se encarga de eli.inar el pri.er nodo de la lista circular <ue co.o
sa/e.os estar sie.pre en Pri.eroLMsig! Solo Bay <ue tener en cuenta <ue si la lista
esta 4aca no se puede /orrar! Si tiene un solo dato la lista se <uedara 4aca y Ba/r <ue
li/erar .e.oria! Si tiene .s de un dato Ba/r <ue .o4er el puntero Pri.eroLMsig a
Pri.eroLMsigLMsigG y li/erar la .e.oria del nodo <ue Be.os puenteado!
!Eli.inar#c! Se encarga de /uscar la pri.era aparici3n de dato y /orrarla de la lista
circular! #o Bace de la siguiente or.a! Si la lista esta 4aca no Bay nada <ue Bacer! En
otro caso con una 4aria/le l3gica enc y con un puntero ptr reali&a la /;s<ueda del datoD
controlando no reali&ar un /ucle ininito! Una 4e& encontrado el ele.ent3 se reali&a el
/orrado teniendo en cuenta" si la lista contiene un solo 4alor se <uedar 4acaG si el nodo
a /orrar por Pri.eroD Ba/r <ue .o4er este punteroG en otro caso no Ba/r <ue .o4erlo!
Sie.pre <ue se /orre un nodo Ba/r <ue puentearlo!
Pgina
13
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MX 100
#include<conio.h>
typedef int Item;
typedef struct NuevoNodo
{
Item el;
struct NuevoNodosi!;
"Nodo#c;
void $%ci%#c&Nodo#c'rimero(;
int )s$%ci%#c&Nodo#c 'rimero(;
Nodo#c NuevoNodo#c&Item *(;
void Insert%#ist%+ircul%r&Nodo#c 'rimero, Item d%tos(;
void -ener%'or)l.in%l#c&Nodo#c 'rimero(;
void )scribe#ist%#c&Nodo#c 'rimero(;
void )limin%r'rimero#c&Nodo#c 'rimero(;
void m%in &void(
{
//clrscr&(;
Nodo#c 'rimero;
-ener%'or)l.in%l#c&0'rimero(;
)scribe#ist%#c&'rimero(;
!etch&(;
Pgina
14
"
void $%ci%#c&Nodo#c'rimero(
{
'rimero1N2##;
"
int )s$%ci%#c&Nodo#c 'rimero(
{
return &'rimero11N2##(;
"
Nodo#cNuevoNodo#c&Item *(
{
Nodo#c nn;
nn1&Nodo#c(m%lloc&si3eof&Nodo#c((;
nn4> el 1 *; nn4> si!1nn;
return nn;
"
void Insert%#ist%+ircul%r &Nodo#c 'rimero,Item d%to(
{
Nodo#c nn;
nn1NuevoNodo#c&d%to(;
if &'rimero51N2##(
{
//nn4>si!1 #c 4>si!;
&'rimero( 4>si!1nn;
"
'rimero 1 nn;
"
Pgina
15
void -ener%'or)l.in%l#c&Nodo#c 'rimero(
{
Item d;
Nodo#c p;
p1N2##; r%ndomi3e&(;
for &d1r%ndom&MX(; d; (
{
Insert%#ist%+ircul%r &0p,d(;
d1 r%ndom &MX(;
"
'rimero1p;
"
void )scribe#ist%#c&Nodo#c 'rimero(
{
Nodo#c ptr;
int 610;
ptr1 'rimero;
if&ptr51N2##(
{
ptr1ptr4>si!;
do
{
677;
if&6810110(
{
printf&9:n9(;
printf&98d9,ptr4>el(;
Pgina
16
"
else
{
printf&9 9(;
printf&98d9,ptr4>el(;
"
ptr1ptr4>si!;
"
;hile &ptr51'rimero4>si!(;
"
"
void )limin%'rimero#c&Nodo#c 'rimero(
{
Nodo#c ptr, p;
ptr1'rimero;
if&ptr51N2##(
{
p1ptr4>si!; //p h%y <ue borr%rlo
if &p11ptr(
'rimero1N2##;
else
ptr4>si!1p4>si!;
free&p(;
"
"
void )limin%r#c &Nodo#c 'rimero,Item d%to(
{
Nodo#c ptr,p;
int enc 1 0;
Pgina
17
ptr 1 'rimero;
if &ptr11N2##(
return;
//bus<ued% mientr%s no encontr%do y no de l% vuelt%
;hile &&ptr4>si!51'rimero(00&5enc((
{
enc1&ptr4>si!4>el11d%to(;
if &5enc(
ptr 1 ptr4>si!;
"enc 1 &ptr4>si!4>el11d%to(; //%<ui se debe encontr%r el d%to
if &enc(
{p1ptr4>si!;
if&'rimero11&'rimero(4>si!( //solo h%y un d%to
'rimero1N2##;
else
{
if &p11'rimero(
'rimero1 ptr;
ptr4>si!1p4>si!;
"
free&p(;
"
E-ecutado
Pgina
18
Pro.rama: 1+s(ueda *lista cir.e0e,
Deinici3n"
#a B;s<ueda su o/:eti4o es encontrar un dato en el arreglo InoD si lo encuentra lo
desplegara en la pantallaD si no lo encuentra no desplegara nada ya <ue el dato no se
encuentra en el arreglo Ino!
Progra.a"
#include <conio.h>
#include <iostre%m.h>
int =us<ued%&int Info>?@,int Indice>?@,int Inicio,int Aisp,int
)lemento(;
void m%in&(
{
int Info>?@1{0,10,0,B,C,D,0,E0";
int Indice>?@1{C,F,G,1,0,D,4BBB,H";
int Inicio10,Aisp1E,)lemento,Ies;
cout<<9Jue Numero dese%s busc%rK9;
cin>>)lemento;
Ies1=us<ued%&Info,Indice,Inicio,Aisp,)lemento(;
if&Ies114BBB(
cout<<9A%to No )ncontr%do...9;
!etch&(;
"
int =us<ued%&int Info>?@,int Indice>?@,int Inicio,int Aisp,int
)lemento(
{
int Lpunt%dor1Indice>Inicio@;
;hile&Lpunt%dor51Inicio(
Pgina
19
{
if&)lemento11Info>Lpunt%dor@(
{
cout<<9Numero 9<<Info>Lpunt%dor@<<9 encontr%do...9;
return Lpunt%dor;
"
Lpunt%dor1Indice>Lpunt%dor@;
"
return Lpunt%dor;
"
*Insercin de un elemento *numero, al Princi!io *nodo.e0e,
Deinici3n"
#a Inserci3n al Principio /sica.ente /usca si eEiste alg;n lugar disponi/le en el
arreglo Ino y lo agrega co.o pri.er Nodo si es <ue es posi/le!
Pgina
20
Progra.a"
#include <conio.h>
#include <iostre%m.h>
void Iecorrido&int Info>?@,int Indice>?@,int Inicio,int Aisp(;
void Ins'r&int Info>?@,int Indice>?@,int Inicio,int Aisp,int
)lemento(;
void m%in&(
{
int Info>?@1{0,10,0,B,C,D,0,E0";
int Indice>?@1{C,F,G,1,0,D,4BBB,H";
int Inicio10,Aisp1E,)lemento,Ies;
cout<<9#ist% Mri!in%l:n9;
Iecorrido&Info,Indice,Inicio,Aisp(;
cout<<9Jue Numero dese%s Insert%rK9;
cin>>)lemento;
Ins'r&Info,Indice,Inicio,Aisp,)lemento(;
!etch&(;
"
void Iecorrido&int Info>?@,int Indice>?@,int Inicio,int Aisp(
{int Lpunt%dor1Indice>Inicio@;
;hile&Lpunt%dor51Inicio(
{
cout<<Info>Lpunt%dor@<<endl;
Lpunt%dor1Indice>Lpunt%dor@;
"
"
void Ins'r&int Info>?@,int Indice>?@,int Inicio,int Aisp,int
)lemento(
Pgina
21
{
if&Aisp514BBB(
{
int Lpunt%dor1Aisp;
Aisp1Indice>Aisp@;
Info>Lpunt%dor@1)lemento;
Indice>Lpunt%dor@1Indice>Inicio@;
Indice>Inicio@1Lpunt%dor;
Iecorrido&Info,Indice,Inicio,Aisp(;
"
else
cout<<9Mverflo;...9;
"
Pgina
22
*#anual T2cnico 3 de 4suario
*Insercin de un elemento *numero, al Princi!io
Deinici3n"
#a Inserci3n al Principio /sica.ente /usca si eEiste alg;n lugar disponi/le en el
arreglo Ino y lo agrega co.o pri.er Nodo si es <ue es posi/le!
Detalle"
%ace una co.paraci3n para 4er si es posi/le insertar otro Ele.ento al arreglo InoD para
esto cBeca si Disp es Dierente de Nulo! Si no cu.ple con la condici3n se desplegar
So/re $arga ya <ue no se puede insertar un Nue4o Ele.ento! Si es cierto (puntador
to.a el 4alor de InicioD Disp ca./ia a IndiceWDispX ya <ue el pri.er Disp to.ara el
4alor del Nue4o Ele.entoD despus de esto solo copia la inor.aci3n de Ele.ento al
arreglo Ino en la posici3n <ue guarda (puntadorD IndiceW(puntadorX to.a el 4alor de
IndiceWInicioX y inal.ente IndiceWInicioX to.a el 4alor de (puntador!
Al.oritmo:
InsPrIInicioD DispD InoD IndiceD Ele.entoJ
Si Disp Y Nill entonces"
(puntador Z Disp
Disp Z IndiceWDispX
InoW(puntadorX Z Ele.ento
IndiceW(puntadorX Z IndiceWInicioX
IndiceWInicioX Z (puntador
Si no" I.pri.ir So/re $arga
Salir
Diagra.a"
Progra.a"
Pgina
23
#include <conio.h>
#include <iostre%m.h>
void Iecorrido&int Info>?@,int Indice>?@,int Inicio,int Aisp(;
void Ins'r&int Info>?@,int Indice>?@,int Inicio,int Aisp,int
)lemento(;
void m%in&(
{
int Info>?@1{0,10,0,B,C,D,0,E0";
int Indice>?@1{C,F,G,1,0,D,4BBB,H";
int Inicio10,Aisp1E,)lemento,Ies;
cout<<9#ist% Mri!in%l:n9;
Iecorrido&Info,Indice,Inicio,Aisp(;
cout<<9Jue Numero dese%s Insert%rK9;
cin>>)lemento;
Ins'r&Info,Indice,Inicio,Aisp,)lemento(;
!etch&(;
"
void Iecorrido&int Info>?@,int Indice>?@,int Inicio,int Aisp(
{
int Lpunt%dor1Indice>Inicio@;
;hile&Lpunt%dor51Inicio(
{
cout<<Info>Lpunt%dor@<<endl;
Lpunt%dor1Indice>Lpunt%dor@;
"
"
void Ins'r&int Info>?@,int Indice>?@,int Inicio,int Aisp,int )lemento(
{if&Aisp514BBB(
{
int Lpunt%dor1Aisp;
Aisp1Indice>Aisp@;
Pgina
24
Info>Lpunt%dor@1)lemento;
Indice>Lpunt%dor@1Indice>Inicio@;
Indice>Inicio@1Lpunt%dor;
Iecorrido&Info,Indice,Inicio,Aisp(;
"
else
cout<<9Mverflo;...9;
"
Pro.rama: 1+s(ueda
Pgina
25
Deinici3n"
#a B;s<ueda su o/:eti4o es encontrar un dato en el arreglo InoD si lo encuentra lo
desplegara en la pantallaD si no lo encuentra no desplegara nada ya <ue el dato no se
encuentra en el arreglo Ino!
Detalle"
(puntador to.a el 4alor de InicioD despus 4e si la condici3n cu.ple para eectuar un
$iclo .ientras (puntador sea dierente de >D si cu.ple lo <ue Bace a continuaci3n es la
co.paraci3n de Ele.ento IEl dato <ue 4a.os a /uscarJ con InoW(puntadorXD cuando lo
encuentre lo despliega y sale del .todo! Si noD regresa el 4alor de (puntador para as
sa/er <ue no se encontr3 el dato!
(lgorit.o"
)ecorridoIInicioD InoD IndiceD Ele.entoJ
(puntador Z IndiceWInicioX
)epetir .ientras (puntador Y Inicio
Si Ele.ento N InoW(puntadorX entonces"
I.pri.ir InoW(puntadorX
)egresa (puntador
(puntador Z IndiceW(puntadorX
?in del ciclo
)egresar (puntador
Diagra.a"
Progra.a"
#include <conio.h>
Pgina
26
#include <iostre%m.h>
int =us<ued%&int Info>?@,int Indice>?@,int Inicio,int Aisp,int
)lemento(;
void m%in&(
{
int Info>?@1{0,10,0,B,C,D,0,E0";
int Indice>?@1{C,F,G,1,0,D,4BBB,H";
int Inicio10,Aisp1E,)lemento,Ies;
cout<<9Jue Numero dese%s busc%rK9;
cin>>)lemento;
Ies1=us<ued%&Info,Indice,Inicio,Aisp,)lemento(;
if&Ies114BBB(
cout<<9A%to No )ncontr%do...9;
!etch&(;
"
int =us<ued%&int Info>?@,int Indice>?@,int Inicio,int Aisp,int
)lemento(
{
int Lpunt%dor1Indice>Inicio@;
;hile&Lpunt%dor51Inicio(
{
if&)lemento11Info>Lpunt%dor@(
{
cout<<9Numero 9<<Info>Lpunt%dor@<<9 encontr%do...9;
return Lpunt%dor;
"
Lpunt%dor1Indice>Lpunt%dor@;
"
return Lpunt%dor;
"
Pgina
27