emiliano30
04-06-2005, 19:23
questo prog su visual gira alla grande, sul dev lo compila ma non lo esegue ..chi mi risolve il problema?
:eek:
/*PROGRAMMA PER L'INSERIMENTO IN TESTA AD UNA PILA*/
#include<stdio.h>
#include<stdlib.h>
/*definisco la struttura nodoPila che contiene un dato di tipo intero ed un
puntatore ad una struttura uguale a quella che sto dichiarando*/
struct nodoPila{
int dato;
struct nodoPila *nextPtr; /*definisco una struttura ricorsiva*/
};
typedef struct nodoPila NodoPila; /*sinonimo di struct pila*/
typedef NodoPila *NodoPilaPtr; /*sinonimo di pila**/
void push(NodoPilaPtr *topPtr,int info);/*prototipo inseimento nodo in testa*/
int pop(NodoPilaPtr *topPtr);/*prototipo rimozione nodo in testa*/
void stampaPila(NodoPilaPtr currentPtr);
void instructions(void);
int isEmpty(NodoPilaPtr topPtr);
int main()
{
NodoPilaPtr nodoPtr=NULL;/*punta alla testa della pila*/
int scelta;
int Val;
instructions();/*visualizza menu*/
printf("?");
scanf("%d",&scelta);
while (scelta!=-1){
switch(scelta){
/*inserisce un valore in cima alla lista*/
case 1:
printf("inserisci un intero:");
scanf("%d",&Val);
push(&nodoPtr,Val);
stampaPila(nodoPtr);
break;
/*estrae un valore dalla lista*/
case 2:
/*se la pila non è vuota*/
if(!isEmpty(nodoPtr)){
printf("il valore estratto è%d.\n",pop(&nodoPtr));
}/*fine comando if*/
stampaPila(nodoPtr);
break;
}/*fine comando switch*/
printf("?");
scanf("%d",&scelta);
}/*fine while*/
system("PAUSE");
return 0;
}/*FINE MAIN*/
/*visualizza le istruzioni all'utente*/
void instructions(void)
{
printf("inserisci la scelta:\n"
"1 inserisci un valore in testa\n"
"2 elimini un valore in testa\n"
"-1 esci dal programma\n" );
}
/*inserisce un nodo in cima alla pila*/
void push(NodoPilaPtr *topPtr,int info)
{
NodoPilaPtr newPtr;/*puntatore al nuovo nodo*/
newPtr=malloc(sizeof(NodoPila));/*sto allocando dinamicamente memoria per il nuovo nodo*/
/*inserisco il nodo in cima alla pila*/
if (newPtr!=NULL){
newPtr->dato=info;
newPtr->nextPtr=*topPtr;
*topPtr=newPtr;
}/*fine ramo if*/
else{
printf("%d inserimento impossibile.Non c'è memoria disponobile.\n",info);
}/*fine else*/
}/*fine funzione push*/
/*rimuove un nodo dalla tesa della pila*/
int pop(NodoPilaPtr *topPtr)
{
NodoPilaPtr tempPtr;/*puntatore ad un nodo temporaneo*/
int popVal;/*valore del nodo*/
tempPtr=*topPtr;/*a temp gli passo il valore a cui punta top(valore che sta nel primo nodo),*/
popVal=(*topPtr)->dato;/*assegno (*topPtr)->dato a popVal*/
*topPtr=(*topPtr)->nextPtr;/*topPtr contiene l'indirizzo del nuovo nodo di testa*/
free(tempPtr);/*libero la memoria puntata da temp*/
return popVal;
}/*fine pop*/
/*visualizzo la pila*/
void stampaPila(NodoPilaPtr currentPtr)
{
/*se la pila non è vuota*/
if (currentPtr==NULL){
printf("la pila è vuota.\n\n");
}
else{
printf("la pila è:\n");
/*finche non raggiunge la fine della pila*/
while(currentPtr!=NULL){
printf("%d-->",currentPtr->dato);
currentPtr= currentPtr->nextPtr;
}/*fine while*/
printf("NULL\n\n");
}/*fine else*/
}/*fine funzione print*/
/*se la pila è vuota restituisce 1 altrimenti 0*/
int isEmpty(NodoPilaPtr topPtr)
{
return topPtr==NULL;
}
:eek:
/*PROGRAMMA PER L'INSERIMENTO IN TESTA AD UNA PILA*/
#include<stdio.h>
#include<stdlib.h>
/*definisco la struttura nodoPila che contiene un dato di tipo intero ed un
puntatore ad una struttura uguale a quella che sto dichiarando*/
struct nodoPila{
int dato;
struct nodoPila *nextPtr; /*definisco una struttura ricorsiva*/
};
typedef struct nodoPila NodoPila; /*sinonimo di struct pila*/
typedef NodoPila *NodoPilaPtr; /*sinonimo di pila**/
void push(NodoPilaPtr *topPtr,int info);/*prototipo inseimento nodo in testa*/
int pop(NodoPilaPtr *topPtr);/*prototipo rimozione nodo in testa*/
void stampaPila(NodoPilaPtr currentPtr);
void instructions(void);
int isEmpty(NodoPilaPtr topPtr);
int main()
{
NodoPilaPtr nodoPtr=NULL;/*punta alla testa della pila*/
int scelta;
int Val;
instructions();/*visualizza menu*/
printf("?");
scanf("%d",&scelta);
while (scelta!=-1){
switch(scelta){
/*inserisce un valore in cima alla lista*/
case 1:
printf("inserisci un intero:");
scanf("%d",&Val);
push(&nodoPtr,Val);
stampaPila(nodoPtr);
break;
/*estrae un valore dalla lista*/
case 2:
/*se la pila non è vuota*/
if(!isEmpty(nodoPtr)){
printf("il valore estratto è%d.\n",pop(&nodoPtr));
}/*fine comando if*/
stampaPila(nodoPtr);
break;
}/*fine comando switch*/
printf("?");
scanf("%d",&scelta);
}/*fine while*/
system("PAUSE");
return 0;
}/*FINE MAIN*/
/*visualizza le istruzioni all'utente*/
void instructions(void)
{
printf("inserisci la scelta:\n"
"1 inserisci un valore in testa\n"
"2 elimini un valore in testa\n"
"-1 esci dal programma\n" );
}
/*inserisce un nodo in cima alla pila*/
void push(NodoPilaPtr *topPtr,int info)
{
NodoPilaPtr newPtr;/*puntatore al nuovo nodo*/
newPtr=malloc(sizeof(NodoPila));/*sto allocando dinamicamente memoria per il nuovo nodo*/
/*inserisco il nodo in cima alla pila*/
if (newPtr!=NULL){
newPtr->dato=info;
newPtr->nextPtr=*topPtr;
*topPtr=newPtr;
}/*fine ramo if*/
else{
printf("%d inserimento impossibile.Non c'è memoria disponobile.\n",info);
}/*fine else*/
}/*fine funzione push*/
/*rimuove un nodo dalla tesa della pila*/
int pop(NodoPilaPtr *topPtr)
{
NodoPilaPtr tempPtr;/*puntatore ad un nodo temporaneo*/
int popVal;/*valore del nodo*/
tempPtr=*topPtr;/*a temp gli passo il valore a cui punta top(valore che sta nel primo nodo),*/
popVal=(*topPtr)->dato;/*assegno (*topPtr)->dato a popVal*/
*topPtr=(*topPtr)->nextPtr;/*topPtr contiene l'indirizzo del nuovo nodo di testa*/
free(tempPtr);/*libero la memoria puntata da temp*/
return popVal;
}/*fine pop*/
/*visualizzo la pila*/
void stampaPila(NodoPilaPtr currentPtr)
{
/*se la pila non è vuota*/
if (currentPtr==NULL){
printf("la pila è vuota.\n\n");
}
else{
printf("la pila è:\n");
/*finche non raggiunge la fine della pila*/
while(currentPtr!=NULL){
printf("%d-->",currentPtr->dato);
currentPtr= currentPtr->nextPtr;
}/*fine while*/
printf("NULL\n\n");
}/*fine else*/
}/*fine funzione print*/
/*se la pila è vuota restituisce 1 altrimenti 0*/
int isEmpty(NodoPilaPtr topPtr)
{
return topPtr==NULL;
}