栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言实现 队列

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言实现 队列

#define QUEUE_TPYE char
#define QUEUE_LENGTH 512
#define CUSTOM_QUEUE_NAME myself_queue

#define LOOP_QUEUE //如果定义即为环形队列,不定义即为普通队列(会造成空间浪费)

struct queue
{
	QUEUE_TPYE custom_queue[QUEUE_LENGTH];
	int  queue_head,queue_tail;
	void (*queue_push)(struct queue * obj_queue,QUEUE_TPYE input);
	QUEUE_TPYE (*queue_pop)(struct queue * obj_queue);
	int (*is_queue_empty)(struct queue * obj_queue);
	int (*is_queue_full)(struct queue * obj_queue);
};

void queue_push(struct queue * obj_queue,QUEUE_TPYE input);
QUEUE_TPYE queue_pop(struct queue * obj_queue);
int is_queue_empty(struct queue * obj_queue);
int is_queue_full(struct queue * obj_queue);

struct queue CUSTOM_QUEUE_NAME = {
	.custom_queue=0,
	.queue_head=0,
	.queue_tail=0,
	.queue_push=queue_push,
	.queue_pop=queue_pop,
	.is_queue_empty=is_queue_empty,
	.is_queue_full=is_queue_full
};

void queue_push(struct queue * obj_queue,QUEUE_TPYE input)
{
	obj_queue->custom_queue[obj_queue->queue_tail]=input;
#ifdef LOOP_QUEUE
	obj_queue->queue_tail=(obj_queue->queue_tail+1)%QUEUE_LENGTH;
#else
	CUSTOM_QUEUE_NAME.queue_tail++;
#endif
}
QUEUE_TPYE queue_pop(struct queue * obj_queue)
{
	QUEUE_TPYE tmp=obj_queue->custom_queue[obj_queue->queue_head];
#ifdef LOOP_QUEUE
	obj_queue->queue_head=(obj_queue->queue_head+1)%QUEUE_LENGTH;
#else
	obj_queue->queue_head++;
#endif
	return tmp;
}
int is_queue_empty(struct queue * obj_queue)
{
	return obj_queue->queue_head == obj_queue->queue_tail;
}
int is_queue_full(struct queue * obj_queue)
{
#ifdef LOOP_QUEUE
	return (obj_queue->queue_tail + 1) % QUEUE_LENGTH == obj_queue->queue_head;
#else
	return (obj_queue->queue_tail - 1) == QUEUE_LENGTH;
#endif
}

int main()
{
	CUSTOM_QUEUE_NAME.queue_push(&CUSTOM_QUEUE_NAME,'a');
	CUSTOM_QUEUE_NAME.queue_push(&CUSTOM_QUEUE_NAME,'b');
	printf("%c",CUSTOM_QUEUE_NAME.queue_pop(&CUSTOM_QUEUE_NAME));
	printf("%c",CUSTOM_QUEUE_NAME.queue_pop(&CUSTOM_QUEUE_NAME));

	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864913.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号