Ho corretto il codice; c'erano diversi problemi che non sto ad elencarti: ti conviene guardare le differenze tra prima e ora.
Inoltre, secondo me, è sbagliata la funzione di dequeue: la tua enqueue inserisce un elemento in fondo alla lista (e questo va bene), mentre la tua dequeue elimina un elemento dalla testa della lista. Probabilmente dovrebbe invece eliminare un elemento dal fondo della coda, dato che il funzionamento dovrebbe essere FIFO (First In First Out). Comunque io ho lasciato come avevi scritto tu.
Ecco il codice:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct queueNode
{
char nome[12];
struct queueNode *nextPtr;
};
typedef struct queueNode QueueNode;
typedef QueueNode *QueueNodePtr;
void printQueue( QueueNodePtr currentPtr);
int isEmpty( QueueNodePtr headPtr);
char * dequeue( QueueNodePtr *headPtr, QueueNodePtr *tailPtr);
void enqueue( QueueNodePtr *headPtr,QueueNodePtr *tailPtr, char *value);
void instructions(void);
int main(int argc, char *argv[])
{
QueueNodePtr headPtr=NULL;
QueueNodePtr tailPtr=NULL;
int choice;
char name[12];
instructions();
printf("?");
scanf("%d",&choice);
while(choice!=3)
{
switch(choice)
{
case 1:
printf("Inserisci un nome\n");
scanf("%s",name);
enqueue(&headPtr,&tailPtr,name);
printQueue(headPtr);
break;
case 2:
printf("Togli nome dalla coda.\n");
char *nome_prelevato;
if(!isEmpty(headPtr))
{
nome_prelevato=dequeue(&headPtr,&tailPtr);
printf("%s e' stato rimosso.\n",nome_prelevato);
}
printQueue(headPtr);
break;
default:
printf("Scelta non valida!\n");
instructions();
break;
}
printf("Inserisci un numero di scelta\n");
scanf("%d",&choice);
}
printf("Fine del programma\n");
system("PAUSE");
return 0;
}
void instructions(void)
{
printf("Inserisci la tua scelta!\n"
"1. Per aggiungere un nome alla coda\n"
"2.Per rimuovere il nome dalla coda\n"
"3. Per terminare il programma\n");
}
void enqueue(QueueNodePtr *headPtr, QueueNodePtr *tailPtr, char *value)
{
QueueNodePtr newPtr;
newPtr=malloc(sizeof(QueueNode));
if(newPtr!=NULL)
{
strcpy(newPtr->nome, value);
newPtr->nextPtr=NULL;
if(isEmpty(*headPtr))
{
*headPtr=newPtr;
}
else
{
(*tailPtr)->nextPtr=newPtr;
}
*tailPtr=newPtr;
}
else
{
printf("%s non inserito. Memoria non disponibile!\n",value);
}
}
char * dequeue(QueueNodePtr *headPtr,QueueNodePtr *tailPtr)
{
char *value;
value = malloc(12 * sizeof(char));
QueueNodePtr tempPtr;//Puntatore ad un nodo temporaneo
strcpy(value, (*headPtr)->nome);
tempPtr=*headPtr;
*headPtr=(*headPtr)->nextPtr;
if(*headPtr==NULL)
{
*tailPtr=NULL;
}
free(tempPtr);
return value;
}
int isEmpty(QueueNodePtr headPtr)
{
return headPtr==NULL;
}
void printQueue(QueueNodePtr currentPtr)
{
if(currentPtr==NULL)
{
printf("La coda e' vuota!\n");
}
else
{
printf("La coda e':\n");
while(currentPtr!=NULL)
{
printf("%s --> ",currentPtr->nome);
currentPtr=currentPtr->nextPtr;
}
printf("NULL\n");
}
}
Ciao.