静下心来写算法(之循环队列)

     在循环队列里,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,不能通过条件front==rear来判别队列是"空"还是"满"。
  解决这个问题的方法至少有两种:
  1. 另设一布尔变量以区别队列的空和满;
  2.另一种方式就是数据结构常用的: 队满时:(rear+1)%n==front,n为队列长度,所以可用的长度为n-1,这个要注意。
1)循环队列的数据结构 
typedef struct{
	int *dat;
	int front;
	int rear;
}Queue;
2)创建循环队列 
Queue *creat_queue()
{
	Queue *q;
	q=(Queue *)malloc(sizeof(Queue)); 
	q->dat=(int *)malloc(MAX_QUEUE_SIZE * sizeof(int));
	assert(NULL!=q->dat);
	q->front=q->rear=0;
	return q;
}
3)销毁队列 
typedef struct{
	int *dat;
	int front;
	int rear;
}Queue;
4)将数据压入队列 
STATUS en_queue(Queue *q,int dat)
{
	if((q->rear+1)%MAX_QUEUE_SIZE==q->front){
		return FALSE;
	}
	q->dat[q->rear]=dat;
	q->rear=(q->rear+1)%MAX_QUEUE_SIZE;
	return TRUE;
}
5)将数据弹出队列 
STATUS de_queue(Queue *q,int *value)
{
	int tmp;
	if(q->front==q->rear)//判断队列是否为空 
		return FALSE;
	value=q->dat[q->front];
	q->front=(q->front+1)%MAX_QUEUE_SIZE;
	return TRUE;
}
6)获取队列长度 
int get_length(Queue * q)
{
	assert(NULL!=q);
	return (q->rear-q->front+MAX_QUEUE_SIZE)%MAX_QUEUE_SIZE;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值