/*
***功能:
进出队列的操作
***注意:
这是一个循环队列,只能存源空间-1个值
***参考:
我的笔记本
***栈概念:
[1]先进先出
[2]只能从队列rear插入元素,元素只能从front离开队列
[3]进队列时队列尾先保存元素,再把队列尾+1;
入队列时先获得队列头的元素,之后队列头+1
*/
#include<stdio.h>
#define MAX 4
/*******************************************************************************
***功能:
进队列
***参数:
队列数组 要进的元素 保存队列front的地址&front和rear的&rear
***思想:
先获取队尾值,把数据放到 Q[rear]=x;
再队尾rear+1;
最后保存变化后的队尾值到*pr
*******************************************************************************/
int EnQuene(int *Q,int x,int *pf,int *pr)
{
int front,rear;
front=*pf; //保存原来队头和队尾
rear=*pr;
if((rear+1)%MAX==front) //是否队满了
{
return 0;
}
else
{
Q[rear]=x; //数据放到队尾,队尾后移,变化后值存到*pr
rear=(rear+1)%MAX;
*pr=rear;
return 1;
}
}
/*******************************************************************************
***功能:
出队列
***参数:
队列数组 要出去的元素 保存队列front的地址&front和rear的&rear
***思想:
先获取队头值,得到队列头的数据 *py=Q[front];
再队头后移front+1;
最后保存变化后的队头值到*pf
*******************************************************************************/
int BeQuene(int *Q,int *py,int *pf,int *pr)
{
int front,rear;
front=*pf; //保存原来队头和队尾
rear=*pr;
if(front==rear) //是否队空了
{
return 0;
}
else
{
*py=Q[front]; //数据从队列头离开,队头后移,变化后值存到*pf
front=(front+1)%MAX;
*pf=front;
return 1;
}
}
int main()
{
static int s[MAX];
int rear=0,front=0;
int i,y;
for(i=0;i<MAX-1;i++)
{
EnQuene(s,i,&front,&rear); //进队列 ;i是进去的元素;0 1 2依次进
printf("i[%d]=%d ",i,i);
}
printf("\n");
for(i=0;i<MAX-1;i++)
{
BeQuene(s,&y,&front,&rear); //出队列;y是出来的的元素;0 1 2依次出
printf("o[%d]=%d ",i,y);
}
printf("\n");
return 0;
}
我的循环队列
最新推荐文章于 2018-10-15 09:20:47 发布