复试机试学习

发布时间 2023-06-04 08:45:07作者: 無碍

想要见识一下,如何将数据结构中学习到的数据结构应用到实际中,转化为编程

  • 猫狗收容所
    image
  1. 两个队列分别收容猫和狗,不仅收容他们的信息还要增加进入次序的信息
  2. 此时队列的元素已经不是简单的整型了
#include<queue>
#include<cstdio>
using namespace std;
struct Animal {
    int num;
    int seq;
};

int main()
{
    queue<Animal> catQueue;
    queue<Animal> dogQueue;
    int seq=0;
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        int method,para;
        scanf("%d%d",&method,&para);
        if(method==1){
            //非收养
            if(para>0){
                //来的是狗
                Animal dog;
                dog.num=para;
                dog.seq=seq;
                ++seq;
                dogQueue.push(dog);
            }else{
                //来的是猫
                Animal cat;
                cat.num=para;
                cat.seq=seq;
                ++seq;
                catQueue.push(cat);
            }
        }else{
            //收养,得考虑队列空不空
            if(para==0){
                //采用第一种收养方式
                if(catQueue.empty()&&dogQueue.empty()){
                    //猫狗队列都是空
                    continue;
                }else if(catQueue.empty() || !dogQueue.empty() && dogQueue.front().seq<catQueue.front().seq){
                    //狗队列非空,收养狗
                    printf("%d ",dogQueue.front().num);
                    dogQueue.pop();
                }else{
                    //猫队列非空
                    printf("%d ",catQueue.front().num);
                    catQueue.pop();
                }
            }else if(para==1){
                //只选择狗
                if(dogQueue.empty()){
                    continue;
                }else{
                    printf("%d ",dogQueue.front().num);
                    dogQueue.pop();
                }
            }else{
                //只选择猫
                if(catQueue.empty()){
                    continue;
                }else{
                    printf("%d ",catQueue.front().num);
                    catQueue.pop();
                }
            }

        }

    }
    printf("\n");
    return 0;
}