elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Lista circular simple de enteros con 1 puntero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Lista circular simple de enteros con 1 puntero  (Leído 1,890 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Lista circular simple de enteros con 1 puntero
« en: 29 Septiembre 2018, 04:32 am »

Hola quiero hacer un procedimiento recursivo que me cuente los valores negativos de una lista circular simple con un puntero, alguien me ayuda?

Código
  1. void contar_negativos(pnodo lista, int &n)
  2. {
  3. if(lista->sig!=lista){
  4. if(lista->dato<0){
  5. n++;
  6. }
  7. contar_negativos(lista->sig,n);
  8. }
  9. }


En línea

7w7
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Lista circular simple de enteros con 1 puntero
« Respuesta #1 en: 29 Septiembre 2018, 15:57 pm »

De entrada llevas chorrocientos hilos-mensajes dando vueltas a las listas. No es el procemiento adecuado para aprender inventarse un problema, quedar atascado y tener que preguntar para salir del escollo una y otras vez hasta las chorrocientas que llevas...

Tómate un libro o la misma wikipedia y antes de nada más, estudia, estudia y estudia. De modo que cuando te pongas a hacer cosas, sean simples detalles los que falles o no entiendas y además relacionados de verdad con listas.

...y digo relacionado, porque carece absolutamente de interés ninguno, tener una lista circular y pretender recorrerla de modo recursivo (y encima para... no importa qué...). Es un atropello a la programación. Es como tener un bicicleta y pretender intercambiar el sillín con el manillar para conducirla así... para qué????, es perder el tiempo en cosas inútiles. Gasta tu tiempo con cosas útiles...

Lo interesante de una lista es que tiene punteros Siguiente (y Anterior si se precisa), que facilitan su recorrido y adicionalmente u opcionalmente, un ítem Actual (con su posición y cuenta total de ítems), que facilita determinar si es más rápido acceder desde el actual desde el último o desde el primero (cuando se reclama un índice).... ...entonces si una lista ya proporciona métodos específicos para el recorrido de la lista, es absurdo pretender usar recorridos no naturales (subóptimos), de recorrido, solo porque sí...

Si ya sabes crear listas, recorrerlas, buscar ítems, añadir, eliminar, unir listas, disgregar elementos de una lista a otra, etc... entonces ya sabes lo fundamental de las listas, pasa a otra cosa, avanza... no te enfangues en cosas absurdas que no tienen sentido de ser. Aprende cosas que no sepas, pero útiles.


En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Lista circular simple de enteros con 1 puntero
« Respuesta #2 en: 29 Septiembre 2018, 19:04 pm »

Que malo q eres
En línea

7w7
Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Lista circular simple de enteros con 1 puntero
« Respuesta #3 en: 29 Septiembre 2018, 21:46 pm »

Perdona. No intento ofenderte, intento que veas la luz...

Si ya dominas más o menos las listas y supongo que las pilas, colas y arrays, ahora salta a los árboles... ahí, hay recorridos distintos y muy interesantes, pero útiles al fin y al cabo.
En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Lista circular simple de enteros con 1 puntero
« Respuesta #4 en: 29 Septiembre 2018, 22:14 pm »

Si gracias, esta bien, lo que pasa es que me gusta la recursividad y queria resolver ese problema,  por cierto domino arreglos, registros, listas y pilas,  y ahora estoy aprendiendo archivos , lo que le sigue son colas, arboles y grafos, despues de eso no se que sigue, pero planeo empezar la programacion orientada a objetos  :(
En línea

7w7
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Lista circular simple de enteros con 1 puntero
« Respuesta #5 en: 29 Septiembre 2018, 23:43 pm »

Debes saber que los métodos recursivos gastan mas memoria que los iterativos. Cada vez que se llama la función recursiva crea un marco en el stack. Cuánta más veces se repita y cuántas más variables locales use más rápido llenará la memoria del programa.
Por esta razón una función recursiva es mas lenta ya que debe generar todo el marco, cambiar los registros del procesador para que apunten a la nueva memoria, copiar los datos de los argumentos de la función, ejecutar una instrucción de salto (que en el peor de los casos, si el predictor del procesador ha fallado, debe cargar de nuevo el IP y saltar a esa instrucción; es el doble de lento). De igual forma cuándo la función termina se debe limpiar la pila y saltar a la instrucción que hay después de la llamada.

Con métodos iterativos todo esto te lo saltar y sólo suele haber una instrucción de comparación y otra de salto.

Por tanto sólo se deben usar métodos recursivos cuando haya una clara ventaja de éstos sobre los iterativos.
En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Lista circular simple de enteros con 1 puntero
« Respuesta #6 en: 6 Octubre 2018, 08:29 am »

Pensando un poco lo pude resolver olvide poner la estructura de datos que tenia el programa.

Código
  1. typedef struct tnodo *pnodo;
  2. typedef struct tnodo{
  3. int dato;
  4. pnodo sig;
  5. };
  6. typedef struct tlista{
  7. pnodo inicio;
  8. int contador;
  9. };
  10.  
  11. void contar_negativos(pnodo nodo, tlista lista, int &n)
  12. {
  13. pnodo i=nodo;
  14. if(lista.contador!=0){
  15. if(i->dato<0){
  16. n++;
  17. }
  18. lista.contador--;
  19. contar_negativos(i->sig,lista,n);
  20. }
  21. }
  ;-)
En línea

7w7
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda en nodo de lista circular
Java
apolo85 3 4,988 Último mensaje 28 Noviembre 2009, 03:57 am
por egyware
una lista circular en c#
.NET (C#, VB.NET, ASP)
Fingerling 2 12,989 Último mensaje 24 Septiembre 2010, 17:23 pm
por -=[ §ÂßÂÑÐØ ]=-
lista circular (ingresando datos)
.NET (C#, VB.NET, ASP)
Micah Genji 4 5,640 Último mensaje 15 Noviembre 2010, 05:14 am
por Micah Genji
Lista circular simple (LCS)
Programación C/C++
Cpp 1 2,138 Último mensaje 11 Diciembre 2014, 01:50 am
por engel lex
[C] Ayuda: introducir enteros y devolverlos como puntero
Programación C/C++
andie13 4 2,117 Último mensaje 27 Noviembre 2016, 00:20 am
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines