Autor
|
Tema: Lista circular simple de enteros con 1 puntero (Leído 1,905 veces)
|
Beginner Web
Desconectado
Mensajes: 634
youtu.be/0YhflLRE-DA
|
Hola quiero hacer un procedimiento recursivo que me cuente los valores negativos de una lista circular simple con un puntero, alguien me ayuda? void contar_negativos(pnodo lista, int &n) { if(lista->sig!=lista){ if(lista->dato<0){ n++; } contar_negativos(lista->sig,n); } }
|
|
|
En línea
|
7w7
|
|
|
Serapis
|
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
Mensajes: 634
youtu.be/0YhflLRE-DA
|
Que malo q eres
|
|
|
En línea
|
7w7
|
|
|
Serapis
|
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
Mensajes: 634
youtu.be/0YhflLRE-DA
|
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
Mensajes: 1.603
|
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
Mensajes: 634
youtu.be/0YhflLRE-DA
|
Pensando un poco lo pude resolver olvide poner la estructura de datos que tenia el programa. typedef struct tnodo *pnodo; typedef struct tnodo{ int dato; pnodo sig; }; typedef struct tlista{ pnodo inicio; int contador; }; void contar_negativos(pnodo nodo, tlista lista, int &n) { pnodo i=nodo; if(lista.contador!=0){ if(i->dato<0){ n++; } lista.contador--; contar_negativos(i->sig,lista,n); } }
|
|
|
En línea
|
7w7
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ayuda en nodo de lista circular
Java
|
apolo85
|
3
|
5,007
|
28 Noviembre 2009, 03:57 am
por egyware
|
|
|
una lista circular en c#
.NET (C#, VB.NET, ASP)
|
Fingerling
|
2
|
13,014
|
24 Septiembre 2010, 17:23 pm
por -=[ §ÂßÂÑÐØ ]=-
|
|
|
lista circular (ingresando datos)
.NET (C#, VB.NET, ASP)
|
Micah Genji
|
4
|
5,654
|
15 Noviembre 2010, 05:14 am
por Micah Genji
|
|
|
Lista circular simple (LCS)
Programación C/C++
|
Cpp
|
1
|
2,154
|
11 Diciembre 2014, 01:50 am
por engel lex
|
|
|
[C] Ayuda: introducir enteros y devolverlos como puntero
Programación C/C++
|
andie13
|
4
|
2,131
|
27 Noviembre 2016, 00:20 am
por MAFUS
|
|