标签:循环队列
循环队列就是像一个圈一样,可以一直不停的入队和出队,例如:队列已经满了,如果执行一次出队操作,队列头部就空出来了,这时候就可以把元素继续插入空出来的那里,头指针向后移第二个元素就变成的队列的头,上一个对头就变成了队尾
下图中:此时队列已经满了,但是当把12出队后,head指针会指向第1个位置,这是再忘队列中插入元素的,tail就会指向0的位置,然后把元素插入到0的位置。
int data[COUNT];//存放元素
int head;//头指针
int tail;//尾指针
int count;//队列中的元素个数,判断队列是否空或者满的重要作用
cq->head = (cq->head + 1) % COUNT;
cq->tail = (cq->tail + 1) % COUNT;
#include<stdio.h>
#define COUNT 10//循环队列可以存储的最多的个数
typedef struct {
int data[COUNT];//数据区
int head; //头指针
int tail;//尾部指针
int count;//目前队列中的数据个数
}CycleQueue;
/*入队操作+*/
void insert(CycleQueue *cq, int num)
{
if (cq->count == COUNT) {
printf("队列现在已经满了\n");
}
else {
cq->tail = (cq->tail + 1) % COUNT;//循环队列,向后移一个位置,如果tail的值为count,则tail就会自动变为0
cq->data[cq->tail] = num;
cq->count++;
}
}
/*出队操作 ,temp为出栈的元素*/
int delete(CycleQueue *cq, int *temp)
{
if (cq->count == 0) {
printf("队列已经为空!\n");
return 0;//出栈失败
}
else {
cq->head = (cq->head + 1) % COUNT;//循环队列,向后移一个位置
*temp = cq->data[cq->head];//将要出队的那个元素赋值给temp
cq->count--;//队列中元素个数-1
return 1;//完成出队
}
return 1;
}
int main()
{
CycleQueue cq;
cq.head = cq.tail = -1;
cq.count = 0;
int temp = 0;//存储出队列的元素
insert(&cq, 1);
insert(&cq, 2);
insert(&cq, 3);
insert(&cq, 4);
insert(&cq, 5);
int count = cq.count;
for (int i = 0; i < count; i++) {
delete(&cq, &temp);
printf("出队元素为%d\n", temp);
}
return 0;
}
标签:循环队列
原文地址:http://blog.csdn.net/ttf1993/article/details/45585131