Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    4

    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);

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    scusa e l'errore dov'è? a compile time? a run time? non hai il risultato che desideri?
    cogli l'attimo

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    4
    mi permette di inserire i dati nella lista ma non scambia le posizioni degli elementi, restituendomi un output identico ai dati in ingresso, praticamente non spodsta i numeri dispari dopo i numeri pari......

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    guarda adesso non ho un pc con codeblock o dev di fianco più tardi provo a guardare comunque forse avresti fatto meglio creare una nuova classe invece che una struct. meno confusione e più compatezza...
    cogli l'attimo

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    4
    Ehmm, l'esercizio richiede specificatamente l'uso delle struct..
    Se potresti dargli un'occhiata mi faresti un enorme favore

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    4
    up

    un aiutino plese

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.