静态循环队列c语言,静态数组实现循环队列 c语言

#include

#include

#define Data_Type int

#define Queue_Len 5

//判断队满有两种方式,一种是加以个标记,比如说size。

//另一种是浪费一块空间,当占到N-1时,就算满。

typedef struct Queue{

Data_Type data[Queue_Len];

int front;//队头元素的前一个元素

int rear;// 队尾元素

//int size; 记录队列的大小

}QUEUE,* QQUEUE;

void create(QQUEUE);

bool isFull(QQUEUE);

bool isEmpty(QQUEUE);

bool add(QQUEUE,Data_Type);

Data_Type out(QQUEUE);

void traverse(QQUEUE);

int main(void){

QUEUE queue ;

create(&queue);

add(&queue,1);

add(&queue,2);

add(&queue,3);

add(&queue,4);

out(&queue);

add(&queue,5);

out(&queue);

add(&queue,6);

out(&queue);

add(&queue,7);

traverse(&queue);

}

bool isFull(QQUEUE qQuere){

if((qQuere->rear+1)%Queue_Len==qQuere->front){

return true;

} else{

return false;

}

}

bool isEmpty(QQUEUE qQueue){

if(qQueue->front==qQueue->rear){

return true;

}else{

return false;

}

}

void create(QQUEUE qQueue){

qQueue->front=qQueue->rear=0;

return;

}

void traverse(QQUEUE qQueue){

int i=qQueue->front;

while(i!=qQueue->rear){

//这里比较绕,为什么输出时要取余?

//首先front表示的是队首元素的前一个元素,肯定是不能输出的。

// 如果给他+1,则可以正常输出队首。

//但队尾会出问题,如果下标是队尾下标,+1则会超出数组长度

//所以再取余, 则输出正常

printf("%d\n",qQueue->data[(i+1)%Queue_Len]);

i++;

i=i%Queue_Len;

//换一种好理解的

//先找到下一个合法元素,找到再输出

//所以直接输出i 就可以了,因为i已经是要找的下一个元素。

//i++;

//i=i%Queue_Len;

//printf("%d\n",qQueue->data[i]);

}

}

bool add(QQUEUE qQueue,Data_Type val){

if(isFull(qQueue)){

return false;

}else{

qQueue->rear = (qQueue->rear+1)%Queue_Len;

qQueue->data[qQueue->rear]=val;

return true;

}

}

Data_Type out(QQUEUE qQueue){

if(isEmpty(qQueue)){

exit(-1);

}else{

Data_Type val = qQueue->data[qQueue->front+1];

qQueue->front = (qQueue->front+1)%Queue_Len;

return val;

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文:http://blog.csdn.net/u013578413/article/details/47286299

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值