il codice è scritto in c++, non ci sono errori di sintassi, ma stranamente quando provo ad inserire il secondo elemento esce dal programma...
il programma dovrebbe inserire in memoria numeri, ordinati all'inserimento..
ecco il listato:
Codice PHP:
//non è pho l'ho inserito tra i tag PHP per non perdere la formattazione!
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct nodo
{
nodo *prec;
int anni;
nodo *succ;
};
nodo *plista, *pfantoccio;
nodo *pbuff;
int risp,numero,ritorno;
//funzione inserimento
int inserisci(int dato)
{
if (plista==NULL) {
plista=(nodo*)malloc(sizeof(nodo)); //alloca un nuovo nodo
plista->anni=dato; //allora l'eta
plista->prec=NULL; //prec e succ puntano a null
plista->succ=NULL;
return 1;
} else {
pbuff=(nodo*)malloc(sizeof(nodo)); //alloca in ogni caso un nuovo nodo
pbuff->anni=dato; //allora in ogni caso l'eta
if (plista->anni > dato) {
//se il dato da inserire e' minore del dato puntato da plista scorre indietro finche la condizione non cambia oppure plista->prec=NULL (a questo punto inserirebbe in testa)
while (plista->anni > dato || plista->prec!=NULL){
plista=plista->prec;
}
//riordino i puntatori
pfantoccio=plista->prec;
plista->prec=pbuff;
pbuff->succ=plista;
pbuff->prec=pfantoccio; //pfantoccio puo essere NULL o un indirizzo
return 2;
} else {
//se il dato da inserire e' maggiore del dato puntato da plista scorre avanti finche la condizione non cambia oppure plista->succ=NULL (a questo punto inserirebbe in coda)
while (plista->anni < dato || plista->succ!=NULL){
plista=plista->succ;
}
//riordino i puntatori
pfantoccio=plista->succ;
plista->succ=pbuff;
pbuff->prec=plista;
pbuff->succ=pfantoccio;
return 3;
}
}
}
int main()
{
plista=NULL;
while(risp!=3)
{
printf("_______OPERAZIONI_______\n");
printf("\n");
printf("1. Inserisci\n");
printf("2. Visualizza\n");
printf("3. Esci\n");
printf("________________________\n");
scanf("%i",&risp);
if (risp==1) {
//operazione inserisci
printf("Dammi il numero da inserire\n");
scanf("%i",&numero);
ritorno=inserisci(numero);
if (ritorno==1) {
printf("E' il primo inserimento\n");
} else if (ritorno==2){
printf("Ho inserito a sinistra del puntatore\n");
} else if (ritorno==3){
printf("Ho inserito a destra del puntatore\n");
} else {
printf("Errore nell'inserimento\n");
}
//fine inserisci
} else if (risp==2) {
//operazione visualizza, da completare
} else if (risp==3) {
//nessun istruzione, esce;
}
else {
//operazione non valida
printf("Operazione non valida! \n");
}
}
}
provatelo e cercate di trovare l'errore.. io proprio non capisco.. grazie