Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C]Lista ordinata

  1. #1

    [C]Lista ordinata

    Buongiorno a tutti!
    Ho appena iniziato a studiare le strutture di dati dal libro Deitel & Deitel. C'è un esercizio svolto che ho provato a rifare e continua a darmi 2 errori.
    L'esercizio chiede di inserire e rimuovere lettere in ordine alfabetico in una lista tramite un menù. Grazie a tutti! Ecco il codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    struct listNode {
           char data;
           struct listNode *nextPtr;
           };
    
    typedef struct listNode LISTNODE;
    typedef LISTNODE *LISTNODEPTR;
    
    void instructions( void );
    void insert( LISTNODEPTR *sPtr, char value );
    void printList( LISTNODEPTR currentPtr );
    int isEmpty( LISTNODEPTR sPtr );
    char deleteC( LISTNODEPTR *sPtr, char value );
    
    
    main()
    {
          int choice;
          char item;
          LISTNODEPTR startPtr = NULL;
          
          instructions();
          printf("?  ");
          scanf("%d", &choice);
          
          while ( choice != 3 )
          {
                switch (choice) {
                       case 1:
                            printf("Enter a character: ");
                            scanf("%c", &item);
                            insert(&startPtr, item);
                            printList(startPtr);
                            break;
                       case 2:
                            if (!isEmpty(startPtr))
                            {
                                printf("Enter character to be deleted: ");
                                scanf("%c", &item);
                                
                                if (deleteC(&startPtr, item))
                                {
                                    printf("%c deleted.\n", item);
                                    printList(startPtr);
                                }
                                else
                                    printf("%c not found.\n\n", item);
                            }
                            else
                                printf("List is empty.\n");
                            
                            break;
                       default:
                               printf("Invalid choice.\n\n");
                               instructions();
                               break;
                }
                
                printf("?  ");
                scanf("%d", &choice);
          }
          
          printf("End of run.\n");
          system("pause");
    }
    
    
    
    void instructions( void )
    {
         printf("Enter your choice:\n"
                "1 to insert an element into the list.\n"
                "2 to delete an element from the list.\n"
                "3 to end.\n\n");
    }
    
    void insert ( LISTNODEPTR *sPtr, char value )
    {
         LISTNODEPTR newPtr, previousPtr, currentPtr;
         
         newPtr = malloc(sizeof(LISTNODEPTR));
         
         if ( newPtr != NULL )
         {
              newPtr->data = value;
              newPtr->nextPtr = NULL;
              
              previousPtr = NULL;
              currentPtr = *sPtr;
              
              while ( currentPtr != NULL && value > currentPtr->data )
              {
                    previousPtr = currentPtr;
                    currentPtr = currentPtr->nextPtr;
              }
              
              if ( previousPtr == NULL )
              {
                   newPtr->nextPtr = *sPtr;
                   *sPtr = newPtr;
              }
              else
              {
                  previousPtr->nextPtr = newPtr;
                  newPtr->nextPtr = currentPtr;
              }
         }
         else
             printf("%c not inserted. No memory available.\n", value);
    }
    
    void printList( LISTNODEPTR currentPtr )
    {
         if ( currentPtr == NULL )
            printf("The list is empty.\n");
         else
         {
             printf("The list is:\n");
             
             while ( currentPtr != NULL )
             {
                   printf("%c --> ", currentPtr->data);
                   currentPtr = currentPtr->nextPtr;
             }
             
             printf("NULL\n\n");
         }
    }
    
    int isEmpty( LISTNODEPTR sPtr )
    {
        return sPtr == NULL;
    }
    
    char deleteC( LISTNODEPTR *sPtr, char value )
    {
         LISTNODEPTR previousPtr, currentPtr, tempPtr;
         
         if ( value == (*sPtr)->data )
         {
              tempPtr = *sPtr;
              sPtr = (*sPtr)->nextPtr;
              free(tempPtr);
              return value;
         }
         else
         {
             previousPtr = *sPtr;
             currentPtr = (*sPtr)->nextPtr;
             
             while ( currentPtr != NULL && currentPtr->data != value )
             {
                   previousPtr = currentPtr;
                   currentPtr = currentPtr->nextPtr;
             }
             
             if ( currentPtr != NULL ) 
             {
                  tempPtr = currentPtr;
                  previousPtr->nextPtr = currentPtr->nextPtr;
                  free(tempPtr);
                  return value;
             }
         }
         
         return '\0';
    }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [C]Lista ordinata

    Originariamente inviato da MrLukeKobe24
    C'è un esercizio svolto che ho provato a rifare e continua a darmi 2 errori.
    Che errori?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    85 invalid conversion from `void*' to `LISTNODE*'

    146 cannot convert `listNode*' to `LISTNODE**' in assignment

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da MrLukeKobe24
    85 invalid conversion from `void*' to `LISTNODE*'

    146 cannot convert `listNode*' to `LISTNODE**' in assignment
    Immagino sia troppo chiederti di evidenziare tali righe, in modo da non costringere la gente a copia-incollare il tuo codice...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Ti chiedo scusa hai ragione ma sono riuscito a risolvere con un pò d'aiuto! 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.