Salve a tutti ragazzi, sto cercando di fare un programma che mi inserisce degli interi in una lista e nell'intero 5 crea una sottolista e inserisce dei caratteri, il tutto fatto con dei cicli for che poi verranno sostituiti dall'inserimento manuale (quando riuscirò a farlo funzionare).
Il programma inserisce gli interi da 0 a 9 con inserimento in testa, poi crea una sottolista nell'elemento 5 e inserisce dei caratteri. Premendo 2, si fa la stampa delle liste. Il problema è che non mi stampa correttamente la sottolista e non riesco a capire dove sbaglio.
Ho messo dei printf qua e la per capire se l'inserimento avviene correttamente e sembra proprio di si. Il problema credo sia nella funzione stampa, ma non riesco a correggerlo.
Ecco il codice....grazie a tutti in anticipo
#include <stdio.h>
#include <stdlib.h>
/***** S T R U T T U R E ******/
struct sotto_nodo
{
char carattere;
struct sotto_nodo *nextPtr1;
};
struct nodo
{
int intero;
struct nodo *nextPtr; //puntatore al nodo successivo
struct sotto_nodo *sottonodoPtr; //puntatore al tipo struct sotto_nodo di nome sottonodoPtr
};
/****** T Y P E D E F ******/
typedef struct sotto_nodo SottoNodo;
typedef struct nodo Nodo;
typedef SottoNodo *SottoNodoPtr;
typedef Nodo *NodoPtr;
/****** P R O T O T I P I D I F U N Z IO N E ******/
void menu();
NodoPtr crea_lista(int elemento1);
void inserisci_lista (NodoPtr *head, int elementi);
SottoNodoPtr trova (NodoPtr head, int elemento);
void inserisci_sottolista (SottoNodoPtr *head1, char caratteri);
void stampa(NodoPtr testalistaPtr);
/****** M A I N ******/
int main (void)
{
NodoPtr testaPtr = NULL;
SottoNodoPtr testaPtr1 = NULL;
menu();
int scelta;
do {
printf("Fai una scelta: ");
fflush(stdin);
scanf("%d", &scelta);
switch (scelta)
{
case 1:
{
int i;
char j;
int elem1 = 0 ;
testaPtr = crea_lista(elem1);
for (i = 1; i < 10; i++)
{
inserisci_lista(&testaPtr, i);
printf("inserito %d in lista principale\n", testaPtr->intero);
}
testaPtr1 = trova(testaPtr, 5);
printf("\ntrovato l'elemento cercato\n\n");
for (j = 'a' ; j < 'l'; j++)
{
inserisci_sottolista(&testaPtr1, j);
printf("inserito %c in lista secondaria\n", testaPtr1->carattere);
}
}
break;
case 2:
stampa(testaPtr);
break;
}
}
while (scelta != 3);
}
/****** I M P L E M E N T A Z I O N E F U N Z I O N I ******/
void menu()
{
printf("1. Inserire elementi nella lista principale e nella sottolista\n");
printf("2. Stampare elementi\n");
printf("3. Termina programma\n");
};
NodoPtr crea_lista (int elemento1)
{
NodoPtr headPtr = malloc(sizeof(Nodo));
headPtr->intero = elemento1;
headPtr->nextPtr = NULL;
headPtr->sottonodoPtr = NULL;
return headPtr;
};
void inserisci_lista (NodoPtr *head, int elementi)
{
NodoPtr newPtr = malloc(sizeof(Nodo));
newPtr->intero=elementi;
newPtr->nextPtr = *head;
*head = newPtr;
};
SottoNodoPtr trova (NodoPtr head, int elemento)
{
while (head->intero != elemento && head != NULL)
{
head = head->nextPtr;
}
if (head->intero == elemento)
return head->sottonodoPtr;
else
return NULL;
};
void inserisci_sottolista (SottoNodoPtr *head1, char caratteri)
{
SottoNodoPtr newPtr = malloc(sizeof(SottoNodo));
newPtr->carattere = caratteri;
newPtr->nextPtr1 = *head1;
*head1 = newPtr;
};
void stampa(NodoPtr testalista)
{
printf("head -> ");
NodoPtr copia_testalista = testalista;
while (testalista != NULL)
{
printf("%d -> ", testalista->intero);
testalista = testalista->nextPtr;
}
printf("NULL\n");
SottoNodoPtr SubPtr = copia_testalista->sottonodoPtr;
while (copia_testalista != NULL)
{
printf("headsub -> (%d) -> ", copia_testalista->intero);
while (SubPtr != NULL)
{
printf("%d -> ", SubPtr->carattere);
SubPtr = SubPtr->nextPtr1;
}
printf("NULL\n");
copia_testalista = copia_testalista->nextPtr;
}
};