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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Invertir Secuencia dinámica manteniendo el punto de interes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Invertir Secuencia dinámica manteniendo el punto de interes  (Leído 1,368 veces)
alvareteb

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Invertir Secuencia dinámica manteniendo el punto de interes
« en: 28 Junio 2012, 12:32 pm »

Hola a todos.
Estoy haciendo un ejercicio en el que tengo que invertir una secuencia dinámica en c++.
Tengo que realizar este ejercicio para la universidad y tal como lo tengo hecho se me crea un bucle infinito al tratar de sacar los valores por pantalla despues de invertir. ¿Alguien me puede echar una mano?

Este es el código de mi función invertir:

Código
  1. template <class TElem>
  2. void CSecuencia<TElem>::invertir(){
  3. invertirAux(0, _pri->sig());
  4. };
  5. template <class TElem>
  6. void CSecuencia<TElem>::invertirAux(CNodoSecuencia<TElem> *act, CNodoSecuencia<TElem>*anterior){
  7. if (act==0)
  8. //caso base
  9. if (_ant->sig()==0){
  10. _ant=_pri->sig();
  11. _pri->_sig=anterior;
  12. anterior->_sig=_pri;
  13. }
  14. else {
  15. _pri->_sig=anterior;
  16. anterior->_sig=_pri;
  17. _ant=_ant->sig()->sig();//Para mantener el punto de interes
  18. }
  19. //fin caso base
  20. else if (act!=0){
  21. invertirAux(act, act->sig());
  22. act->_sig=_ant;
  23. }
  24.  
  25. };

Y esta es la definición de la secuencia (Está todo bien implementado menos el invertir):
Código
  1. class CSecuencia {
  2. public:
  3. CSecuencia ();
  4. CSecuencia(const CSecuencia<TElem> &other) {copia(other);};
  5. /*Constructor de copia de la secuencia; debe tener cuidado con la compartición de memoria, es decir, debe hacer una copia completa.
  6. Parámetros:
  7. other Objeto a copiar.
  8. */
  9. ~CSecuencia() {libera();};
  10. CSecuencia<TElem>& operator= (const CSecuencia<TElem> &rhs);
  11. /*Operador de asignación sobre secuencias; se preocupa de duplicar la estructura de la secuencia para que no exista compartición de memoria.
  12. Parámetros:
  13. rhs Secuencia a copiar.
  14. Devuelve:
  15. Una referencia a la nueva secuencia.*/
  16. void inserta(const TElem &e);
  17. /*Inserta un nuevo elemento en la secuencia, justo delante del punto de interés.
  18. Parámetros:
  19. e Elemento a añadir.
  20. */
  21. void borra();
  22. /*Elimina el elemento apuntado por el punto de interés.
  23. Excepciones:
  24. EAccesoIndebido si el punto de interés está al final, fuera de la secuencia.
  25. */
  26. const TElem& actual() const;
  27. /*Devuelve el elemento apuntado por el punto de interés.
  28. Devuelve:
  29. Elemento almacenado.
  30. Excepciones:
  31. EAccesoIndebido si el punto de interés está al final, fuera de la secuencia.*/
  32. void avanza();
  33. /*Avanza una posición el punto de interés.
  34. Excepciones:
  35. EAccesoIndebido si el punto de interés está al final, fuera de la secuencia, es decir, si esFin() == true.
  36. Ver también:
  37. CSecuencia::esFin().
  38. */
  39. void reinicia();
  40. /*Coloca el punto de interés al principio de la secuencia.*/
  41. bool esFin() const;
  42. /*Sirve para averiguar si el recorrido de la secuencia ha terminado, es decir, si el punto de interés ya no apunta a un elemento válido de la secuencia.
  43. Devuelve:
  44. true si el punto de interés está al final del recorrido.*/
  45. bool esVacio() const;
  46. /*Sirve para averiguar si la secuencia no tiene elementos.
  47. Devuelve:
  48. true si la secuencia está vacía.*/
  49. int numElems() const;
  50. /*Devuelve el número de elementos que tiene la secuencia.
  51. Esta operación debe tener coste constante (O(1)).
  52. Devuelve:
  53. Número de elementos dentro de la secuencia.*/
  54. void invertir();
  55. void invertirAux(CNodoSecuencia<TElem> *act, CNodoSecuencia<TElem>*anterior);
  56. private:
  57. CNodoSecuencia<TElem> *_pri, *_ant;
  58. int _longitud;
  59. void libera();
  60. void copia(const CSecuencia<TElem>& secuencia);
  61. };
  62.  
  63. template <class TElem>
  64. class CNodoSecuencia {
  65. friend CSecuencia<TElem>;
  66. public:
  67. const TElem& elem() const;
  68. CNodoSecuencia<TElem>* sig() const;
  69. private:
  70. TElem _elem;
  71. CNodoSecuencia<TElem>* _sig;
  72. CNodoSecuencia();
  73. CNodoSecuencia(const TElem&, CNodoSecuencia<TElem>* = 0);
  74. };
  75.  


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines