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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / 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
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines