蓝桥杯备赛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;
}
相关推荐
qq_459234422 天前
【题库】| 商用密码应用安全性评估从业人员考核题库(四十)
职场和发展·密码学·学习方法·考核·商用密码·商用密码应用安全性评估·密评
敲敲了个代码2 天前
[特殊字符] 空数组的迷惑行为:为什么 every 为真,some 为假?
前端·javascript·react.js·面试·职场和发展
诚思报告YH3 天前
视频面试软件市场洞察:2026 - 2032年复合年均增长率(CAGR)为10.3%
面试·职场和发展
重生之后端学习3 天前
74. 搜索二维矩阵
开发语言·数据结构·算法·职场和发展·深度优先
tyb3333333 天前
leetcode:吃苹果和队列
算法·leetcode·职场和发展
Pitiless-invader3 天前
MySQL 相关知识及面试问题汇总
面试·职场和发展
重生之后端学习3 天前
35. 搜索插入位置
java·数据结构·算法·leetcode·职场和发展·深度优先
逆境不可逃3 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式
筱昕~呀3 天前
冲刺蓝桥杯-DFS板块(第二天)
算法·蓝桥杯·深度优先
zheshiyangyang3 天前
前端面试基础知识整理【Day-10】
前端·面试·职场和发展