循环队列

循环队列的类型定义

  #define QueueSize 100 //应根据具体情况定义该值
  typedef char DataType; //DataType的类型依赖于具体的应用
  typedef struct{
  int front; //头指针,队非空时指向队头元素
  int rear; //尾指针,队非空时指向队尾元素的下一位置
  int count;//计数器,记录队中元素总数
  DataType data[QueueSize];

  }CirQueue;



循环队列的基本运算

  用第三种方法,循环队列的六种基本运算:
  ① 置队空
  void InitQueue(CirQueue *Q)
  {
  Q->front=Q->rear=0;
  Q->count=0; //计数器置0
  }
  ② 判队空
  int QueueEmpty(CirQueue *Q)
  {
  return Q->count==0; //队列无元素为空
  }
  ③ 判队满
  int QueueFull(CirQueue *Q)
  {
  return Q->count==QueueSize; //队中元素个数等于QueueSize时队满
  }
  ④ 入队
  void EnQueue(CirQueuq *Q,DataType x)
  {
  if(QueueFull(Q))
  Error("Queue overflow"); //队满上溢
  Q->count ++; //队列元素个数加1
  Q->data[Q->rear]=x; //新元素插入队尾
  Q->rear=(Q->rear+1)%QueueSize; //循环意义下将尾指针加1
  ⑤ 出队
  DataType DeQueue(CirQueue *Q)
  {
  DataType temp;
  if(QueueEmpty(Q))
  Error("Queue underflow"); //队空下溢
  temp=Q->data[Q->front];
  Q->count--; //队列元素个数减1
  Q->front=(Q->front+1)%QueueSize; //循环意义下的头指针加1
  return temp;
  }
  ⑥取队头元素
  DataType QueueFront(CirQueue *Q)
  {
  if(QueueEmpty(Q))
  Error("Queue if empty.");
  return Q->data[Q->front];
  }
  ````````````````````````````````````````````````````````````````````````````````````
  队列的操作特点是“先进先出”。前者主要是头指针、尾指针的使用,后者主要是理解循环队列提出的原因及其特点。两者都要掌握队列空与满的判定条件以及出队列、入队列操作的实现。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值