一道循环队列例题

#include <stdio.h>
#include <stdlib.h>

#define LENGTH  6                   //设定循环队列长度为6,则有效数字是5个

typedef struct Queue
{
     int * pArray;    //队列元素首地址
     int front;         //队列的前面
     int behind;   //队列的后面
}QUEUE, * PQUEUE;

void init_queue(PQUEUE);   //创建,并初始化队列
bool empty_queue(PQUEUE);   //检查队列是否为空
bool full_queue(PQUEUE);   //检查队列是否已满
bool in_queue(PQUEUE, int);   //入队
bool out_queue(PQUEUE, int *);  //出队
void traversal_queue(PQUEUE);  //遍历

int main(void)
{
    QUEUE Q;
    int Val;

    init_queue(&Q);
    in_queue(&Q, 1);
    in_queue(&Q, 2);
    in_queue(&Q, 3);
    in_queue(&Q, 4);
    in_queue(&Q, 5);
    traversal_queue(&Q);
    if(out_queue(&Q, &Val))
    {
        printf("出队成功,出队的数是:%d\n", Val);
    }
    else
    {
       puts("出队失败!\n");
    }
    traversal_queue(&Q); 
    return 0;
}

 

void init_queue(PQUEUE pQ)
{
  pQ->pArray = (int *)malloc(sizeof(int) * LENGTH);
  pQ->front = pQ->behind = 0;

  return;
}

 

bool empty_queue(PQUEUE pQ)
{
  if(pQ->front == pQ->behind)
  return true;
  else
  return false;
}

 

bool full_queue(PQUEUE pQ)
{
  if((pQ->behind + 1) % LENGTH == pQ->front )
  return true;
  else
  return false;
}

 

bool in_queue(PQUEUE pQ, int Val)
{
  if(full_queue(pQ))
  return false;
  else
  {
   pQ->pArray[pQ->behind] = Val;
   pQ->behind = (pQ->behind + 1) % LENGTH;
   return true;
  }
}

 

bool out_queue(PQUEUE pQ, int * pVal)
{
  if(empty_queue(pQ))
  return false;
 else
 {
  *pVal = pQ->pArray[pQ->front];
  pQ->front = (pQ->front + 1) % LENGTH;
  return true;
 }
}

 

void traversal_queue(PQUEUE pQ)
{
 int f = pQ->front;

 while(f != pQ->behind)
 {
  printf("%d\t", pQ->pArray[f]);
  f = (f + 1) % LENGTH;
 }
 puts("\n");
 return;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值