Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/04/2015, 22:20
Zir
 
Fecha de Ingreso: abril-2015
Mensajes: 2
Antigüedad: 9 años
Puntos: 0
Pregunta invalid conversion from 'void*' to 'pNodo {aka nodo*}' [-fpermissive]

Hola a todos, ojala pudieran ayudarme, estoy atorado en un programa de c++, mi compilador es devc++, gracias por su ayuda, les dejo el codigo:

#include <stdio.h>
#include <stdlib.h>


struct nodo{
int dato;
struct nodo *siguiente;
};

typedef struct nodo Nodo;
typedef Nodo *pNodo;

void insertar(pNodo *nodoRaiz, int valor);
int eliminar(pNodo *nodoRaiz, int valor);
int estaVacia(pNodo nodoRaiz);
void imprimeLista(pNodo nodoActual);
void instrucciones (void);
void ordenar(pNodo *nodoRaiz);

int main () {
pNodo nodoInicial = NULL;
int op;
int elemento;
instrucciones();
printf("?");
scanf("%d", &op);
while (op != 4){
switch(op){
case 1:
printf("Valor del nodo: ");
scanf("\n%d",&elemento);
insertar(&nodoInicial,elemento);
imprimeLista(nodoInicial);
break;
case 2:
if(!estaVacia(nodoInicial)){
printf("Valor a eliminar: ");
scanf("\n%d",&elemento);

if(eliminar(&nodoInicial,elemento)){
printf("Valor %d eliminado.\n",elemento);
imprimeLista(nodoInicial);
}else{
printf("No se encuentra el elemento %d.\n\n",elemento);
}
}else{
printf("La lista esta vacia.\n\n");
}
break;
case 3:
ordenar(&nodoInicial);
imprimeLista(nodoInicial);
break;
default:
printf("Opción no válida.\n\n");
instrucciones();
break;
}
printf("? ");
scanf("%d",&op);
}
printf("Fin del programa");
return 0;
}

void instrucciones(void){
printf("Seleccione una opción:\n"
"1.- Insertar un elemento\n"
"2.- Eliminar un elemento\n"
"3.- Ordenar\n"
"4.- Salir\n");
}

void insertar(pNodo *nodoRaiz, int valor){
pNodo nodoNuevo;
pNodo nodoAnterior;
pNodo nodoActual;

nodoNuevo = malloc(sizeof(Nodo)); ////////////////ERRRORRR

if(nodoNuevo != NULL){
nodoNuevo -> dato = valor;
nodoNuevo -> siguiente = NULL;

nodoAnterior = NULL;
nodoActual = *nodoRaiz;

//while(nodoActual != NULL && valor > nodoActual->dato){
while(nodoActual != NULL){
nodoAnterior = nodoActual;
nodoActual = nodoActual -> siguiente;
}

if(nodoAnterior == NULL){
nodoNuevo -> siguiente = *nodoRaiz;
*nodoRaiz = nodoNuevo;
}else{
nodoAnterior -> siguiente = nodoNuevo;
nodoNuevo -> siguiente = nodoActual;
}
}else{
printf("No se inserto %d. No hay memoria disponible.\n",valor);
}
}

int eliminar(pNodo *nodoRaiz, int valor){
pNodo nodoAnterior;
pNodo nodoActual;
pNodo temp;

if(valor == (*nodoRaiz) -> dato){
temp = *nodoRaiz;
*nodoRaiz = (*nodoRaiz) -> siguiente;
free(temp);
return valor;
}else{
nodoAnterior = *nodoRaiz;
nodoActual = (*nodoRaiz) -> siguiente;
while(nodoActual != NULL && nodoActual -> dato != valor){
nodoAnterior = nodoActual;
nodoActual = nodoActual -> siguiente;
}

if(nodoActual != NULL){
temp = nodoActual;
nodoAnterior -> siguiente = nodoActual -> siguiente;
free(temp);
return valor;
}
}

return 0;
}

int estaVacia(pNodo nodoRaiz){
return nodoRaiz == NULL;
}

void imprimeLista(pNodo nodoActual){
if(nodoActual == NULL){
printf("La lista esta vacia");
}else{
printf("La lista es:\n");

while (nodoActual != NULL){
printf("%d -> ",nodoActual -> dato);
nodoActual = nodoActual -> siguiente;
}
printf("NULL\n\n");
}
}

void ordenar(pNodo *nodoRaiz){
pNodo actual;
int aux;
int cambio = 1;

while(cambio)
{
cambio = 0;
actual = *nodoRaiz;
while(actual->siguiente != NULL)
{
if(actual -> dato > actual -> siguiente ->dato)
{
aux = actual -> dato;
actual -> dato = actual -> siguiente ->dato;
actual -> siguiente -> dato = aux;
cambio = 0;
}
actual = actual -> siguiente;
}
}
}

Aquí una imagen: