Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Poker32
    Registrato dal
    May 2001
    Messaggi
    240
    Allora, l'estate è finita e ricomincia l'università! Quindi esami, problemi, stress, ecc... E l'ultima volta mi hanno bocciato in programmazione C.
    Ora... il mio problema è l'uso dei puntatori e delle liste dinamiche! Io provo, provo, ma non riesce molto.
    Mi potete dare una mano a risolvere questo problema, ed evitare un'altra figura di merda con il prof.?
    Ad esempio, vi lascio il testo di un esercizio che dovevo svolgere:

    Date due liste dinamiche, ordinate in maniera crescente, creare una funzione C che fonda le due liste in un'unica lista ordinata.(Operazione di MERGE).

    Se volete aiutarmi, postatemi il codice per farlo, megli se ci mettete dentro anche qualche commento.

    Lo so che è una rottura di palle, ma se non avete niente da fare, o siete molto buoni...

    Vi ringrazio...
    Ciao, Poker32

  2. #2
    Ma frequenti mica il disi di Genova?

  3. #3
    Utente di HTML.it L'avatar di Poker32
    Registrato dal
    May 2001
    Messaggi
    240
    no, no. sono di un'altra zona.
    come mi puoi aiutare a risolvere questo problema?

  4. #4
    Ti do 1 implementazione veloce e semplice ke puoi cmq ottimizzare.
    Le liste sono ordinate in ordine decrescente e nn ci sono doppioni.

    ciao
    --------------------------------
    strucn Node {
    struct Node* previous;
    struct Node* next;
    int item;
    }

    struct List {
    struct Node* first;
    struct Node* last;
    int number;
    }

    struct List* merge (struct List* L1ptr, struct List* L2ptr)
    {
    struct Node* NofL1ptr = L1ptr->first;
    struct Node* NofL2ptr = L2ptr->first;
    struct Node* temp;
    if (NofL1ptr == NULL) {
    free (L1ptr);
    return L2ptr;
    }
    if (NofL2ptr == NULL) {
    free (L2ptr);
    return L1ptr;
    }
    for ( ;NofL1ptr != NULL; NofL1ptr = NofL1ptr->next)
    //INIZIO FOR
    while (NofL2ptr != NULL) {
    //INIZIO WHILE
    temp =NofL2ptr->next;
    if ((Nofl2ptr->item) > (NofL1ptr->item)) {
    NofL2ptr->previous = NofL1ptr->previous;
    NofL2ptr->next = NofL1ptr;
    NofL1ptr->previous =NofL2ptr;
    NofL2ptr =temp;
    if (NofL1ptr == L1ptr->first) L1ptr->first = NofL2ptr;
    L1ptr->number++;
    L2ptr->number--;
    } else if (Nofl2ptr->item == NofL1ptr->item) {
    free (NofL2ptr);
    NofL2ptr=temp;
    L2ptr->number--;
    break;
    } else {
    NofL2ptr = temp;
    break;
    }
    }
    //FINE WHILE
    //FINE FOR
    if (NofL2ptr != NULL) {
    L1ptr->last->next =NofL2ptr;
    NofL2ptr->previous = L1ptr->last;
    L1ptr->number += L2ptr->number;
    L1ptr->last =L2ptr->last;
    }
    free (l2ptr);
    return L1ptr;
    }
    //THE END


    [Messaggio modificato da Gohan!!!it'me!!! il 07-09-2001 alle 04:57 PM]

  5. #5
    Utente di HTML.it L'avatar di Poker32
    Registrato dal
    May 2001
    Messaggi
    240
    Io ti ringrazio Gohan, ma a prima vista non ho capito proprio niente. ci sono un casino di var. e di punt.
    Solitamente i programmi che creo, e che vedo sul mio libro,sono molto più sintetici e molto più comprensibili(senza offesa, naturalmente).
    Perchè?????
    Esempio:
    Un prog. che inserisce gli elementi in ordine in una lista

    struct el {tipo info;
    struct el *prox;
    }
    typedef struct el elemlista;
    typedef elemlista *listaelem;
    void Inserisci(listaelem *lista, tipo elem)
    {
    elemlista *punt, *puntcorr, *puntprec;
    puntprec=null;
    puntcorr=*lista;
    while(puntcorr!=null && elem>puntcorr->info)
    {
    puntprec=puntcorr;
    puntcorr=puntcorr->prox;
    }
    punt=malloc(sizeof(elemlista));
    punt->info=elem;
    punt->prox=puntcorr;
    if(puntprec)!=null
    puntprec->prox=punt;
    else
    *lista=punt;


    mi puoi commentare il tuo, e mi chiarisci qualche cosa?

  6. #6
    Utente di HTML.it L'avatar di JamesD
    Registrato dal
    Oct 2001
    Messaggi
    415
    Ho appena visto le liste e ho provato a fare un merge (che ovviamente non farà a caso tuo) ma in ogni caso prova a guardare se ti può servire...
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct cella * LIST;
    
    struct cella{
    	int cont;
    	LIST next;
    };
    
    void inser_ordinato (int x, LIST * punLL);
    void print (LIST LL);
    
    void main(){
    	LIST L1=NULL, L2=NULL;
    	int val=0;
    
    	while(true){
    		printf("\nInserisci un valore nella 1a lista. 10000 per uscire\n");
    		scanf("%d", &val);
    		if (val==10000) break;
    		inser_ordinato(val, &L1);
    	}
    
    	while(true){
    		printf("\nInserisci un valore nella 2a lista. 10000 per uscire\n");
    		scanf("%d", &val);
    		if (val==10000) break;
    		inser_ordinato(val, &L2);
    	}
    
    //faccio il merge delle liste passando alla funzione inserimento ordinato L1 com lista
    //e L2->cont come valore
    	while(L2 != NULL){
    		inser_ordinato(L2->cont, &L1);
    		L2=L2->next;
    	}
    
    	print(L1);
    }
    
    void inser_ordinato (int x, LIST * punLL){
    	LIST prec=NULL, succ=NULL;
    	LIST aux;
    
    	aux = (LIST) calloc (1, sizeof (struct cella));
    	aux->cont = x;
    
    	if((* punLL == NULL) || x < (* punLL)->cont){
    		aux->next = * punLL;
    		* punLL = aux;
    	}
    	else{
    		prec = * punLL;
    		succ = (* punLL)->next;
    		while((succ != NULL) && (succ->cont < x)){
    			succ = succ->next;
    			prec = prec->next;
    		}
    		aux->next = succ;
    		prec->next = aux;
    	}
    }
    
    void print (LIST LL){
    
    	printf("\nLista:\n");
    	while (LL != NULL){
    		printf("%d ", LL->cont);
    		LL = LL->next;
    	}
    	printf ("\n");
    }

  7. #7
    Ciao, non è che studi a Perugia?

  8. #8
    Utente di HTML.it L'avatar di Poker32
    Registrato dal
    May 2001
    Messaggi
    240
    ciao ragazzi.
    mi fa piacere ricevere le vostre risposte, ma diciamo che siete arrivati un pò in ritardo.

    questo post è di più di un anno fà.
    adesso ho risolto tutti i problemi, e per dirla tutta, ho passato sia l'esame di c che quello di c++.
    direi che adesso me la cavo molto bene sia con il c che con il c++.

    cmq grazie per avermi risposto, alla prossima...

    ciao, Poker32!

  9. #9
    hihihi!!:quote:

  10. #10
    Utente di HTML.it L'avatar di JamesD
    Registrato dal
    Oct 2001
    Messaggi
    415
    :master: :master:

    Ehm scusate mea culpa...

    Ho fatto una ricerca e m'era spuntato sto post e io ho risp senza badare alla data....:gren: :gren:


    Colpa dell'alcoolismo giovanile...

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.