Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37

    [C/C++] creare lista ordinata

    Ciao a tutti, volevo realizzare un programma per l'inserimento dei valori in lista ordinata.Ho scritto il seguente codice ma come inserisco il primo valore si viene a verificare un errore.Mi aiutate a capire dove sbaglio?

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

    typedef struct list{
    int info;
    struct list *nextptr;
    }list;

    void inserisci_in_ordine(list**listptr,int value);
    void print_list(list*listptr);


    int main(int argc, char *argv[])
    {
    int value;
    int scelta;
    list *listptr;

    do {
    printf("\n cosa vuoi fare: \n 1)inserire \n 2)stampa lista");
    printf("\n 0) per terminare");
    scanf("%d",&scelta);
    switch (scelta)
    {
    case 1rintf("\n digita il valore da inserire-->");
    scanf("%d",&value);
    inserisci_in_ordine(&listptr,value);
    break;
    case 2rint_list(listptr);
    break;

    }
    }
    while (scelta!=0);

    system("PAUSE");
    return 0;
    }
    /************************************************** ****************************/
    void inserisci_in_ordine(list **listptr,int value)
    {
    while((*listptr)->info<value && ((*listptr)!=NULL) )
    listptr=&((*listptr)->nextptr);
    list *tmpptr;
    tmpptr=*listptr;
    (*listptr)=(list*)malloc(sizeof(list));
    (*listptr)->info=value;
    (*listptr)->nextptr=tmpptr;
    return ;
    }
    /****************************stampa**************** ****************************/
    void print_list(list *listptr)
    { printf("\n lista:");
    do
    {
    printf("--> %d ",listptr->info);
    listptr=listptr->nextptr;
    }
    while(listptr->nextptr!=NULL);
    printf("-->%d",listptr->info);
    return;
    }


    ciao e grazie a tutti!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    50
    Due cosette:
    codice:
     list *listptr = NULL;
    perchè poi quando vai a controllare se è NULL in realtà non lo è!!!

    codice:
     while(((*listptr)!=NULL) && (*listptr)->info<value)
    fai prima il controllo se è NULL e poi prova a entrare nella struttura!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37
    Grazie mille!!Ora funziona perfettamente!

  4. #4
    Utente di HTML.it L'avatar di eclips
    Registrato dal
    Apr 2005
    Messaggi
    48
    devi inizializzare prima di fare una qualsiasi operazione sulla lista::master:

    codice:
    void init (struct list **ptrptr){
    	*ptrptr=NULL;
    }
    saluti

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    50
    Facendo una piccola prova.. Ho notato che quando visualizzi la lista vuota da errore! Devi controllare sempre che il puntatore sia diverso da NULL prima di accedervi!!

  6. #6
    Utente di HTML.it L'avatar di eclips
    Registrato dal
    Apr 2005
    Messaggi
    48
    prova questo:

    codice:
    void visit(struct list *ptr){
     	if(ptr != NULL){
     		printf(" %d",ptr->value);
     		visit(ptr->nextptr);
     	}
    }

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    37
    grazie a tutti per l'interessamento e l'aiuto!!

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.