队列的特点是先进先出 FIFO
代码实现
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
#include "queue.h"
int dumpQueue(st_queue * queue){
if(NULL == queue){
return SUCCESS;
}
st_dataNode * iter = NULL;
printf("========= Dump Queue %p ===========\n", queue);
printf("\t head = %p \n", queue->head);
printf("\t tail = %p \n\t", queue->tail);
iter = queue->head;
while(NULL != iter){
printf(" %d ", iter->data);
iter = iter->next;
}
printf("\n");
printf("===================================\n");
return SUCCESS;
}
st_queue * createQueue(void){
st_queue * q = NULL;
q = (st_queue *)malloc(sizeof(st_queue));
if(NULL == q){
printf("createQueue malloc failed\n");
return NULL;
}
q->head = NULL;
q->tail = NULL;
return q;
}
int inQueue(st_queue * queue, int data){
if(NULL == queue){
printf("%s param error \n");
return PARAM_ERR;
}
st_dataNode * node = createListNode(data);
if(NULL == node){
printf("%s createListNode error \n");
return ALLOC_ERR;
}
if(NULL == queue->head){ /*队列第一个元素*/
queue->head = node;
queue->tail = node;
} else { /*不是首节点,加到最后, 更新queue的tail*/
queue->tail->next = node;
queue->tail = node;
}
return SUCCESS;
}
st_dataNode * deQueue(st_queue * queue){
if(NULL == queue){
printf("%s param error \n");
return NULL;
}
st_dataNode * p = NULL;
/*队列头退出*/
p = queue->head;
if(NULL == p){ /*空对列*/
return NULL;
}
/*出队*/
queue->head = p->next;
return p;
}
int getQueueLength(st_queue * queue){
if(NULL == queue){
printf("%s param error \n");
return PARAM_ERR;
}
st_dataNode * p = NULL;
int len = 0;
len = getListLen(queue->head);
return len;
}
void testQueue(void){
st_dataNode * p = NULL;
int len = 0;
gqueue = createQueue();
inQueue(gqueue, 22);
inQueue(gqueue, 32);
inQueue(gqueue, 19);
inQueue(gqueue, 53);
inQueue(gqueue, 0);
inQueue(gqueue, 47);
inQueue(gqueue, 29);
len = getQueueLength(gqueue);
printf("Queue len = %d\n", len);
dumpQueue(gqueue);
p = deQueue(gqueue);
if(NULL != p)
printf("Dequeue p = %d\n", p->data);
free(p);
p = deQueue(gqueue);
if(NULL != p)
printf("Dequeue p = %d\n", p->data);
free(p);
p = deQueue(gqueue);
if(NULL != p)
printf("Dequeue p = %d\n", p->data);
free(p);
len = getQueueLength(gqueue);
printf("Queue len = %d\n", len);
dumpQueue(gqueue);
}
代码编译
gcc listMain.c list.c queue.c -o a.exe -DDEBUG
调试输出
Queue len = 7
========= Dump Queue 0x2562010 ===========
head = 0x2562030
tail = 0x25620f0
22 32 19 53 0 47 29
===================================
Dequeue p = 22
Dequeue p = 32
Dequeue p = 19
Queue len = 4
========= Dump Queue 0x2562010 ===========
head = 0x2562090
tail = 0x25620f0
53 0 47 29
===================================