Ciao a tutti, sto studiando il C e cercando di capire come implementare una coda. Vi scrivo il codice:
Creo una struttura di tipo struct queueNode
struct queueNode
{
char data;
struct queueNode *nextPtr;
};
typedef struct queueNode QueueNode;
typedef QueueNode *QueueNodePtr;
La prima domanda è:
Cosa fa precisamente
typedef struct queueNode QueueNode; ? da quello che ho capito, crea solamente un sinonimo per queueNode, ossia creo una variabile QueueNode di tipo struct queueNode. Quindi invece di chiamare struct queueNode (quando necessario) chiamo semplicemente QueueNode senza ripetere "struct" e inoltre QueueNode è come se diventasse un "tipo" (come int o char) creato da me. E' corretto? Serve solo a questo utilizzare la keyword "typedef"?
typedef QueueNode *QueueNodePtr; Questo dovrebbe creare un puntatore chiamato QueueNodePtr di tipo struct QueueNode. Giusto?
Per la seconda domanda, vi allego un altro pezzetto di codice:
La funzione che inserisce un elemento:
void enqueue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr, char value)
{
QueueNodePtr newPtr;
newPtr = malloc( sizeof(QueueNode));
if( newPtr != NULL)
{
newPtr->data = value;
newPtr->nextPtr = NULL;
printf("Il valore di *headPtr e': %c\n", *headPtr); // Questo e' il secondo problema.
// Codice ...
}
}
Piccolo frammento di main:
int main(void)
{
QueueNodePtr headPtr = NULL;
QueueNodePtr tailPtr = NULL;
int choice;
char item;
// Altro codice ...
return 0;
}
La domanda quindi e': Come faccio a stampare il valore puntato da "headPtr" ? Dovrebbe essere NULL vero (come impostato da main) ? Il compilatore mi dice:
warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘QueueNodePtr’ [-Wformat=]
printf("Il valore di *headPtr e': %c\n", *headPtr);
^
In teoria headPtr dovrebbe essere un puntatore di tipo struct QueueNode, corretto?
Lo stesso codice è riportato sul libro Deitel&Deitel (sto studiando lì), non è il mio.
Grazie della disponibilità e scusate se mi sono dilungato.