数据结构--------测试

顺序循环队列,规定队满处理方法为少用一个元素空间。例如,给定5个元素空间构造循环队列,则只能存放4个元素。根据入队及出队操作判断队列最后的元素存放情况,并输出最后队列中的元素值,即完成给定入队及出队操作后一次性全部出队的元素值。

输入:输入的第一行为一个自然数n,表示要构造的顺序循环队列空间数。

第二行为操作次数k,接下来k行为出队入队操作,每行代表一次操作。入队用in表示,出队用out表示

输出:输出完成所有入队出队操作后,一次性出队元素。用一个空格隔开。

输入输出样例:1组
#1

样例输入:

4
7
in 1
in 2
in 5
in 6
out
out
in 8

样例输出:

5 8 
//注意
    //1:该程序每次运行的时间必须小于10秒,否则会超时,程序超时将不会测试剩余的测试集
    //2:该程序每次运行使用的内存不能超过1M,否则会返回错误
    //3:该程序每次运行输出的结果最多显示1000个字符(多余的不显示),每行末尾的所有空格用□表示
#include<iostream>
#include<stdlib.h>
using namespace std;
int n;
typedef struct
{
    int *data;
    int front,rear;
}CSeQueue;

CSeQueue *Init_SeQueue();
void In_SeQueue(CSeQueue *q);
void Out_SeQueue(CSeQueue *q);
int main()
{
    int m;
    //cout<<"输入队列空间大小n";
    cin>>n;
    //cout<<"输入操作次数m";
    cin>>m;
    string str;
    CSeQueue *q;
    q=Init_SeQueue();
    for(int i=0;i<m;i++)
    {
        //cout<<"输入操作";
        cin>>str;
        if(str=="in")
            In_SeQueue(q);
        if(str=="out")
            q->front=(q->front+1)%n;
    }
    while((q->front+1)%n!=q->rear)//输出队列剩余元素(不包含最后一个)
    {
        Out_SeQueue(q);
    }
    Out_SeQueue(q);//q->front+1)%n==q->rear时,输出最后一个元素
    return 0;
}
CSeQueue *Init_SeQueue()
{
    CSeQueue *q;
    q=new CSeQueue;
    q->data=(int *)malloc(n*sizeof(int));//开一个大小为n的队列
    q->front=q->rear=0;
    return q;
}
void In_SeQueue(CSeQueue *q)
{
    int x;
    //cout<<"输入队列元素值x";
    cin>>x;
    if((q->rear+1)%n==q->front)//牺牲一个空间判队满,即只能装(n-1)个元素
        return;
    else
    {
        q->rear=(q->rear+1)%n;//入队
        q->data[q->rear]=x;
    }
}
void Out_SeQueue(CSeQueue *q)
{
    q->front=(q->front+1)%n;//出队
    cout<<q->data[q->front]<<" ";
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值