Jueves 14 de Noviembre de 2024, 04:39
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
lista circular simple :3
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: lista circular simple :3 (Leído 7441 veces)
yuikoheartless
Nuevo Miembro
Mensajes: 2
lista circular simple :3
«
en:
Lunes 20 de Junio de 2011, 05:35 »
0
Hola a todos, bueno he leido el foro y me gustado bastante, este semestre estoy aprendiendo c++ y tengo que hacer una lista en c++ con punteros,la funcion de ingreso esta lista, tengo el algoritmo de eliminacion pero aun no implementado y mi problema esta en la funcion mostrar (imprimir el contenido de la lista) segun mi logica deberia recorrer el puntero y mostrar el contenido hasta que llegue al ultimo pero bueno mi logica falla a veces
en mi DA deje una imagen con la logica de los punteros aux y recorre, pero aun no puedo dejar enlaces
http//yuikoheartless.deviantart.com/gallery/#/d3jdlha
aqui el codigo :
Código: C++
#include <cstdlib>
#include <iostream>
//LISTA CIRCULAR
using
namespace
std
;
struct
listac
{
int
valor
;
listac
*
sgte
;
}
;
bool
vacia
(
listac
*
inicio
)
{
bool
v
=
false
;
if
(
inicio
==
NULL
)
v
=
true
;
return
v
;
}
void
ingresar
(
listac
*
&
inicio,listac
*
&
ultimo
)
{
cout
<<
"Ingrese un numero: "
;
int
numero
;
listac
*
p
;
p
=
new
listac
;
cin
>>
p
-
>
valor
;
cout
<<
endl
;
if
(
vacia
(
inicio
)
==
true
)
{
inicio
=
p
;
ultimo
=
p
;
}
else
{
inicio
-
>
sgte
=
p
;
p
-
>
sgte
=
inicio
;
ultimo
=
p
;
}
}
void
mostrar
(
listac
*
inicio,listac
*
ultimo
)
{
listac
*
recorre ,
*
aux
;
recorre
=
inicio
;
aux
=
recorre
-
>
sgte
;
if
(
aux
-
>
sgte
!
=
inicio
)
{
aux
=
recorre
-
>
sgte
;
cout
<<
recorre
-
>
valor
<<
" "
;
recorre
=
aux
;
}
}
int
main
(
int
argc,
char
*
argv
[
]
)
{
listac
*
inicio,
*
ultimo
;
inicio
=
ultimo
=
NULL
;
for
(
int
i
=
1
;
i
<=
5
;
i
++
)
{
ingresar
(
inicio,ultimo
)
;
}
mostrar
(
inicio,ultimo
)
;
system
(
"PAUSE"
)
;
return
EXIT_SUCCESS
;
}
Desde entonces muchas gracias
Tweet
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
Re: lista circular simple :3
«
Respuesta #1 en:
Lunes 20 de Junio de 2011, 06:57 »
0
Hola yuikoheartless, bueno, revise tu programa de manera rapida (aqui en mexico son las 11:30 pm, ya casi es hora de irme a dormir
), y me parece que no lo estas haciendo de manera correcta. Yo diria que solo necesitas el apuntador del inicio de la lista circular, y no dos como estas manejando, (uno para el inicio y uno para el final), el apuntador al inicio es solo para tener un elemento desde donde poder comenzar a imprimir la lista, y saber donde detenernos pero bueno, como dije antes ya es tarde y no tengo mucho tiempo para revisar todo el programa.
En fin ya que dices que solo te falla el algoritmo mostrar, dire que te falta utilizar un ciclo para recorrer la lista, en tu funcion mostrar solo tienes un if, asi que por eso no puedes imprimir toda la lista. A continuacion te dejo la funcion de mostrar como pienso que deberia ser.
Ademas, al final te dejo 2 enlaces a la teoria de listas enlazadas y circulares, uno en ingles y el otro en español, esto para que le des una leida y te des una mejor idea de como debes implementarlo.
Código: C++
void
mostrar
(
listac
*
inicio
)
{
listac
*
recorre
;
if
(
inicio
!
=
NULL
)
{
recorre
=
inicio
;
do
{
cout
<<
recorre
-
>
valor
<<
" "
<<
endl
;
recorre
=
recorre
-
>
sgte
;
}
while
(
recorre
!
=
inicio
)
;
}
}
http://en.wikipedia.org/wiki/Linked_list
http://c.conclase.net/edd/index.php?cap=004#inicio
Saludos y suerte
NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================
yuikoheartless
Nuevo Miembro
Mensajes: 2
Re: lista circular simple :3
«
Respuesta #2 en:
Martes 21 de Junio de 2011, 05:02 »
0
Profesor X, muchas gracias por el codigo ^^
lo extraño es que lo compile y ejecute, y hace lo mismo que el mio, solo muestra el 1 y el ultimo elemento ingresado
saludos y grax ^^
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
Re: lista circular simple :3
«
Respuesta #3 en:
Martes 21 de Junio de 2011, 07:16 »
0
Cita de: "yuikoheartless"
lo extraño es que lo compile y ejecute, y hace lo mismo que el mio
Ayer te comentaba que al parecer no lo estabas haciendo de manera correcta, ya que no tuve tiempo de revisarlo todo, hasta te dije que no necesitas el apuntador al ultimo, y ademas te deje enlaces para que los revisaras por ti mismo, pero al parecer hiciste caso omiso, si los hubieras revisado, hubieras comprobado que si, la insercion la haces mal, y al hacer la insercion mal, mostrara los datos mal.
Como consejo, debes ser un poco mas autodidacta, y si alguien te deja enlaces, revisalos, no solo esperes que te hagan el trabajo, no siempre habra gente que haga las cosas por ti.
Dicho eso, te dejo el codigo corregido como deberia ser, revisalo y analizalo. Espero que la siguiente vez si alguien te deja enlaces para leer, lo hagas y puedas corregir los errores por ti mismo.
Saludos
Código: C++
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <iostream>
//LISTA CIRCULAR
using
namespace
std
;
struct
listac
{
int
valor
;
listac
*
sgte
;
}
;
bool
vacia
(
listac
*
inicio
)
{
bool
v
=
false
;
if
(
inicio
==
NULL
)
v
=
true
;
return
v
;
}
void
ingresar
(
listac
**
inicio
)
{
cout
<<
"Ingrese un numero: "
;
listac
*
p
;
p
=
new
listac
;
cin
>>
p
-
>
valor
;
cout
<<
endl
;
if
(
vacia
(
*
inicio
)
==
true
)
{
*
inicio
=
p
;
}
else
{
p
-
>
sgte
=
(
*
inicio
)
-
>
sgte
;
}
(
*
inicio
)
-
>
sgte
=
p
;
}
void
mostrar
(
listac
*
inicio
)
{
listac
*
recorre
;
if
(
inicio
!
=
NULL
)
{
recorre
=
inicio
;
do
{
cout
<<
recorre
-
>
valor
<<
" "
<<
endl
;
recorre
=
recorre
-
>
sgte
;
}
while
(
recorre
!
=
inicio
)
;
}
}
int
main
(
int
argc,
char
*
argv
[
]
)
{
listac
*
inicio
;
inicio
=
NULL
;
for
(
int
i
=
1
;
i
<=
5
;
i
++
)
{
ingresar
(
&
inicio
)
;
}
mostrar
(
inicio
)
;
system
(
"PAUSE"
)
;
return
EXIT_SUCCESS
;
}
NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
lista circular simple :3