Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [c]-Copia di una lista solo elementi maggiori del predecessore

    Ciao! Sono agli inizi della programmazione sulle liste ed ho un problema che non riesco a risolvere.
    Devo creare una funzione che presa una lista in input e un intero n mi crei una nuova lista duplicando solo i nodi in posizione multipla di n e maggiori del loro predecessore immediato. Il primo elemento, che non ha predecessore, è considerato per convenzione maggiore.
    Ho scritto il seguente codice ma non funziona come dovrebbe:



    codice:
    node*newlis(node*lis,int n){     node*p,*head,*tail;     int pos=1;     head=tail=NULL;     while(lis->next!=NULL){     if(((pos%n)==0)&&(lis->next->data)>(lis->data)){ 	p=newnode();     	    	p->data=lis->next->data; 	p->next=NULL;       if(head==NULL){head=p;tail=p;}       else {tail->next=p; tail=p;}//Inserzione in coda     }			       	lis=lis->next;     	pos++;}     return(head); }

  2. #2
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Ho scritto due righe di codice durante la pausa caffe... sicuramente puo esser ottimizzato. Genera casualmente una lista di 100 elementi. Il valore di ciascuno è intero e casuale. La seconda lista è formata dagli elementi in posizione multipla di N ed il cui valore è maggiore del precedente.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    struct doublelinked{
    	int num;
    	struct doublelinked *prev;
    	struct doublelinked *next;
    	};
    
    void add(int, struct doublelinked **);
    void init(int, struct doublelinked **);
    void list_forward(struct doublelinked **);
    
    void init(int nr, struct doublelinked **first){
    
    	int i = 0; 
    	struct doublelinked *new;
    
    	for(; i < nr; i++){
    		if(!(new = (struct doublelinked *)malloc(sizeof(struct doublelinked))))
    			abort();
    
    		(*(new)).num = rand()%100;
    		(*(new)).next = *first;
    		(*(new)).prev = NULL;
    
    		if(*first != NULL)
    			(*(first))->prev = new;
    
    		*first = new;
    		}
    }
    
    
    void list_forward(struct doublelinked **first){
    
    	struct doublelinked *current;
    
    	for(current = *first; current != NULL; current = (*(current)).next)
    		printf("%d ", (*(current)).num);
    	printf("\n\n");
    }
    
    void add(int nr, struct doublelinked **first){
    	struct doublelinked *new, *current;
    	if(!(new = (struct doublelinked *)malloc(sizeof(struct doublelinked))))
    		abort();
    	(*(new)).num = nr;
    	if(*first == NULL){
    		*first = new;
    		(*(first))->prev = NULL;
    		(*(first))->next = NULL;
    		}
    	if(*first != NULL){
    		for(current = *first; (*(current)).next != NULL; current = (*(current)).next);
    		(*(current)).next = new;
    		(*(new)).next = NULL;
    		(*(new)).prev = current;
    		}
    }
    
    
    void main(){
    	int i, N = 4;
    	struct doublelinked *first_1 = NULL, *first_2 = NULL, *current;
    	srand(time(NULL));
    	init(100, &first_1);
    	list_forward(&first_1);
    	for(i = 0, current = first_1; current != NULL; current = (*(current)).next, i++){
    		if(i == 0){
    			add((*(current)).num, &first_2);
    		}
    		if(((i+1)%N == 0) && (*(current)).num > (*(current)).prev->num)
    			add((*(current)).num, &first_2);
    		}
    	list_forward(&first_2);
    }
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  3. #3
    Grazie mille per l'aiuto! quello che cercavo era una funzioncina un po' più semplice. putroppo date essendo agli inizi e date le mie poche conoscenze in materia, la tua soluzione mi risulta un po' complicata da capire! cmq poi ho risolto!!! grazie!

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.