Hola a todos, tengo este código
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
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