循环队列相关知识

来源:互联网 发布:武汉 人工智能 编辑:程序博客网 时间:2024/06/01 10:30

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


typedef struct queue
{
 int *pbase;
 int front;
 int rear;
}Q;

void creat_queue(Q *pq)   //初始化
{
 pq->pbase = (int *)malloc(sizeof(int) * 10);
 pq->front = 0;
 pq->rear = 0;
}
bool full_queue(Q *pq)   //判断队列是否满
{
 if((pq->rear+1)%10 == pq->front)
  return true;
 else
  return false;
}

bool is_empty(Q *pq)   //判断队列是否空
{
 if(pq->front == pq->rear)
  return true;
 else
  return false;
}

bool input_queue(Q *pq,int val)   //入队
{
 if(full_queue(pq))
  return false;
 else
 {
  pq->pbase[pq->rear] = val;
  pq->rear = (pq->rear+1)%10;
  return true;
 }
}
bool output_queue(Q *pq,int *pval)  //出队
{
 if(is_empty(pq))
  return false;
 else
 {
  *pval = pq->pbase[pq->front];
  pq->front = (pq->front+1)%10;
  return true;
 }
}

void traverse(Q *pq)    //遍历
{
 int i=pq->front;
 while(i!=pq->rear)
 {
  printf("%d  ",pq->pbase[i]);
  i=(i+1)%10;
 }
 return ;
}

int main()
{
 int val;
 Q pq;
 creat_queue(&pq);
 input_queue(&pq,11);
 input_queue(&pq,33);
 input_queue(&pq,99);
 input_queue(&pq,55);
 traverse(&pq);
 if(output_queue(&pq,&val))
  printf("出队成功,出队元素为:%d\n",val);
 else
  printf("出队失败!\n");
 traverse(&pq);
 return 0;
}

0 0
原创粉丝点击