Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760

    Problema iterazione liste c

    Ho ancora un problema sulle liste,con 2 liste se volessi fare
    l1 1->2->3->4->6->7
    l2 8->9->10->11->12
    la lista risultante sarà tutti gli elementi in pos compresa tra 2 valori,es
    2->9->3->10->4->11
    ma nella funzione lascio sicuramente dietro qualcosa perchè si blocca...
    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    typedef struct nod {
            int data;
            struct nod *next;
            struct nod *prev;
    } node;
    
    node *newnode(void)
    {
       return (node *)malloc(sizeof(node));
    }
    
    /* Dato un intero n>0, costruisce la lista di nodi da 1 ad n */
    node *buildlis()
    {
    int x;int z=0;
    node *lis, *p, *last;
    printf("nuovo numero da inserire in lista:\n");
    scanf("%d", &x);
    if (x==00000)
    lis= NULL; /* caso di lista vuota */
    else
    {
    
    last=newnode();
    lis = last;
    last->data = x;
    last->next = NULL;
    printf("nuovo numero da inserire in lista (00000 per terminare):\n");
    scanf("%d", &x);
    z=z+1;
    while (x!=00000)
    
    {
    p=newnode();
    p->data = x;
    p->next = NULL;
    last->next = p;
    last = p;
    printf("nuovo numero da inserire in lista (00000 per terminare):\n");
    scanf("%d", &x);
    z=z+1;
    
    }
    }
    if (z>0) printf("Il valore e' %d\n",z);
    if(z==0) printf("|||||-----lista vuota-----|||||\n");
    return(lis);
    }
    
    
    /* Stampa degli elementi di una lista */
    void printlis(node *lis)
    {
         node* tmp;
    
         tmp = lis;
         int somma=0;float media=0;int conteggio=0;
    
         while (tmp != NULL) {
               printf(">>>> %d\n", tmp->data)  ;
               tmp = tmp->next;
    
         }
    
    }
    
    void myFree ( node* top )
    {
        node* tmp;
        tmp = top;
    
        while ( top->next != NULL ) {
              tmp = top->next;
              free(top);
              top = tmp;
        }
    }
    
    int conteggio(node *lis)
    {
    int acc=0;
    while (lis != NULL)
    {
    acc=acc+1;
    lis=lis->next;
    }
    return(acc);
    }
    
    
    node* moltiplica(node *l1,node *l2)
    {
    node *p,*head,*tail;
    head=NULL;int n=0;int pos=1;
    if((l1==NULL) && (l2==NULL)) return NULL;
    while ((l1!=NULL) && (l2!=NULL)){
    if(pos>2){
    if (n%2!=0)   {
        p=newnode();
        p->data=l1->data;
        p->next=NULL;
        if(head==NULL){head=p,tail=p;}
        else{tail->next=p;tail=tail->next;}
        l1=l1->next;
    
        n++;
        }
    
    if (n%2==0)   {
        p=newnode();
        p->data=l2->data;
        p->next=NULL;
        if(head==NULL){head=p,tail=p;}
        else{tail->next=p;tail=tail->next;}
    
        l2=l2->next;
        n++;
        }
    
    
    pos++;}
    
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    return head;}
    
    
    
    
    
    
    
    
    
    
    int main()
    {
        node* head;node* head2;node *dup;
    
        printf ("-----LISTA A-----\n");
        head = buildlis (  );
        printf ("-----LISTA B-----\n");
        head2 = buildlis (  );
    
    
        printf ("\n-----STAMPA LISTA A-----\n");
        printlis(head);
        printf ("\n-----STAMPA LISTA B-----\n");
        printlis(head2);
    
        printf ("\n-----CONTROLLO-----\n");
    
        dup=moltiplica(head,head2);
        printlis(dup);
        if(head==NULL) printf ("\nNESSUN RISULTATO ESPRIME I VALORI VOLUTI\n");
        free ( head );
    
    
        return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    ciao...scusa ma non ho ben capito l'esempio...tu hai detto che inserisci due liste così:
    l1 1->2->3->4->6->7
    l2 8->9->10->11->12
    e la risultante di queste due liste deve essere una cosa del genere:
    2->9->3->10->4->11
    ...ecco...io quello che capisco è che devono alternarsi i valori delle due liste...però non capisco perchè non compare il primo elemento di l1 e l'ultimo di l2?!
    inoltre cosa intendi con questa frase:
    la lista risultante sarà tutti gli elementi in pos compresa tra 2 valori,es
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    intanto grazie mille per avermi risposto,
    io vorrei stampare tutti gli elementi delle 2 liste in posizione compresi tra 2 numeri

    l1 1->|2 ->3 ->4|->6->7
    l2 8->|9->10->11|->12

  4. #4
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    quindi se ho capito bene...prendendo come esempio queste due liste:
    l1 5->6->7
    l2 10->20->30
    si deve avere come lista finale:
    6->20
    perchè sono gli unici 2 numeri compresi tra altri numeri!
    e poi però nel tuo esempio perchè in questa lista
    l1 1->|2 ->3 ->4|->6->7
    prendi solo fino al 4 e non prendi anche il 6??
    ........onestamente ancora non ho ben afferrato mi sa...perchè mi pare una cosa strana!!
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    ad esempio su una lista elementi tra 2 pos comprese
    l1 1->2->3->4->5->6->7->8->9->10
    ritorna 3->4->5->6
    ma su 2 liste.....

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    
    typedef struct nod {
            int data;
            struct nod *next;
            struct nod *prev;
    } node;
    
    node *newnode(void)
    {
       return (node *)malloc(sizeof(node));
    }
    
    /* Dato un intero n>0, costruisce la lista di nodi da 1 ad n */
    node *buildlis()
    {
    int x;
    node *lis, *p, *last;
    printf("nuovo numero da inserire in lista:\n");
    scanf("%d", &x);
    if (x==00000)
    lis= NULL; /* caso di lista vuota */
    else
    {
    /* inserzione del primo elemento in una lista */
    last=newnode();
    lis = last;
    last->data = x;
    last->next = NULL;
    printf("nuovo numero da inserire in lista (00000 per terminare):\n");
    scanf("%d", &x);
    while (x!=00000)
    /* Invariante: lis punta alla lista con tutti gli interi finora letti, tranne l'ultimo, e last punta all'ultimo nodo di tale lista */
    {
    p=newnode();
    p->data = x;
    p->next = NULL;
    last->next = p;
    last = p;
    printf("nuovo numero da inserire in lista (00000 per terminare):\n");
    scanf("%d", &x);
    }
    }
    return(lis);
    }
    
    
    /* Stampa degli elementi di una lista */
    void printlis(node *lis)
    {
         node* tmp;
    
         tmp = lis;
         int somma=0;float media=0;int conteggio=0;
    
         while (tmp != NULL) {
               printf(">>>> %d\n", tmp->data)  ;
               tmp = tmp->next;
    
         }
    
    }
    
    void myFree ( node* top )
    {
        node* tmp;
        tmp = top;
    
        while ( top->next != NULL ) {
              tmp = top->next;
              free(top);
              top = tmp;
        }
    }
    
    int conteggio(node *lis)
    {
    int acc=0;
    while (lis != NULL)
    {
    acc=acc+1;
    lis=lis->next;
    }
    return(acc);
    }
    
    
    node* moltiplica(node *l1)
    {
    node *p,*head,*tail;
    head=NULL;int pos=1;
    if(l1==NULL)  return NULL;
    
    while(l1!=NULL) {
        if((pos>2) && (pos<7)){
            p=newnode();
            p->data=l1->data;
            p->next=NULL;
            if(head==NULL){head=p,tail=p;}
            else{tail->next=p;tail=tail->next;}}
            pos++;
            l1=l1->next;
            }
    
    return head;}
    
    
    
    int main()
    {
        node* head;node* head2;node *dup;
    
        printf ("-----LISTA A-----\n");
        head = buildlis (  );
    
    
    
        printf ("\n-----STAMPA LISTA A-----\n");
        printlis(head);
    
    
        printf ("\n-----CONTROLLO-----\n");
    
        dup=moltiplica(head);
        printlis(dup);
    
        free ( head );
    
    
        return 0;
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    consigli?

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.