la salida de impresion me da lo siguiente
Los elementos de la pila:
1 ,- 2 , -3 ,4 ,5 ,7
la suma de los positivos: 16 lo correcto seria 17
la suma de los negativos: -5
pero como pueden ver no me suma el primer elemento que es uno, no se que sera espero me puedan corregir si he errado, aqui les pongo el codigo.
aqui esta mi codigo:
Código:
#include<stdio.h>
#include<stdlib.h>
struct Pila
{
int Dato;
struct Pila *Siguiente;
};
void Push(struct Pila **,int);
int Pop(struct Pila **);
void ImprimePila(struct Pila *);
int main(void)
{
struct Pila *PtrPila;
PtrPila=NULL;
Push(&PtrPila, 7); Push(&PtrPila, 5); Push(&PtrPila, 4);
Push(&PtrPila,-3); Push(&PtrPila,-2); Push(&PtrPila, 1);
ImprimePila(PtrPila);
getchar();
return 0;
}
void Push(struct Pila **Tope, int valor)
{
struct Pila *Nuevo;
Nuevo = (struct Pila *) malloc( sizeof(struct Pila) );
if(Nuevo!=NULL)
{
Nuevo -> Dato = valor;
Nuevo -> Siguiente = *Tope;
*Tope=Nuevo;
}
else
printf("No hay memoria suficiente.\n");
}
int Pop(struct Pila **Tope)
{
struct Pila *Temporal;
int ValorPop;
Temporal= *Tope;
ValorPop=(*Tope)->Dato;
*Tope=(*Tope)->Siguiente;
free(Temporal);
return ValorPop;
}
void ImprimePila(struct Pila *Actual)
{
int suma=0, negativo=0;
if(Actual==NULL)
{
printf("La pila esta vacia.\n"); }
else
{
printf("Los elementos de la pila:\n");
while(Actual!=NULL)
{
printf(" %d ",Actual->Dato);
Actual=Actual->Siguiente;
if(Actual->Dato >=0)
suma+=Actual->Dato ;
else
negativo+=Actual -> Dato;
}
printf("\nLa suma de los positivos: %d", suma);
printf("\nLa suma de los negativos: %d", negativo);
}
}