蓝桥杯备赛2-1

1.小邋遢的衣橱

题目描述的是一个**栈(Stack)**结构:

  • in name:表示把一件衣服 name 放入箱子(压入栈顶)。
  • out name:表示取出名字为 name 的衣服 ,但注意:
    • 只能从栈顶开始拿
    • 拿的时候会把这件衣服上面的所有衣服都拿出来 (即弹出),直到找到 name
    • 找到后,这件衣服也拿走(不放回去)
    • 被拿出来的其他衣服(在它上面的)就丢掉了?还是放回去?

但从样例来看,我们可以推断:

当执行 out name 时,从栈顶开始弹出,直到找到第一个 name,然后停止。所有被弹出的衣服(包括 name)都不再放回栈中。

也就是说:这是一个"从栈中移除第一次出现的指定元素(从顶部往下找),并同时移除它上面的所有元素"的操作。

这其实不是标准栈的操作,但可以模拟。

用一个列表(模拟栈)来存储衣服。

对每条指令:

  • 如果是 in name:直接 加到列表末尾。
  • 如果是 out name
    • 从后往前遍历(即从栈顶向下)找第一个等于 name 的元素。
    • 找到位置 i 后,保留前 i 个元素(0 到 i-1),通过top=idx将后面的(包括 i)全部丢弃。

最后:

  • 如果栈非空,输出最后一个元素(name[top-1])
  • 否则输出 "Empty"
cpp 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    int n;
    scanf("%d",&n);
    char name[n][100];
    char str[100];
    char p[5];
    int top=0;
    for(int i=0;i<n;i++){
        scanf("%s %s",p,str);
        if(strcmp(p,"in")==0){
            strcpy(name[top],str);
            top++;
        }
        else if(strcmp(p,"out")==0){
            int idx=-1;
            for(int j=top-1;j>=0;j--){
                if(strcmp(name[j],str)==0){
                    idx=j;
                    break;
                }
            }
            if (idx != -1) {
                top = idx;
            }
        }
    }
    if(top==0){
        printf("Empty\n");
    }
    else{
        printf("%s",name[top-1]);
    }
    return 0;
}

2.模拟栈

cpp 复制代码
#include <stdio.h>
#include <string.h>

int main() {
    int m;
    scanf("%d",&m);
    int top=0;
    char p[10];
    int stack[1000000];
    for(int i=0;i<m;i++){
        scanf("%s",p);
        if(strcmp(p,"push")==0){
            int x;
            scanf("%d",&x);
            stack[top]=x;
            top++;//top为元素个数
        }
        else if(strcmp(p,"pop")==0&&top!=0){
            top--;
        }
        else if(strcmp(p,"empty")==0){
            if(top){
                printf("NO\n");
            }else{
                printf("YES\n");
            }
        }
        else if(strcmp(p,"query")==0){
            if(top!=0){
                printf("%d\n",stack[top-1]);
            }else{
                printf("empty\n");
            }
        }
    }

    return 0;
}
相关推荐
Swift社区3 小时前
LeetCode 383 赎金信
算法·leetcode·职场和发展
007php0076 小时前
PHP与Java项目在服务器上的对接准备与过程
java·服务器·开发语言·分布式·面试·职场和发展·php
夏鹏今天学习了吗9 小时前
【LeetCode热题100(95/100)】寻找重复数
算法·leetcode·职场和发展
敲敲了个代码12 小时前
如何优化批量图片上传?队列机制+分片处理+断点续传三连击!(附源码)
前端·javascript·学习·职场和发展·node.js
Anastasiozzzz13 小时前
leetcode力扣hot100困难题--4.俩个正序数列的中位数
java·算法·leetcode·面试·职场和发展
a程序小傲17 小时前
国家电网面试被问:FactoryBean与BeanFactory的区别和动态代理生成
java·linux·服务器·spring boot·spring·面试·职场和发展
a程序小傲19 小时前
高并发下如何防止重复下单?
java·开发语言·算法·面试·职场和发展·状态模式
沉默-_-21 小时前
力扣hot100双指针专题解析2(C++)
java·c++·算法·蓝桥杯·双指针
程序员杰哥21 小时前
Pytest自动化测试框架实战
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest