//数组的实现
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int dataType;
typedef struct QNode {
dataType data;
int front;
int base;
} Queue;
int initQueue( Queue *q )
{
q->front = q->base = -1;
return OK;
}
int emptyQueue( Queue *q )
{
return ( q->front == q->base );
}
int enQueue( Queue *q, dataType data )
{
q->base++;
q[q->base].data = data;
return OK;
}
dataType deQueue( Queue *q )
{
dataType data;
if( emptyQueue( q ))
return ERROR;
q->front++;
data = q[q->front].data;
return data;
}
int main()
{
Queue *q = ( Queue * ) malloc( sizeof( Queue ));
initQueue( q );
for(int i = 1; i <= 1000; i++)
enQueue( q, i );
for(int j = 0; j < 1000; j++)
printf( "%d ", deQueue( q ));
printf("/n");
return 0;
}
//链表的实现
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int dataType;
typedef struct QNode {
dataType data;
struct QNode *next;
} QNode;
typedef struct {
QNode *front;
QNode *rear;
} LinkQueue;
int initQueue( LinkQueue *queue )
{
if( !( queue->front = queue->rear = ( QNode * ) malloc( sizeof( QNode )) ) )
return ERROR;
queue->rear->next = NULL;
return OK;
}
int emptyQueue( LinkQueue *queue )
{
return ( queue->front == queue->rear );
}
int enQueue( LinkQueue *queue, dataType data )
{
QNode *node = NULL;
if( !( node = ( QNode * ) malloc( sizeof( QNode )) ) )
return ERROR;
node->data = data;
node->next = NULL;
queue->rear->next = node;
queue->rear = node;
return OK;
}
dataType deQueue( LinkQueue *queue )
{
QNode *node = NULL;
dataType data;
if( emptyQueue( queue ))
return ERROR;
node = queue->front->next;
data = node->data;
queue->front->next = node->next;
if( node == queue->rear )
queue->rear = queue->front;
free(node);
return data;
}
int destoryQueue( LinkQueue *queue )
{
while( queue->front )
{
queue->rear = queue->front->next;
free( queue->front );
queue->front = queue->rear;
}
return OK;
}
int main()
{
LinkQueue *q = ( LinkQueue * ) malloc( sizeof( LinkQueue ));
initQueue( q );
enQueue( q, 1 );
enQueue( q, 4 );
enQueue( q, 6 );
enQueue( q, 8 );
enQueue( q, 7 );
destoryQueue( q );
int i = 0;
while( i++ < 5 )
printf("%d ", deQueue( q ));
printf(" /n ");
return 0;
}