编程题7.28

在蓝桥学院的新餐厅,学生们在取餐窗口形成了一条长队。小蓝,餐厅的经理,希望能够实时了解队伍最前面和最后面的学生编号。

蓝桥账户中心

你需要执行以下三种操作:

  1. 学生进入队列:编号为 xx 的学生排到队伍的末尾。
  2. 学生离开队列:最前面的学生拿到餐后离开队伍。
  3. 查询队列状态:输出当前队伍最前面和最后面的学生编号。

请注意,学生们可能会在吃完饭后再次排队。

输入格式

首先,你会看到一个整数 qq,表示你需要执行的操作次数。

接下来的 qq 行,每行将包含一个或两个整数,代表一次操作:

  1. 1 x:编号为 xx 的学生加入队伍。
  2. 2:最前面的学生拿到餐并离开队伍。
  3. 3:输出当前队伍最前面和最后面的学生编号(两个编号之间用一个空格隔开)。

数据范围保证:1≤x,q≤1051≤x,q≤105。进行操作 2 和 3 时,队伍一定非空。每个学生的编号都是唯一的。

输出格式

对于每一次的 3 操作,输出一行包含两个整数,即当前队伍最前面和最后面的学生编号。

样例输入

5
1 1
1 3
3
2
3

样例输出

1 3
3 3

说明

对于给出的样例,队伍的变化过程如下:

  1. 编号为 11 的学生加入队伍,队列变为 q=[1]q=[1]。
  2. 编号为 33 的学生加入队伍,队列变为 q=[1,3]q=[1,3]。
  3. 输出队伍最前面和最后面的学生编号,分别为 11 和 33。
  4. 最前面的学生拿到餐并离开队伍,队列变为 q=[3]q=[3]。
  5. 输出队伍最前面和最后面的学生编号,分别为 33 和 33。

代码演示: 

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int x;
  int arr[100]={0};
  int num;//操作次数
  scanf("%d",&num);
  int front=0;
  int rear=-1;
  for(int i=0;i<num;i++)
  {
    int a;
    scanf("%d",&a);
    switch(a)
    {
      case 1:
      {
        
        scanf("%d",&x);
        arr[++rear]=x;
        break;
      }

      case 2:
      {
        front++;
        break;
      }

      case 3:
      {
        printf("%d\t",arr[front]);
        printf("%d\n",arr[rear]);
        break;
      }

      default:
      break;
    }
  }
  return 0;
}

 

经验总结:

 

***printf("%d\t",arr[front]);与printf("%d\t",&arr[front]);的区别

如果表达式的结果为“假”,assert() 会打印出断言失败的信息,并调用 abort() 函数终止程序的执行;如果表达式的结果为“真”,assert() 就什么也不做,程序继续往后执行。
assert()函数还需引用#include <assert.h>
strcpy(arr1,arr2)把arr2复制到arr1中
strcat(arr1,arr2)把arr2追加到arr1后面,但必须保证arr1能够放得下arr2。其中arr2会把\0传过去

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值