-
help with queues
Ive spent about 5 hours trying to put this together and I get nothing for my effort. Maybe Im just a beginner who shouldnt be in this class. Can anyone help me on getting this queue project to work.And if you dont want to help do you know where i can learn more about queues . THanx.
Here is the code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include "queues.h"
/*Que ADT type definition*/
typedef struct node
{
void *dataPtr;
struct node *next;
} QUEUE_NODE;
typedef struct
{
QUEUE_NODE *front;
QUEUE_NODE *rear;
int count;
} QUEUE;
/*prototype declarations*/
QUEUE *createQueue (void);
QUEUE *destroyQueue (QUEUE *queue);
int dequeue (QUEUE *queue, void **itemPtr);
int enqueue (QUEUE *queue, void *itemPtr);
int queueFront (QUEUE *queue, void **itemPtr);
int queueRear (QUEUE *queue, void **itemPtr);
int queueCount (QUEUE *queue);
int emptyQueue (QUEUE *queue);
int fullQueue (QUEUE *queue);
/*End of Queue ADT defintions*/
int main (void)
{
char letter;
printf("Choose a function to perform\n"
"A. Enqueue data into queue\n"
"B. Dequeu and print data\n"
"C. Print data at the front\n"
"D. Print data at the rear\n"
"E. Print entire queue\n"
"F. Print queue status: Empty\n"
"G. Print queue status: Full\n"
"H. Print number of element in queue\n"
"I. Destroy queue and quit\n");
scanf("%c",&letter);
switch(letter)
{
case 'A'rintf("Enqueue data into queue\n");break;
case 'B'rintf("Dequeu and print data\n");break;
case 'C'rintf("Print data at the front\n");break;
case 'D'rintf("Print data at the rear\n");break;
case 'E'rintf("Print entire queue\n");break;
case 'F'rintf("Print queue status: Empty\n");break;
case 'G'rintf("Print queue status: Full\n");break;
case 'H'rintf("Print number of element in queue\n");break;
case 'I'rintf("Destroy queue and quit\n");break;
defaultrintf("bad choice\n");
}
return 0;
}
/*createQueue*/
QUEUE *creatQueue (void)
{
QUEUE *queue;
queue = (QUEUE *) malloc (sizeof (QUEUE));
if (queue)
{
queue->front = NULL;
queue->rear = NULL;
queue->count = 0;
}
return queue;
}
/*creatQueue*/
/*enqueue*/
int enqueue (QUEUE *queue, void *itemPtr)
{
QUEUE_NODE *newPtr;
if (!(newPtr = (QUEUE_NODE *)malloc(sizeof(QUEUE_NODE))))
return 0;
newPtr->dataPtr = itemPtr;
newPtr->next = NULL;
if (queue->count ==0)
queue->front = newPtr;
else
queue->rear->next = newPtr;
(queue->count)++;
queue->rear = newPtr;
return 1;
}
/*enqueue*/
/*dequeue*/
int dequeue (QUEUE *queue, void **itemPtr)
{
QUEUE_NODE *deleteLoc;
if (!queue->count)
return 0;
*itmePtr = queue->front->dataPtr;
deleteLoc = queue->front;
if (queue->count == 1)
queue->rear = queue->front = NULL;
else
queue->front = queue->front->next;
(queue->count)--;
free (deleteLoc);
return 1;
}
/*dequeue*/
/*queueFront*/
int queueFront (QUEUE *queue, void **itemPtr)
{
if(!queue->count)
return 0;
else
{
*itemPtr = queue->front->dataPtr;
return 1;
}
}
/*queueFront*/
/*queueRear*/
int queueRear (QUEUE *queue, void **itemPtr)
{
if(!queue->count)
return 0;
else
{
*itemPtr = queue->rear->dataPtr;
return 1;
}
}
/*queueRear*/
/*emptyqueue*/
int emptyQueue (QUEUE *queue)
{
return (queue->count == 0);
}
/*emptyqueue*/
/*fullQueue*/
int fullQueue (QUEUE *queue)
{
QUEUE_NODE *temp;
if ( (temp = (QUEUE_NODE *)malloc (sizeof (QUEUE_NODE))) )
{
free(temp);
return 0;
}
return 1;
}
/*fullQueue*/
/*queueCount*/
int queueCount ( QUEUE *queue)
{
return queue->count;
}
/*queueCount*/
/*destroyQueue*/
QUEUE *destroyQueue (QUEUE *queue)
{
QUEUE_NODE *deletePtr;
if (queue)
{
while (queue->front != NULL)
{
free (queue->front->dataPtr);
deletePtr = queue->front;
queue->front = queue->front->next;
free (deletePtr);
}
free (queue);
}
return NULL;
}
/*destroyQueue*/
-
Just a small tip, when you post your code, post it straight from the text editor you use. This way when you put it in code tags the indentaion will remain intact.
> do you know where i can learn more about queues .
You could always try Google, or any of the various source code sites which offer downloads of typical programming projects.
-
Quote:
Code:
int main (void)
{
char letter;
printf("Choose a function to perform\n"
"A. Enqueue data into queue\n"
"B. Dequeu and print data\n"
"C. Print data at the front\n"
"D. Print data at the rear\n"
"E. Print entire queue\n"
"F. Print queue status: Empty\n"
"G. Print queue status: Full\n"
"H. Print number of element in queue\n"
"I. Destroy queue and quit\n");
scanf("%c",&letter);
switch(letter)
{
case 'A'rintf("Enqueue data into queue\n");break;
case 'B'rintf("Dequeu and print data\n");break;
case 'C'rintf("Print data at the front\n");break;
case 'D'rintf("Print data at the rear\n");break;
case 'E'rintf("Print entire queue\n");break;
case 'F'rintf("Print queue status: Empty\n");break;
case 'G'rintf("Print queue status: Full\n");break;
case 'H'rintf("Print number of element in queue\n");break;
case 'I'rintf("Destroy queue and quit\n");break;
defaultrintf("bad choice\n");
}
return 0;
}
Can anyone spot the problem with this code? (Omitting the fact that your case statement is incorrect because the forum ate the colon and the p from printf...)
You know why you aren't getting anything? Because you DON'T DO ANYTHING OTHER THAN CALL PRINTF! Your program exits right after that.
Quzah.
-