我的循环队列

/*
***功能:
           进出队列的操作
***注意:
           这是一个循环队列,只能存源空间-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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值