7-7 软硬车厢交替排列 (40 分)

设车辆厂生产了硬座车厢和软座车厢共n节(混合在一起),要求使用队列的基本操作,编程实现所有硬座车厢和所有软座车厢交替排列。
例如硬座车厢用H来表示,软座车厢用S来表示,
从键盘上输入8节车厢代号为SHHSSHSS ,输出为HSHSHSSS。
若从键盘输入8节车厢代号为SHHSHHSH ,输出为HSHSHSHH。

输入格式:

第一行输入硬座和软座车厢共有的节数,2<=节数<=10; 第二行按节数输入车厢代号。

输出格式:

若车厢节数超出合法范围,输出“ERROR”,否则输出H和S车厢交替排列结果,注意输出结果以H开头。

输入样例:

8
SHHSSHSS

输出样例:

HSHSHSSS

AC代码

#include<iostream>
using namespace std;

struct Queue
{
    char *data;
    int top;
    int base;

};
int InitQueue(Queue &Q)
{
    Q.data = new char[10];
    Q.top = 0;
    Q.base = 0; 
    return 1;
}
int QueueLength(Queue &Q) //队列长度
{
    return (Q.top-Q.base);
}
int EnQueue(Queue &Q,char a) //入队
{
    Q.data[Q.top++]=a;
    return 1;
}
char DeQueue(Queue &Q)//出队
{
    return Q.data[Q.base++];
}

int main()
{
    Queue qh;
    Queue qs;

    InitQueue(qh);
    InitQueue(qs);

    int num;
    cin>>num;
    if(num>10||num<2){  //非法结束
        cout<<"ERROR"<<endl;
        return 0;
    }
    char ch[50];
    cin>>ch;
    for (int i = 0; i < num; i++)//H   S   分别入队
    {
        if(ch[i]=='H')  EnQueue(qh,ch[i]);
        else  EnQueue(qs,ch[i]);
    }



    while (qs.base!=qs.top && qh.base!=qh.top)
    {
        cout<<DeQueue(qh)<<DeQueue(qs);//同时输出
    }
    if(qs.base==qs.top){   //更长的队输出
        while (qh.base!=qh.top)
        {
            cout<<DeQueue(qh);
        }
        
    }
    else{
        while (qs.base!=qs.top)
        {
            cout<<DeQueue(qs);
        }
        
    }
    
cout<<endl;
return 0;
}
 posted on 2021-04-15 22:40  夜深楼鼓  阅读(430)  评论(0编辑  收藏  举报