Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [C] definizione funzione lista

    come definisco una funziona che gestisce una lista se deve ricevere un intero come valore?

    struct num crea(int ins);
    è sbagliata?

    ecco la bozza di funzione
    struct num crea(int ins) {

    struct num p;
    int size;

    if (ins == '0')
    return NULL;
    else {
    size = sizeof(p);
    }
    }
    live free or die

  2. #2
    una lista di cui ogni elemento e' un numero?
    Se e' cosi' ho un codice su misura (appena fatto x l'uni.... )

  3. #3
    si....grande manda
    live free or die

  4. #4


    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>

    /* agli elementi della lista si accede tramite puntatore
    e' concatenata doppia con una sentinella, che e' il primo elemento della lista
    e che si distingue dagli altri perche' dato==0
    poi vedi tu quale valore ti e' + comodo
    */

    struct figura
    { int dato;
    struct figura *prev;
    struct figura *next;
    };

    typedef struct figura figura;

    figura *crealista(void)
    {
    figura *s = malloc(sizeof(figura)); /*alloco la memoria per il primo puntatore che è la sentinella*/

    if(!s) { fprintf(stderr,"Errore di allocazione nella creazione della lista\n");
    exit(-1); };

    s->next = s->prev = s;
    s->dato = 0;
    return s;
    }

    /*stampa la lista dalla testa alla coda*/
    void printfor (figura *p)
    { figura *q; /* l'iteratore attraversa la lista partendo dal primo elemento */
    for (q=p->next; (q->dato != 0); q=q->next)
    printf("%d\t",q->dato); }


    /* inserisce in coda alla lista puntata da s il numero n */
    figura *insertlista(figura *s, int n)
    {
    figura *q = malloc(sizeof(figura));

    if(!q) { fprintf(stderr,"Errore nell'allocazione del nuovo elemento\n");
    exit(-1); };
    q->dato = n;

    s->prev->next = q;
    q->prev = s->prev;
    s->prev = q;
    q->next = s;

    return s;
    }

    /* restituisce il puntatore al primo nodo della lista che contiene n
    se n e' presente; altrimenti stampa un msg*/
    figura* cercalista(figura *p, int n)
    { figura *q;
    for (q=p->next; (q->dato != 0); q=q->next)
    { if (q->dato == n)
    break; }
    return q; }

    /* cerca il numero f nella lista puntata da l; se non c'è non viene eseguito nulla */
    void cancellalista(figura *l, int f)
    { figura *it = l->next;
    figura *canc = cercalista(l,f);
    if ( canc != 0 )
    { canc->next->prev = canc->prev;
    canc->prev->next = canc->next;
    }
    }

    /* inserisce nella lista puntata da p il numero n
    in ordine crescente */
    void insertlista_ordine(figura *p, int n)
    {
    figura *q = malloc(sizeof(figura));
    figura *it;

    if(!q) { fprintf(stderr,"Errore nell'allocazione del nuovo elemento\n");
    exit(-1); };
    q->dato = n;

    for ( it = p->next; ((it->dato != 0) && (it->dato < n)); it = it->next)

    it->prev->next = q;
    q->prev = it->prev;
    it->prev = q;
    q->next = it;

    }




    l'ho adattata e compilata con gcc, fammi sapere se cmq da' errori in esecuzione o logici di qualunque genere! bye

  5. #5
    grazie 1000!
    ora lo stampo e lo vedo un po'




    per caso hai un contatto icq o msn?
    live free or die

  6. #6
    ho aggiornato i details
    (in effetti era ora... :adhone: )

  7. #7
    nn ti vedo su icq

    cmq hai per caso un main che usa la tua funzione di inserimento?

    xchè usi next e previous nella lista?
    live free or die

  8. #8
    prima di tutto sostituisci insertlista_ordine con questa che quella è bacata,


    figura* insertlista_ordine(figura *p, int elem)
    { figura *b;

    figura *q = malloc(sizeof(figura));
    if(!q) { fprintf(stderr,"Errore nell'allocazione del nuovo elemento\n");
    exit(-1); };
    q->dato = elem;

    for ( b = p->next;
    (b->dato && (b->dato)<elem);
    b = b->next);

    b->prev->next = q;
    q->prev = b->prev;
    b->prev = q;
    q->next = b;

    return q;
    }


    non mi hai trovato su icq x' ero nel laboratorio dell'università, non c'è un main in quanto quella è solo la struttura dati, poi tu ci fai quello che vuoi.. questo è un esempio


    main()
    { figura *lista = crealista(); /*creazione di una lista*/

    insertlista_ordine(lista, 23); /*inserimento in ordine di alcuni elementi*/
    insertlista_ordine(lista, 5);
    insertlista_ordine(lista, 4);
    insertlista_ordine(lista, 9);

    cancellalista(lista,5); /*cancellazione di un elemento*/
    cancellalista(lista, 56); /*l'elemento non c'è e non si fa nulla*/
    printfor(lista);
    }


    next punta all'elemento successivo, prev a quello precedente.
    prev della sentinella punta all'ultimo elemento, next della sentinella al primo della lista.
    Di conseguenza prev del primo punta alla sentinella, next del primo al secondo elemento e così via, finchè next dell'ultimo elemento punta ancora alla sentinella........ la struttura è circolare

  9. #9
    senti una cosa....ma xchè tu fai un crealista(void)?
    crei una lista e quale valore dai al primo elemento?

    c6 su icq?
    live free or die

  10. #10
    ne ho preparato un altro + semplice...prima andava con qualche warning ora mi da qualche errorino...ma nn capisco xchè

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    struct fanculo {
    	int n;
    	struct fanculo *next;
    };
    
    
    struct fanculo *crea();
    struct fanculo *aggiungi(struct fanculo *p, int val);
    
    main()
    {
    	struct fanculo *listaPtr;
    	listaPtr = crea();
    	aggiungi(struct listaPtr *p, 5);
    }
    
    
    struct fanculo *crea()
    {
    	int size;
    	struct fanculo *p;
    	size = sizeof(struct fanculo);
    	p = malloc(size);
    	
    	p->n = 0;
    	p->next = NULL;
    }
    
    
    struct fanculo *aggiungi(struct fanculo *p, int val) {
    	
    	int size;
    	struct fanculo *p, *paus;
    	size = sizeof(struct fanculo);
    	paus->next = malloc(size);
    	paus = paus->next;
    	
    	paus->n = val;
    	paus->next = NULL;
    }
    live free or die

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.