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

    Occorrenze massime consecutive in lista c

    Dovrei far trovare la più lunga sequenza di x consecutive,es.
    1-2-2-3-2-2-2-2-5 mi dovrebbe dare 4.Nella funzione attuale conta le occorrenze,ma come lo adatto per farlo funzionare?Grazie in anticipo
    codice:
    
    #include <stdlib.h>
    #include <stdio.h>
    
    typedef struct nod {
            int data;
            struct nod *next;
    } node;
    
    node *newnode(void)
    {
       return (node *)malloc(sizeof(node));
    }
    
    
    node *buildlis()
    {
    int x;
    node *lis, *p, *last;
    printf("nuovo numero da inserire in lista:\n");
    scanf("%d", &x);
    if (x<=0)
    lis= NULL; /* caso di lista vuota */
    else
    {
    
    last=newnode();
    lis = last;
    last->data = x;
    last->next = NULL;
    printf("nuovo numero da inserire in lista:\n");
    scanf("%d", &x);
    while (x>0)
    
    {
    p=newnode();
    p->data = x;
    p->next = NULL;
    last->next = p;
    last = p;
    printf("nuovo numero da inserire in lista:\n");
    scanf("%d", &x);
    }
    }
    return(lis);
    }
    
    void printlis(node *lis)
    {
         node* tmp;
    
         tmp = lis;
         int somma=0;float media=0;int conteggio=0;
         printf("\nlista risultato\n");
         while (tmp != NULL) {
               printf(">>>> %d\n", tmp->data) && (somma=somma+tmp->data) && (conteggio=conteggio+1) ;
               tmp = tmp->next;
    
         }
        printf("Somma %d\n",somma);
        printf("Conteggio %d \n",conteggio);
        media=(somma/conteggio);
        printf("Media %f",media);
    }
    
    
    void myFree ( node* top )
    {
        node* tmp;
        tmp = top;
    
        while ( top->next != NULL ) {
              tmp = top->next;
              free(top);
              top = tmp;
        }
    }
    
    
    int occorrenza(node *lis,int x){
        int acc=0;int mem=0;
        while (lis != NULL)
    {
        if (lis->data == x) acc++ ;
        lis=lis->next;
    }
        printf("\nGli elementi = %d sono %d\n",x,acc);
        return acc;
    }
    
    int main()
    {
        node* heada;
        heada = buildlis (  );
        printf ("\n-----STAMPA -----\n");
        printlis(heada);
        occorrenza(heada,3);
        myFree ( heada );
        return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    bhè....ho provato a modificare un pò la tua funzione di ricerda di occorrenze, e ho provato a scrivere questo...
    codice:
    int occorrenza(node *lis,int x)
    {
        int acc=0;
        int mem=0;
        int max=0;
        while (lis != NULL) {
              if ( lis->data == x ) {
                 acc++ ;
              }
              else if ( acc > max ) {
                        max = acc;
                        acc = 0;
              }
              lis=lis->next;
        }
        if ( acc > max ) {
           max = acc;
           acc = 0;
        }
        printf("\nGli elementi = %d sono %d\n",x,max);
        return max;
    }
    spero sia chiaro e sia quello che stavi cercando...se c sono problemi chiedi anche...
    ciao
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    760
    MrX87 sei stato bravissimo (per quello che riguarda il codice,è proprio quello che cercavo!) e gentilissimo per il tempo che hai dovuto perdere.Sono agli inizi sulle liste e ti ringrazio davvero tanto per il consiglio.

  4. #4
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    de nada...
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

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.