Вы используете односвязный список, поэтому исключайте его только из головы.
Если вы хотите выскочить из хвоста, вам нужно использовать двусвязный список
#include <stdio.h>
#include <stdlib.h>
typedef struct aNODE {
int data;
struct aNODE * pNext;
} NODE;
NODE *rear, *front;
int count;
void initQueue()
{
rear = NULL;
front = NULL;
count = 0;
}
void enqueue(int data)
{
NODE* newNode = (NODE *) malloc( sizeof(NODE) );
newNode->pNext = NULL;
newNode->data = data;
/* TH1. Queue ban dau rong */
if ( count == 0 )
{
front = newNode;
rear = newNode;
count++;
} else { /* TH2. Khac rong */
rear->pNext = newNode;
rear = newNode;
count++;
}
}
NODE* dequeue()
{
if (!front)
{
return(NULL);
}
NODE* tmp = front;
front = front->pNext;
count--;
return(tmp);
}
int size()
{
return(count);
}
int main()
{
initQueue();
printf("size %d\n", size());
for (int i = 0; i < 100; i++)
{
enqueue(i + 1);
}
printf("size %d\n", size());
for (int i = 0; i < 50; i++)
{
dequeue();
}
printf("size %d\n", size());
return(0);
}