SDUT-2135

本文通过一个具体的案例详细介绍了如何使用顺序队列进行各种操作,包括初始化、元素加入、中途离开、完成操作后的离开以及询问特定位置的元素等。特别关注了在处理数组下标时可能出现的问题,并给出了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AC代码:

#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct
{
    int data[100010];
    int fron;
    int rear;
}myqueue;
void chushihua(myqueue *&s)
{
    s=(myqueue *)malloc(sizeof(myqueue));///顺序队列
    s->fron=0;
    s->rear=0;
}
void jiaru(myqueue *&s,int num)///入队买饭
{
    s->rear++;///因为rear先加了1,所以数组下标是从1开始的
    s->data[s->rear]=num;///像下标这种东西也是很重要的细节
}
int chang(myqueue *s)///队长
{
    return (s->rear-s->fron+1);///不要忘了加1
}
void likai(myqueue *&s,int y)///中途离开
{
    int i;
    for(i=y-1+s->fron;i<s->rear;i++)
        s->data[i]=s->data[i+1];
    s->rear--;
}
void wancheng(myqueue *&s,int num)///买完饭离开
{
    s->fron=s->fron+num;
}
void xunwen(myqueue *s,int num)
{
    cout<<s->data[num-1+s->fron]<<endl;///因为fron被我在主函数中给赋值为1了,所以在这减回来
}
int main()
{
    myqueue *s;
    char a[100];
    chushihua(s);
    int n,m,i,shu,ru,li,wen,wan;
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>m;
        jiaru(s,m);
    }
    s->fron=1;
    cin>>shu;
    for(i=0;i<shu;i++)
    {
        cin>>a;
        if(a[0]=='J')
        {
            cin>>ru;
            jiaru(s,ru);
        }
        else if(a[0]=='L'&&a[1]=='E'&&a[2]=='A')
        {
            cin>>li;
            likai(s,li);
        }
        else if(a[0]=='A')
        {
            cin>>wen;
            xunwen(s,wen);
        }
        else if(a[0]=='F')
        {
            cin>>wan;
            wancheng(s,wan);
        }
        else if(a[0]=='L'&&a[1]=='E'&&a[2]=='N')///队列长度
        {
            cout<<chang(s)<<endl;
        }
    }
    return 0;
}

  这个题很不错,因为我是使用顺序队列存储的数据,所以在处理数组下标的时候出了一些错误,主要错误就是在当有人中途离开队伍时数组的变化考虑得不够完善;其实就是下标问题,其它也没啥。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值