Aiuto--Cancella neg da una lista(Dev c++)

di il
5 risposte

Aiuto--Cancella neg da una lista(Dev c++)

Salve ragazzi.......Devo cancellare da una lista doppiamente puntata gli elementi negativi----
Ho un problema quando vado a compilare con il dev c++ che mi da alcuni errori che nn riesco a risolvere....
il problema credo che stia nella struttura struct elimina_neg,poichè senza di essa l'esercizio mi fa inserire i valori (cioè interi) e me li visualizza...
Vi prego aiutatami che ho un esame a breve...
Grazie



#include<stdio.h>
#include<malloc.h>
struct el {struct el *prev;int inf; struct el *next;};
struct el *crea_lista();
void visualizza_lista(struct el*p);
struct el *elimina_neg(struct el*p);
int main() {
struct el*lista;
int valore;
lista=crea_lista();
visualizza_lista(lista);
printf("\nInserisci elemento da inserire: ");
scanf("%d",&valore);
elimina_neg(lista);
visualizza_lista(lista);

}

struct el*crea_lista(){
struct el*p,*punt;
int i,n;
printf("\nSpecificare il numero di elementi: ");
scanf("%d",&n);
if (n==0)
p=NULL;
else {
p=(struct el*)malloc(sizeof(struct el));
printf("\nInserisci il 1 valore: ");
scanf("%d",&p->inf);
punt=p;
p->prev=NULL;
for (i=2; i<=n; i++)
{
punt->next=(struct el*)malloc(sizeof(struct el));
punt->next->prev=punt;
punt=punt->next;
printf("\nInserisci il %d elemento: ",i);
scanf("%d",&punt->inf);
}
punt->next=NULL;
}
system("pause");
return (p);
}

void visualizza_lista(struct el*p)
{
printf("\n lista --->");
while(p!=NULL)
{
printf("%d", p->inf);
printf("---->");
p=p->next;
}
printf("NULL\n\n");
system("pause");
}

struct el *elimina_neg(struct el*p)
{
struct el*app;
while (p!=NULL){
if p->inf<0
{
app=p->next;
if p->prev!=NULL
{
p=p->prev;
p->next=app;
app->prev=p;
p=p->next;}
else
{
p=app;
app->prev=NULL;
p=p->next;}
}
}
system("pause");
return (p);
}

5 Risposte

  • Re: Aiuto--Cancella neg da una lista(Dev c++)

    Ci sono un po di errori:
    ad esempio per la funzione system() devi includere windows.h. Poi in alcune codizioni if ti dimentichi di inserire la condizione nelle parentesi. Ti posto il codice con le relative correzzioni.

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

    struct el {
    struct el *prev;
    int inf;
    struct el *next;
    };

    struct el *crea_lista();
    void visualizza_lista(struct el*p);
    struct el *elimina_neg(struct el*p);

    int main() {
    struct el*lista;
    int valore;
    lista=crea_lista();
    visualizza_lista(lista);
    printf("\nInserisci elemento da inserire: ");
    scanf("%d",&valore);
    elimina_neg(lista);
    visualizza_lista(lista);
    }

    struct el*crea_lista()
    {
    struct el*p,*punt;
    int i,n;
    printf("\nSpecificare il numero di elementi: ");
    scanf("%d",&n);

    if (n==0)
    p=NULL;
    else
    {
    p=(struct el*)malloc(sizeof(struct el));
    printf("\nInserisci il 1 valore: ");
    scanf("%d",&p->inf);
    punt=p;
    p->prev=NULL;
    for (i=2; i<=n; i++)
    {
    punt->next=(struct el*)malloc(sizeof(struct el));
    punt->next->prev=punt;
    punt=punt->next;
    printf("\nInserisci il %d elemento: ",i);
    scanf("%d",&punt->inf);
    }
    punt->next=NULL;
    }
    system("PAUSE");

    return (p);
    }

    void visualizza_lista(struct el*p)
    {
    printf("\n lista --->");
    while(p!=NULL)
    {
    printf("%d", p->inf);
    printf("---->");
    p=p->next;
    }
    printf("NULL\n\n");
    system("pause");
    }

    struct el *elimina_neg(struct el*p)
    {
    struct el *app;
    while (p!=NULL)
    {
    if (p->inf<0){
    app=p->next;
    if (p->prev!=NULL)
    {
    p=p->prev;
    p->next=app;
    app->prev=p;
    p=p->next;
    }
    else
    {
    p=app;
    app->prev=NULL;
    p= p->next;}
    }
    }
    system("pause");
    return (p);
    }
  • Re: Aiuto--Cancella neg da una lista(Dev c++)

    Grazie Overflow.............sei gentilissimo..........
    Gli errori sono corretti,il programma viene lanciato...........pero non mi cancella gli elementi negativi......
  • Re: Aiuto--Cancella neg da una lista(Dev c++)

    Ciao, ho dato un occhiata alla funzione elimina_neg() e mi sono permesso di riscriverla:

    struct el *elimina_neg(struct el*p)
    {

    struct el* a;

    while (p!=NULL)
    {
    if(p->inf <0)
    {
    if(p->next)
    {
    a=p->prev;
    a->next =p->next ;
    }
    else
    {
    a=p->prev;
    a->next =NULL;
    }
    }

    p=p->next;

    }

    system("pause");
    return (p);
    }

    spero non ti dispiaccia...
  • Re: Aiuto--Cancella neg da una lista(Dev c++)

    Per niente owerflow........
    Cmq poi ho risolto il problema.....................
    Ti ringrazio sei gentilissimo................Ho messo un nuovo argomento,stavolta sono gli stack......
    che palle,ho un esame a breve..................
  • Re: Aiuto--Cancella neg da una lista(Dev c++)

    Bene... sono contento che sei riuscito, e in bocca al lupo per l'esame. Se vuoi qualche aiuto puoi contattarmi.
Devi accedere o registrarti per scrivere nel forum
5 risposte