PDA

View Full Version : mi aiutate?


papas_b
14-06-2005, 17:49
salve ragazzi, a giorni ho un esame e non riesco a far funzionere sto codice,
si tratta di una lista con le varie funzione che si possono applicare su..
potreste aiutarmi?
credo che l errore sia nei puntatori passati alle funzioni.
p.s.
le funzioni che non vanno sono:
void in_testa(struct nodo **head);
void in_coda(struct nodo **head);
void in_ordinato(struct nodo **head)

#include <stdio.h>
#include <malloc.h>



//mi creo la struttura lista
struct nodo{
int data;//elemento lista
struct nodo *next;//punta al prossimo nodo
};

struct nodo *head=NULL;//puntatore di base, punta al primo nodo, lista inizializzata e vuota (punta a NULL)

/* prototipi delle funzioni */
struct nodo *crea_lista();
struct nodo *trova(struct nodo *);
void visualizza_lista(struct nodo *);
void in_testa(struct nodo **);
void in_coda(struct nodo **);
void in_ordinato(struct nodo **);

int main(){
int a;
for(;;){
printf("\ndigita 0 per uscire dal programma\n");
printf("digita 1 per creare la lista\n");
printf("digita 2 per trovare un oggetto\n");
printf("digita 3 per visualizzare la lista\n");
printf("digita 4 per inserire in testa\n");
printf("digita 5 per inserire in coda\n");
printf("digita 6 per inserire in maniera ordinata\n");
scanf("%d",&a);

switch(a){
case 1: head = crea_lista(); // crea la lista
break;
case 2: printf("-> [%d | ]--->\n",*trova(head));
break;
case 3: visualizza_lista(head); // stampa la lista
break;
case 4: in_testa(head);
break;
case 5: in_coda(head);
break;
case 6: in_ordinato(head);
break;
case 0: exit(1);
}
};
}


/*crea lista*/
struct nodo *crea_lista(){//------------------------funzione------------ ------------
struct nodo *head;
head=(struct nodo*)malloc(sizeof(struct nodo));
printf("\nInserisci il valore: ");
scanf("%d", &head->data);
head->next=NULL;
return head;
}


/*visualizza lista*/
void visualizza_lista(struct nodo *p){//------------funzione------------------------
printf("\nlista ---> ");
/* ciclo di scansione */
while(p != NULL){
printf("[%d |", p->data); // visualizza l'informazione
printf(" ]---> ");
p = p->next; // scorre di un elemento
}
printf("NULL\n\n");
}


/*trova elemento*/
struct nodo *trova(struct nodo *head){//------------funzione------------------------
struct nodo *g;
g=head;
int n;
printf("\nIigita oggetto da trovare: ");
scanf("%d", &n);
while((g->data!=n)&&(g->next!=NULL))
g=g->next;
return (g);
}
/*inserimento in testa*/
void in_testa(struct nodo **head){//-------------funzone-------------------
struct nodo *f;
f = (struct nodo*)malloc(sizeof(struct nodo));
printf("\ndigita oggetto\n");
scanf("%d",&f->data);
printf("\noggetto inserito %d \n",f->data);
f->next=*head;
*head=f;
}

/*inserimento in coda*/
void in_coda(struct nodo **head){
struct nodo *temp;/* puntatore usato per la scansione */
struct nodo *p; /* creazione del nuovo nodo */
p = (struct nodo *)malloc(sizeof(struct nodo));
p->next=NULL;
printf("\ndigita l'oggetto da inserire\n");
scanf("%d",&p->data);
printf("\noggetto inserito %d",p->data);
if(*head==NULL){ /* la lista è vuota */
*head=p;
return;
}
/* scansione della lista */
temp = *head;
while (temp->next != NULL)
temp = temp->next;
temp->next = p;
}

/*iserimento ordinato di un oggetto*/
void in_ordinato(struct nodo **head){
struct nodo *p;/*elemento da inserire*/
struct nodo *r = *head, *q = *head; /* predecessore e successore */
p = (struct nodo *)malloc(sizeof(struct nodo));
printf("\ndigita l'oggetto da inserire in maniera ordinata\n");
scanf("%d",&p->data);
printf("\noggetto inserito %d",p->data);
while((q->next!=NULL)&&(q->data<p->data)){/* trova il punto di inserimento */
r=q;
q=q->next;
}
if(q==*head) /* inserimento in testa */
*head=p;
else
r->next = p;
p->next = q;
}

papas_b
14-06-2005, 18:30
scusate!!! ho risolto. ho dimenticato di inserire & nel passaggio dei parametri.
visto che ci sono vorrei chiedervi perche se passo i puntatori invece dei doppi puntatori alle funzioni queste non vanno.
garzie