rear和length表示的循环队列

problem

rear和length表示的循环队列

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

假设将循环队列定义为:以与变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素)。

输入:

先输入一个不大于100的正整数n(输入数据个数)和m(循环队列数组的大小),再输入n个整数,其中输入0表示出队。

输出:

要求用循环队列实现,队满时如有入队则输出"No"并丢掉此元素,出队时输出这个元素。注意:这种表示方法队列中可以存储m个元素!

输入样例:

10 5
2 6 0 56 89 34 2322 25 0 10

输出样例:

2
No
6

solo

很简单的循环队列,主要的点是把申请的那个数组第一个空出来,用作指示队满的标志就可以轻松判断队列的满

code

# include <iostream>
# include <cstdio>
# include <cmath>
# include <cctype>
# include <map>
# include <string>

using namespace std;
void queuel_push(int temp,int *rear);
void queuel_pop(int *rear,int length);


int main()
{
    int n,m;
    int length=0;
    cin>>n>>m;
    int queuel[100];
    queuel[0]=0;
    int *rear=queuel;
    while(n--)
    {
        int temp;
        cin>>temp;
        if(temp==0)
        {
            queuel_pop(rear,length);
            length--;
        }
        else
        {
            // is queue not full yet?
            if(length>=m)
            {
                cout<<"No"<<endl;
                continue;
            }
            else
            {
                queuel_push(temp,rear);
                rear++;
                length++;
            }
        }
    }
    return 0;
}

void queuel_push(int temp,int *rear)
{
    rear++;
    *(rear)=temp;
}

void queuel_pop(int *rear,int length)
{
    if(*rear==0);
    else
    {
        cout<<*(rear-length+1)<<endl;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值