Hi
I need help with a queue I'm running VC 6
I have no errors i compiles right it can push but it can't pop. any help would be appreciated. Thanks ahead of time
[CODE]
#include <stdio.h>
#include <stdlib.h>
#define N 7
typedef struct kwutemp
{
int *item;
int size;
int front;
int end;
}KWU;
KWU *K;
KWU *QueueCreate(int nItem);
void QueueDestr(KWU *K);
void QueueStart(KWU *k, int pos);
void QueueEnd(KWU *K, int *pt);
int QueueFull(KWU *K);
int QueueEmpty(KWU *K);
int main(void)
{
char s[16];
int t;
int pos;
QueueCreate(N);
printf("Type 'E' to enter a value and 'R' to remove a value and 'Q' to quit.\n");
if (K == NULL) { perror("queue03"); exit (1); }
for (;
{
fgets(s, sizeof(s), stdin);
if (feof(stdin)) break;
printf("Add, Remove or Quit: %s", s);
if (s[0] == 'E' || s[0] == 'e') QueueStart(K, atoi(s + 1));
if (s[0] == 'R' || s[0] == 'r') QueueEnd(K, &pos);
if (s[0] == 'Q' || s[0] == 'q')
{
QueueDestr(K);
break;
}
else
{
printf("Front = %d\n", K->front);
printf("Last = %d\n", K->end);
for (t=0; t < K->size; t++)
{
printf("Queue - [%d] -- %d", t, K->item[t]);
if (K->front == t) printf(" <-- first");
if (K->end == t) printf(" <-- end");
printf("\n");
}
printf("\n");
}
}
return 0;
}
KWU *QueueCreate(int nItem)
{
int t;
int tmp = 0;
K = (KWU *)malloc(sizeof(KWU));
if (K == NULL) { perror("queue03"); exit (1); }
K->item = (void *) malloc(nItem*sizeof(void*));
if (K->item == NULL) { perror("queue03"); exit (1); }
K->size = nItem;
K->front = -1;
K->end = 0;
for (t=0; t < K->size; t++)
K->item[t] = 0;
return K;
}
void QueueDestr(KWU *K)
{
free(K->item);
free(K);
return;
}
void QueueStart(KWU *k, int pos) /* Queue push */
{
if (!QueueFull(K) )
{
K->front = 1 + K->front;
K->item[K->front] = pos;
}
else puts ("No room in queue");
return;
}
void QueueEnd(KWU *K, int *pt) /* Queue Pop */
{
int next;
if (QueueEmpty(K))
{
puts("Nothing to remove");
return ;
}
else
{
*pt = K->item[K->front];
K->item[K->front] = 0;
if (K->front == K->end) K->front = K->end = -1;
else
{
next = K->front + 1;
if (next >= K->size) next = 0;
K->front = next;
}
}
return ;
}
int QueueFull(KWU *K)
{
int next;
next = 1 + K->front;
if (next > -1 + K->size) return 1;
else return 0;
/*if (K->front < N)
return 0;
else
return 1;*/
}
int QueueEmpty(KWU *K)
{
if (K->front - 1) return 0;
else return 1;
}
[CODE]
I must be doing something wrong I tried to insert the code otion and it isn't working Sorry in advance.