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

    Ancora domanda su iterazione liste in c

    Ho fatto queste lista con scopo
    1->2->3
    4->5->6
    da come risultato
    1->4->2->5->3->6
    e funziona
    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
    {
    /* 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);
    z=z+1;
    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);
    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=1;int pos=1;
    if ((l1==NULL) && (l2==NULL)) return NULL;
    while ((l1!=NULL) && (l2!=NULL)) {
    
        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++;
    
        }
    }
    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;
    }
    se invece volessi stampare solo in posizione multipla ad un numero,es
    1->2->3
    4->5->6
    da come risultato
    1->4->3->6
    cosa devo fare,dove devo aggiugere pos ,ho provato con un ciclo che include così ,ma non va,dove sbaglio?
    codice:
    node* moltiplica(node *l1,node *l2)
    {
    node *p,*head,*tail;
    head=NULL;int n=1;int pos=1;
    if ((l1==NULL) && (l2==NULL)) return NULL;
    while ((l1!=NULL) && (l2!=NULL)) {
        if(pos%3==0){
        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;
    
    }

  2. #2
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447

    Re: Ancora domanda su iterazione liste in c

    Originariamente inviato da gabama
    Ho fatto queste lista con scopo
    1->2->3
    4->5->6
    da come risultato
    1->4->2->5->3->6
    e funziona
    Personalmente non capisco cosa tu abbia fatto...
    Provando ad immaginarlo hai passato ad una funzione le liste 1->2->3 e 4->5->6 ottenendo 1->4->2->5->3->6 come risultato... ho capito bene?

    Originariamente inviato da gabama
    se invece volessi stampare solo in posizione multipla ad un numero,es
    1->2->3
    4->5->6
    da come risultato
    1->4->3->6
    Qui invece non riesco nemmeno ad immaginarlo che cosa tu intendessi... prova ad essere più chiaro.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    innanzitutto grazie per avermi risposto,
    nel primo caso ho duplicato 2 liste in una terza che mi sstampi tutti gli elementi,riprendendo l' esempio

    l1 1->2->3
    l2 4->5->6
    da come risultato
    1->4->2->5->3->6
    e funziona

    nel secondo è lo stesso procedimento,solo che voglio stampare solo gli elementi in posizione dispari o multipla ad un numero

    l1 1->2->3->4->5
    l2 6->7->8->9->10
    da come risultato
    1->6->3->8->5->10

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    nessuno mi da 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 © 2024 vBulletin Solutions, Inc. All rights reserved.