循环队列实现(链表,数组)

#include <stdlib.h>
#include <memory.h>
#include "queue.h"

#ifdef __cplusplus
extern "C"{
#endif
#ifdef QUEUE_LINK
typedef struct queue{
	int num;
	struct queue *next;
}QUEUE;

QUEUE *g_queue = NULL;
QUEUE *g_lastOne = NULL;

int enqueue(int i)
{
	QUEUE *tempAdd = (QUEUE*)malloc(sizeof(QUEUE));
	if(tempAdd == NULL)
	{
		return -1;
	}
	memset(tempAdd,0,sizeof(QUEUE));
	tempAdd->num = i;
	if(g_queue == NULL)
	{
		g_queue = tempAdd;
		g_lastOne = g_queue;
	}
	else
	{
		g_lastOne->next = tempAdd;
		g_lastOne = g_lastOne->next;
	}
	return 0;
}

int dequeue(int *i)
{
	QUEUE *tempde = NULL;
	if(i == NULL)
	{
		return -1;
	}
	if(g_queue == NULL)
	{
		return -1;
	}
	*i = g_queue->num;
	tempde = g_queue;
	g_queue = g_queue->next;
	free(tempde);
	return 0;
}

int queue_empty()
{
	return (g_queue == NULL)?1:0;
}
#endif
#ifdef QUEUE_ARRAY
/* 使用哨兵 */
/* head指向应该插入的位置,若队列满则指向哨兵 */
/* end指向队列尾,若队列空则指向head*/
int g_queue[MAX_QUEUE + 1] = {0};
unsigned int g_queueHead = 1;
unsigned int g_guard = 0;
unsigned int g_queueEnd = 1;

int enqueue(int i)
{
	if(queue_full())
	{
		return -1;
	}
	g_queue[g_queueHead++] = i;
	if(g_queueHead == MAX_QUEUE + 1)
	{
		g_queueHead = 0;
	}
	if(g_queueEnd == g_guard)
	{
		++g_queueEnd;
	}
	return 0;
}

int dequeue(int *i)
{
	if(i == NULL)
	{
		return -1;
	}
	if(queue_empty())
	{
		return -1;
	}
	*i = g_queue[g_queueEnd++];
	if(g_queueEnd == MAX_QUEUE + 1)
	{
		g_queueEnd = 0;
	}
	++g_guard;
	if(g_guard == MAX_QUEUE + 1)
	{
		g_guard = 0;
	}
	return 0;
}


int queue_full()
{
	return (g_queueHead == g_guard);
}

int queue_empty()
{
	return (g_queueEnd == g_queueHead);
}
#endif


#ifdef __cplusplus
}
#endif
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值