队列的入队、出队、测长、打印

队列的特点是先进先出 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
===================================
发布了191 篇原创文章 · 获赞 43 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/leoufung/article/details/104416476