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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Necesito ayuda con una función de listas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda con una función de listas  (Leído 1,755 veces)
LonleyGirl503

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Necesito ayuda con una función de listas
« en: 1 Agosto 2016, 04:56 am »

Hola a todos, tengo este código

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. class nodo {
  6.  
  7. private:
  8. int valor;
  9. nodo *siguiente;
  10. friend class lista;
  11.  
  12. public:
  13. nodo(int v, nodo *sig = NULL)
  14. {
  15. valor = v;
  16. siguiente = sig;
  17. }
  18. };
  19.  
  20. typedef nodo *pnodo;
  21.  
  22. class lista {
  23.  
  24. private:
  25. pnodo primero;
  26. pnodo actual;
  27.  
  28. public:
  29.  
  30. lista() {
  31. primero = NULL;
  32. actual = NULL;
  33. }
  34.  
  35. ~lista();
  36.  
  37. void Insertar(int v);
  38.  
  39. void Borrar(int v);
  40.  
  41. void Prom(int p);
  42.  
  43. bool ListaVacia() {
  44. return primero == NULL;
  45. }
  46.  
  47. void Primero() { actual = primero; }
  48.  
  49. void Mostrar();
  50.  
  51.  
  52. };
  53.  
  54.  
  55. lista::~lista() {
  56. pnodo aux;
  57.  
  58. while(primero) {
  59. aux = primero;
  60. primero = primero->siguiente;
  61. delete aux;
  62. }
  63. actual = NULL;
  64. }
  65.  
  66. void lista::Insertar(int v) {
  67. pnodo anterior;
  68.  
  69. if(ListaVacia() || primero->valor > v) {
  70. primero = new nodo(v, primero);
  71. }
  72. else {
  73. anterior = primero;
  74.  
  75. while(anterior->siguiente && anterior->siguiente->valor <= v)
  76. anterior = anterior->siguiente;
  77.  
  78. anterior->siguiente = new nodo(v, anterior->siguiente);
  79. }
  80. }
  81.  
  82. void lista::Borrar(int v) {
  83. pnodo anterior, nodo;
  84.  
  85. nodo = primero;
  86. anterior = NULL;
  87. while(nodo && nodo->valor < v) {
  88. anterior = nodo;
  89. nodo = nodo->siguiente;
  90. }
  91. // Borrar el nodo
  92. if(!anterior) // Primer elemento
  93. primero = nodo->siguiente;
  94. else // un elemento cualquiera
  95. anterior->siguiente = nodo->siguiente;
  96. delete nodo;
  97. }
  98.  
  99.  
  100.  
  101. void lista::Mostrar() {
  102. nodo *aux;
  103. aux = primero;
  104. while(aux) {
  105. cout << aux->valor <<" ";
  106. aux = aux->siguiente;
  107. }
  108. cout<<endl;
  109. }
  110.  
  111.  
  112. int main() {
  113. lista Lista;
  114. int A;
  115.    short Q, Q1, c=0;
  116.  
  117. cin>>A>>Q;
  118. Lista.Insertar(A);
  119. Q1=Q;
  120.  
  121.  
  122. for(int cont=0; cont<Q1; cont++)
  123. {
  124. cin>>Q;
  125.        switch(Q)
  126.        {
  127.            case 1:
  128. cout<<endl;
  129.            break;
  130.  
  131.            case 2:
  132. //insertar
  133. cin>>A;
  134. Lista.Insertar(A);
  135. cin>>A;
  136. Lista.Insertar(A);
  137.            break;
  138.  
  139.            case 3:
  140. //Mostrar toda la lista
  141.             Lista.Mostrar();
  142.            break;
  143.  
  144.            case 4:
  145. //eliminar
  146. cin>>A;
  147. Lista.Borrar(A);
  148. cin>>A;
  149. Lista.Borrar(A);
  150.            break;
  151.  
  152.        }
  153.    }
  154.  
  155. return 0;
  156. }

Es un ejercicio básico de listas, allí agrega de forma ascendente, elimina y muestra la lista. Ahora en el switch en el caso 1 el programa debe mostrar la posicion del medio de la lista, o "posicion promedio" y esa es la funcion que no se como implementar. Si pudieran ayudarme o darme ideas se los agradeceria mucho


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Necesito ayuda con una función de listas
« Respuesta #1 en: 1 Agosto 2016, 09:30 am »

¡Buenas!

No se si se refiere a imprimir el valor del nodo que ocupa el punto medio en la lista (mediana) o a imprimir la media de los valores.

En ambos casos deberías de saber cuántos elementos hay en la lista.

Una vez sabiendo lo anterior, si lo que tienes que imprimir es la media también deberás saber cual es la suma de todos los elementos que has insertado, y si lo que te hace falta es imprimir el valor del nodo que está en el punto medio tendrás que hacer una función que sabiendo la cantidad de elementos introducidos te muestre el nodo que ocupa dicha posición.


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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