Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: LonleyGirl503 en 1 Agosto 2016, 04:56 am



Título: Necesito ayuda con una función de listas
Publicado por: LonleyGirl503 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


Título: Re: Necesito ayuda con una función de listas
Publicado por: do-while 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.