I'm having a problem with removing an item from a queue. At first in the debugger I got SIGTRAP but I don't get it anymore but the problem still exists. When you try to remove an item from the queue the first nothing happens. Here's the code below compile it and you see what I'm talking about.
Code:
#include <stdio.h>
#include <stdlib.h>
struct Node
{
char let;
struct Node *nextNode;
};
typedef struct Node queueNode;
typedef struct Node *Queue;
void enqueue(Queue *headNode, Queue *tailNode, char letter);
char dequeue(Queue *headNode, Queue *tailNode);
int Empty(Queue headNode);
void printQueue(Queue headNode);
int main(void)
{
Queue headNode = NULL;
Queue tailNode = NULL;
int option;
char letter;
printf("%s\n%s\n%s\n\n%s\n", "1) Add letter", "2) Remove letter", "3) list queue", "4) End");
scanf("%d", &option);
while(option != 4)
{
switch(option)
{
case 1:
printf("Enter a letter to added: ");
scanf("%c", &letter);
enqueue(&headNode, &tailNode, letter);
break;
case 2:
if(!Empty(headNode))
{
letter = dequeue(&headNode, &tailNode);
printf("Node containing \'%c\' was removed\n", letter);
}
else
{
printf("The queue is already empty!\n");
}
break;
case 3:
printQueue(headNode);
break;
case 4:
printf("\nExiting....\n");
break;
default:
printf("Invalid Entry!!!\n");
printf("Enter a new option: ");
break;
}
scanf("%d", &option);
}
return 0;
}
void enqueue(Queue *headNode, Queue *tailNode, char letter)
{
Queue newNode;
newNode = malloc(sizeof(queueNode));
if(newNode != NULL)
{
newNode->let = letter;
newNode->nextNode = NULL;
if(Empty(*headNode))
{
*headNode = newNode;
}
else
{
(*tailNode)->nextNode = newNode;
}
*tailNode = newNode;
}
else
{
printf("Could NOT update queue!\n");
}
}
char dequeue(Queue *headNode, Queue *tailNode)
{
Queue Temp;
char let;
let = (*headNode)->let;
Temp = *headNode;
*headNode = (*headNode)->nextNode;
if(*headNode == NULL)
{
*tailNode = NULL;
}
free(Temp);
return let;
}
int Empty(Queue headNode)
{
return headNode == NULL;
}
void printQueue(Queue curNode)
{
if(curNode == NULL)
{
printf("Queue is empty!\n");
}
else
{
printf("\nItems in queue:\n\t");
while(curNode != NULL)
{
printf("%c --> ", curNode->let);
curNode = curNode->nextNode;
}
printf("\nQueue listing complete.\n");
}
}
EDIT: I corrected the typedef and I still get the problem.
Code:
typedef struct Node queueNode;
typedef queueNode *Queue;