您的位置:首页 > 理论基础 > 数据结构算法

数据结构循环队列演示程序

2018-03-29 10:21 519 查看
#include<stdio.h>
#include <stdbool.h>
#include<malloc.h>
typedef struct queue
{
    int *pBase;
    int front;
    int rear;
}QUEUE;
void init(QUEUE *);
bool en_queue(QUEUE *,int val);//入队
bool full_queue(QUEUE *);
bool out_queue(QUEUE *,int *);
bool emput_queue(QUEUE*);
void traverse_queue(QUEUE *);
int main(void)
{
    int val;
    QUEUE Q;
    init (&Q);
    en_queue(&Q,1);
    en_queue(&Q,2);
    en_queue(&Q,3);
    en_queue(&Q,4);
    en_queue(&Q,5);
    en_queue(&Q,6);
    traverse_queue(&Q);
    if (out_queue(&Q,&val))
    {
        printf("出队成功,出队元素为%d\n",val);
    }
    else
    {
        printf("出队失败\n");
    }
    printf("剩余元素为\n");
    traverse_queue(&Q);
    return 0;
}
void init(QUEUE *pQ)
{
    pQ->pBase=(int *)malloc(sizeof(int)*6);//假定长度为6,指向了24个字节的整形数组
    pQ->front=0;//初始化
    pQ->rear=0;//初始化
}
bool full_queue(QUEUE *pQ)
{
    if((pQ->rear+1)%6==pQ->front)
        return true;
    else
        return false;
}
bool en_queue(QUEUE *pQ,int val)
{
   if(full_queue(pQ))
   {
       return false;
   }
   else
   {
       pQ->pBase[pQ->rear]=val;
       pQ->rear=(pQ->rear+1)%6;//对数组长度取余
       return true;
   }
}
void traverse_queue(QUEUE *pQ)
{
    int i=pQ->front;
    while(i!=pQ->rear)
    {
        printf("%d",pQ->pBase[i]);
        i=(i+1)%6;
        printf("\n");
    }

    return;
}
bool emput_queue(QUEUE*pQ)
{
    if(pQ->front==pQ->rear)
    {
        return true;
    }
    else
        return false;
}
bool out_queue(QUEUE *pQ,int *pVal)
{
  if(emput_queue(pQ))
  {
      return false;
  }
  else
  {
      *pVal=pQ->pBase[pQ->front];
      pQ->front=(pQ->front+1)%6;
      return true;
  }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: