Help con un programma C

di il
5 risposte

Help con un programma C

La consegna è questa: Sia data una lista semplicemente concatenata i cui nodi contengano un singolo
carattere. Verificare se la parola rappresentata dalla lista è palindroma.

e io ho scritto questo programma.
#include <stdio.h>
#include <stdlib.h>

typedef struct a{
char info;
struct a * prox;
} nodo;
typedef nodo * ListaDiElem;

int ListaVuota( ListaDiElem lista ) {
return lista == NULL;
}

ListaDiElem InsInTesta ( ListaDiElem lista, char elem ) {
ListaDiElem punt;
punt = (ListaDiElem) malloc(sizeof(nodo));
punt->info = elem;
punt->prox = lista;
return punt;
}

ListaDiElem InsInFondo( ListaDiElem lista, char elem ) {
ListaDiElem punt, cur = lista;
punt = (ListaDiElem) malloc( sizeof(nodo) );
punt->prox = NULL;
punt->info = elem; /* Crea il nuovo nodo */
if ( ListaVuota(lista) )
return punt; /* => punt è la nuova lista */
else {
while( cur->prox != NULL ) /* Trova l’ultimo nodo */
cur = cur->prox;
cur->prox = punt; /* Aggancio all’ultimo nodo */ }
return lista;
}

ListaDiElem Inizializza( void ) {
return NULL;
}

ListaDiElem Reverse1( ListaDiElem lista ) {
ListaDiElem temp = Inizializza(), curr = lista;
while( ! ListaVuota(curr) ) {
temp = InsInTesta( temp, curr->info );
curr = curr->prox; }

}

int LisPal ( ListaDiElem lista ) {
ListaDiElem listainv;
listainv=Reverse1(lista);

while(!ListaVuota(lista)) {
if(((lista->info)-(listainv->info))!=0) return 0;
lista=lista->prox; listainv=listainv->prox; }
return 1;
}

int main() {
char l;
ListaDiElem lista1;
lista1=Inizializza();
printf("Inserire una parola carattere per carattere, 0 per terminare la parola: ");
do {
scanf("%c", &l);
InsInFondo( lista1, l );
} while(l!='0');
printf("\n\n--->%d", LisPal(lista1));
return 0;
}

Non so dove sbaglio.

5 Risposte

  • Re: Help con un programma C

    Prima di tutto è meglio se usi il tag code per il codice che posti.
    Dopodiché di consiglio di dividere il codice e scrivere queste funzioni:
    - una funzione che stampa il contenuto di una lista
    - una funzione che crea una nuova lista invertendo una lista passata come argomento (e che puoi verificare richiamando la funzione scritta sopra)
    - una funzione che confronta due liste e ti dice se sono uguali oppure no
    Buon lavoro!
  • Re: Help con un programma C

    Che è esattamente quello che ho fatto. Ma non funziona.
  • Re: Help con un programma C

    Dov'è la funzione che stampa il contenuto di una lista?
    Hai provato a richiamarla con la lista dopo l'input dell'utente?
    Dov'è la funzione che crea una nuova lista invertendo una lista? Puoi stampare a video il contenuto della nuova lista?
  • Re: Help con un programma C

    Allora effettivamente mi manca quella di stampa, hai ragione ma quella di inversione c'è (reverse). Comunque dopo Correggio e vi aggiornò. Grazie!
  • Re: Help con un programma C

    La funzione di stampa ti serve principalmente per debug, per verificare il contenuto delle liste e individuare più facilmente dove sta il problema. Le altre due funzioni che ti ho suggerito (inversione e confronto) potranno fare insieme quello che la tua LisPal() vorrebbe fare: spezzettando e usando la funzione di stampa potrai capire se è l'inversione che sbaglia oppure se è il confronto a sbagliare. Buon lavoro
Devi accedere o registrarti per scrivere nel forum
5 risposte