Necesito ayuda con una función de listas

Iniciado por LonleyGirl503, 1 Agosto 2016, 04:56 AM

0 Miembros y 1 Visitante están viendo este tema.

LonleyGirl503

Hola a todos, tengo este código

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;


class nodo {

private:
int valor;
nodo *siguiente;
friend class lista;

public:
nodo(int v, nodo *sig = NULL)
{
valor = v;
siguiente = sig;
}
};

typedef nodo *pnodo;

class lista {

private:
pnodo primero;
pnodo actual;

public:

lista() {
primero = NULL;
actual = NULL;
}

~lista();

void Insertar(int v);

void Borrar(int v);

void Prom(int p);

bool ListaVacia() {
return primero == NULL;
}

void Primero() { actual = primero; }

void Mostrar();


};


lista::~lista() {
pnodo aux;

while(primero) {
aux = primero;
primero = primero->siguiente;
delete aux;
}
actual = NULL;
}

void lista::Insertar(int v) {
pnodo anterior;

if(ListaVacia() || primero->valor > v) {
primero = new nodo(v, primero);
}
else {
anterior = primero;

while(anterior->siguiente && anterior->siguiente->valor <= v)
anterior = anterior->siguiente;

anterior->siguiente = new nodo(v, anterior->siguiente);
}
}

void lista::Borrar(int v) {
pnodo anterior, nodo;

nodo = primero;
anterior = NULL;
while(nodo && nodo->valor < v) {
anterior = nodo;
nodo = nodo->siguiente;
}
// Borrar el nodo
if(!anterior) // Primer elemento
primero = nodo->siguiente;
else // un elemento cualquiera
anterior->siguiente = nodo->siguiente;
delete nodo;
}



void lista::Mostrar() {
nodo *aux;
aux = primero;
while(aux) {
cout << aux->valor <<" ";
aux = aux->siguiente;
}
cout<<endl;
}


int main() {
lista Lista;
int A;
    short Q, Q1, c=0;

cin>>A>>Q;
Lista.Insertar(A);
Q1=Q;


for(int cont=0; cont<Q1; cont++)
{
cin>>Q;
        switch(Q)
        {
            case 1:
cout<<endl;
            break;
           
            case 2:
//insertar
cin>>A;
Lista.Insertar(A);
cin>>A;
Lista.Insertar(A);
            break;

            case 3:
//Mostrar toda la lista
            Lista.Mostrar();
            break;

            case 4:
//eliminar
cin>>A;
Lista.Borrar(A);
cin>>A;
Lista.Borrar(A);
            break;

        }
    }
   
return 0;
}


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

do-while

¡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.
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!