队列之出队入队


 线性结构的俩种常见应用之二——队列                                                                  
 定义:
   一种实现“先进先出”的存储结构
分类:
链式队列

静态队列
静态队列通常都必须是循环队列                          判断队列是否已满:
队列需要俩个参数即front 头和rear尾                         if((rear+1)%数组长度)==f)
入队:rear=(rear+1)%数组长度                                    已满
出队:front=(front+1)%数组长度                   		    else    
                                                                未满

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
//队列一定是循环的
typedef struct Queue{
    int *pBase;
    int front;
    int rear;
}QUEUE;

void init(QUEUE *);//队列的初始化
bool en_queue(QUEUE *,int val);//入队pQ->rear=(pQ->rear+1)%6;
void traverse_queue(QUEUE*);//遍历输出
bool full_queue(QUEUE*);//判断是否为满pQ->rear+1)%6==pQ->front
bool out_queue(QUEUE *,int*);//出队 pQ->front=(pQ->front+1)%6;
bool emput_queue(QUEUE *);//判断是否为空pQ->front==pQ->rear

int main(void)
{
    int val,val1;
    QUEUE Q;
    init(&Q);  //通过取地址将实参传入形参
    printf("入队的元素以0结束\n");
    while(val1!=0)                       //通过while循环入队
    {
      printf("请输入入队的元素:");
      scanf("%d",&val1);
      en_queue(&Q,val1);
    }

    traverse_queue(&Q);
    printf("\n");
    while(out_queue(&Q,&val))     //用while进行出队
    {
      printf("出队的元素是:%d\n",val);
    }
    /*if(out_queue(&Q,&val))
    {
       printf("出队成功!出队的元素是 %d",val);
    }
    else{
    printf("出队失败!");
    }*/
    return 0;

}
void init(QUEUE *pQ)    //队列的初始化
{
   pQ->pBase=(int*)malloc(sizeof(int)*6);//申请队列的长度为6由于队列是循环队列所以只能
   //存5个值,即始终是头尾只有一个存值
   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;//入队,将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;   //实际上等同于i++
    }
    return;
}
bool emput_queue(QUEUE *pQ)
{
    if(pQ->front==pQ->rear)    //为空的标志
    return true;
    else
    return false;
}
bool out_queue(QUEUE *pQ,int *pVal)//出队,将出队的值保存在PVal中
{
    if(emput_queue(pQ))
    {
       return false;
    }
    else
    {
      *pVal=pQ->pBase[pQ->front];//出队,从头开始出队将出队的值保存在PVal中
      pQ->front=(pQ->front+1)%6;
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值