|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Sep 2001
Città: Sicilia
Messaggi: 294
|
[C] Scambio posizioni elementi in una lista(struttura dati astratta).
Ciao a tutti..
Il problema è semplice, devo creare un programma che data una lista in input, sposti tutti gli elementi dispari dopo tt gli elementi pari, nello stesso ordine in cui sono stati inseriti nella lista iniziale. incollo sorgente nella speranza che qualcuno mi faccia capire dov'è l'errore: #include<stdio.h> #include<malloc.h> struct lista { int inf; struct lista *pun; }; struct lista *crealista(void); void visualizza(struct lista *); struct lista *prec(struct lista *); void main() { struct lista *puntalista; //Puntatore alla lista puntalista=crealista(); //Richiamo funzione creazione lista visualizza(puntalista); //Richiamo funzione visualizzazione lista puntalista=prec(puntalista); visualizza(puntalista); } void visualizza(struct lista *p) //Funzione di visualizzazione lista { while(p!=NULL) { printf("%d---->", p->inf); p=p->pun; } printf("\tNULL"); } struct lista *crealista(void) //Funzione di creazione lista { struct lista *p, *paus; struct lista x; printf("Inserire un elemento: "); scanf("%d", &x.inf); //Creazione primo elemento if(x.inf==0) p=NULL; else { p=(struct lista *)malloc(sizeof(struct lista)); p->inf=x.inf; paus=p; //Creazione elementi successivi while(x.inf!=0) { printf("Inserire un elemento: "); scanf("%d", &x.inf); if(x.inf!=0) { paus->pun=(struct lista *)malloc(sizeof(struct lista)); paus=paus->pun; paus->inf=x.inf; } else paus->pun=NULL; } } return(p); } struct lista *prec(struct lista *p) //Funzione scambio posizioni elementi { struct lista *paus=p, *paus2; if(p!=NULL) //Scambia primo elemento if(p->inf%2==0) paus=paus->pun; else { paus->pun=paus; paus=paus->pun; } //Scambia elementi successivi while(paus->pun!=NULL) { if(paus->pun->inf%2==0) paus=paus->pun; else { paus2=paus; paus2->pun->pun=paus2->pun; paus2->pun=paus2->pun->pun; } paus->pun=NULL; } return(p); } Ultima modifica di Efcon : 23-01-2010 alle 14:12. |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jan 2008
Messaggi: 90
|
Potresti semplicemente creare una seconda lista. Leggi tutti gli elementi della prima lisa e li inserisci nella seconda man mano che trovi dei numeri pari (cancellandoli dalla prima)... poi ricominci a leggere la prima lista dall'inizio e copi gli elementi rimasti.
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Puoi fare tutto con una sola lista.
Scorri tutta lista fino a quando non troverai il primo elemento pari...quella sarà la testa "virtuale" della tua seconda lista. Ora comincia a scorrere tutti gli elementi dall'inizio, per ogni elemento pari (diverso dal primo della seconda lista) estrailo dalla lista (aggiorna di conseguenza l'elemento precedente) ed inseriscilo in coda alla seconda lista (aggiorna di conseguenza il puntatore a next del nuovo elemento). |
![]() |
![]() |
![]() |
#4 | |
Member
Iscritto dal: Sep 2001
Città: Sicilia
Messaggi: 294
|
Quote:
Sono una studentessa al primo anno...l'esercizio richiede esplicitamente di modificare la lista senza fare uso di una seconda. Nel sorgente che ho allegato per quale motivo non riordina gli elementi? Grazie mille |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:38.