栈、队列——练习题

news2024/9/28 3:26:19

1. ✌有效的括号

代码实现:

bool isValid(char* s) {
    char stack[10000];
    int top = -1;
    while (*s) {
        if (*s == '(' || *s == '{' || *s == '[') {
            stack[++top] = *s;
        } else {
            if (top == -1) { // 栈空
                return false;
            }
            int top_val = stack[top]; // 获取栈顶元素
            if (top_val == '(' && *s != ')' || top_val == '[' && *s != ']' || top_val == '{' && *s != '}') {
                return false;
            } else {
                top--;
            }
        }
        s++;
    }
    if (top != -1) {
        return false;
    }
    return true;
}

2. 海贼OJ #595. 程序调用关系

代码实现:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    int n;
    scanf("%d", &n);
    char S[n][110];
    for (int i = 0; i < n; i++) {
        scanf("%s", S[i]);
    }
    char s[110];
    scanf("%s", s);

    char stack[n][110]; // 模拟栈
    int top = -1;
    int flag = 1; // 标记位
    for (int i = 0; i < n; i++) {
        if (strcmp(S[i], "return") != 0) {
            strcpy(stack[++top], S[i]);
        } else if (top != -1) {
            top--;
        }
        if (top != -1 && strcmp(stack[top], s) == 0) {
            flag = 0;
            break;
        }
    }
    if (flag) {
        printf("NOT REFERENCED\n");
    } else {
        for (int i = 0; i <= top; i++) {
            printf("%s", stack[i]);
            int j = i + 1;
            if (j <= top) {
                printf("->");
            }
        }
        putchar('\n');
    }
    return 0;
}

3. 海贼OJ #838. 2020年数据结构41题

代码实现:

4. 比较含退格的字符串

代码实现:

5. 海贼OJ #263. 火车进栈

代码实现:

#include <stdio.h>
#include <stdbool.h>

int a[20], vis[21] = {0};

int stack[20];

// 判断是否符合栈先进后出的要求
bool judge_one_result(int n) {
    int top = -1;
    int x = 1;
    for (int i = 0; i < n; i++) {
        if (top == -1 || stack[top] < a[i]) {
            while (x <= a[i]) {
                stack[++top] = x;
                x++;
            }
        }
        if (top == -1 || stack[top] != a[i]) {
            return false;
        }
        top--;
    }
    return true;
}

int len = 0;
void f(int i, int n) { // i:当前枚举的是第i位的值   n:最大可以选取的数字   
    if (i == n) { // 边界
        if (judge_one_result(i)) {
            if (len >= 20) {
                exit(0); // 结束所有程序 exit(0):表示程序正常退出,exit(1)或exit(-1)表示程序异常退出
            } else {
                len++;
                for (int j = 0; j < n; j++) {
                    printf("%d", a[j]);
                }
                putchar('\n');
            }
        }
        return ;
    }

    for (int k = 1; k <= n; k++) {
       if (vis[k]) { // 标记位思想
            continue;
       }
       a[i] = k;
       vis[k] = 1;
       f(i + 1, n);
       // 回溯
       vis[k] = 0;
    }
}

int main(int argc, char *argv[]) {
    int n;
    scanf("%d", &n);
    f(0, n);
    return 0;
}

6. 验证栈序列

代码实现:

bool validateStackSequences(int *pushed, int pushedSize, int *popped, int poppedSize) {
    int *stack = (int*)malloc(sizeof(int) * pushedSize);
    int top = -1;
    for (int i = 0, j = 0; i < pushedSize; i++) {
        stack[++top] = pushed[i];
        while (top > -1 && stack[top] == popped[j]) {
            top--;
            j++;
        }
    }
    free(stack);
    return top == -1;
}

7. 海贼OJ #265. 括号画家

代码实现:

记录匹配的下标

#include <stdio.h>

int main(int argc, char *argv[]) {
    char str1[10000];
    gets(str1);
    char *str = str1 - 1; // 让数组下标从1开始
    int match[10001] = {0};
    int stack[10000]; // 定义一个栈,存储数组下标
    int top = -1; // 栈顶指针

    for (int i = 1; str[i]; i++) {
        switch (str[i]) {
            case '(': 
            case '[': 
            case '{': stack[++top] = i; break;
            case ')': {
                if (top != -1 && str[stack[top]] == '(') {
                    match[stack[top]] = i;
                    match[i] = stack[top]; //delete 可以没有
                    top--;
                } else {
                    stack[++top] = i;
                }
            } 
            break;
            case ']': {
                if (top != -1 && str[stack[top]] == '[')  {
                    match[stack[top]] = i;
                    match[i] = stack[top]; //delete 可以没有
                    top--;
                } 
                else {
                    stack[++top] = i;
                }
            } 
            break;
            case '}': {
                if (top != -1 && str[stack[top]] == '{') {
                    match[stack[top]] = i;
                    match[i] = stack[top]; // delete 可以没有 
                    top--;
                } else { 
                    stack[++top] = i;
                }
            } 
            break;
        }
    }
    int temp_ans = 0, ans = 0, i = 1;
    while (str[i]) {
        if (match[i]) {
            temp_ans += (match[i] - i + 1);
            i = match[i] + 1;
        } else {
            i += 1;
            temp_ans = 0;
        }
        if (temp_ans > ans) {
            ans = temp_ans;
        }
    }
    printf("%d\n", ans);
    return 0;
}

8. 设计循环队列

代码实现:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1541686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

遥感原理与应用—绪论

一、关于基本概念与对应的英文 遥感&#xff1a;Remote Sensing 遥测&#xff1a;Telemetry&#xff0c;对被测物体某些运动参数和性质进行远距离测量的技术&#xff0c;分为接触测量与非接触测量&#xff0c;对于RS的概念&#xff0c;遥测探测的目标显得狭隘了一些&#xff…

快速修复找不到msvcp140.dll,无法继续执行此代码问题

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“无法找到msvcp140.dll”的错误。那么&#xff0c;msvcp140.dll究竟是什么呢&#xff1f;它为什么会出现这样的错误呢&#xff1f;通过查阅资料和自己的实践经验&#xff0c;我对msvcp140.dll…

需求分析的过程

需求分析的工具 ominGraffle/Visio Gliffy ProcessOn RSA(UML) PPT/WORD 手绘 需求所需要的工件&#xff1a; 系统上下文、用例模型、质量限制 1.系统上下文的工件 2.用例模型工件&#xff08;什么功能&#xff09; 3.质量和限制 质量&#xff1a;管理10个小动物&#xff0c;…

Affiliate Stores: 建立营销联盟商店的详细教程- US Domain Center主机

第一步&#xff1a;了解营销联盟商店 营销联盟商店是一种电子商务模式&#xff0c;您可以在其中通过推广其他企业的产品或服务来赚取佣金。您在自己的网站上展示其他企业的产品&#xff0c;并在买家购买时获得佣金。通过 WooCommerce 平台&#xff0c;您可以轻松创建一个营销联…

C++ 基本运算

何谓运算符和操作数 基本运算 1、双目运算 2、单目运算 3、赋值表达式 表达形式&#xff1a; <变量><表达式>; 表达式是指各种运算符把常量、变量&#xff0c;函数等运算对象连接起来的具有实际意义并符合C语法规则的式子。赋值是指表达式的值赋给一个变量。 …

第390场 LeetCode 周赛题解

A 每个字符最多出现两次的最长子字符串 滑动窗口&#xff1a;枚举窗口的左边界&#xff0c;尽可能右移窗口的右边界。 (当然也可以暴力枚举) class Solution { public:int maximumLengthSubstring(string s) {vector<int> cnt(26);int res 0;for (int l 0, r -1, n s…

自媒体洗稿软件文心一言api洗稿软件介绍

大家好&#xff0c;我是淘小白~ 这几天给一个客户写了一个文心一言api洗稿的软件。 一、客户要求&#xff1a; 1、采集头条文章&#xff08;软件内置可采集头条文章网址、微信文章网址、搜狐文章网址&#xff09; 2、调用文心一言api 3、多线程并发 4、逐段改写文章 5、…

MSDS认证流程与亚马逊MSDS注意事项

MSDS认证流程与亚马逊MSDS注意事项 一、MSDS认证流程概述 MSDS&#xff0c;即物质安全数据表&#xff08;Material Safety Data Sheet&#xff09;&#xff0c;是一份详细描述化学物质或制剂的物理、化学、毒性、环保和处置等方面信息的文件。对于在亚马逊等电商平台上销售的化…

覃超老师 算法面试通关40讲

教程介绍 无论是阿里巴巴、腾讯、百度这些国内一线互联网企业&#xff0c;还是 Google、Facebook、Airbnb 等硅谷知名互联网公司&#xff0c;在招聘工程师的过程中&#xff0c;对算法和数据结构能力的考察都是重中之重。本课程以帮助求职者在短时间内掌握面试中最常见的算法与…

基于SpringBoot+Vue健身房管理系统(源码+部署说明+演示视频+源码介绍)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

探索超净实验室:高纯电子级PFA洗瓶特氟龙材质清洗瓶的特性

PFA洗瓶&#xff0c;实验中常用的清洗工具之一&#xff0c;是一个带有弯曲管状喷嘴的柔性瓶子&#xff0c;因此可以用手挤压瓶身以产生压力&#xff0c;迫使瓶内液体通过塑料管以单滴或窄流的形式流到需要清洁的表面。 ​ 由于需要多次挤压&#xff0c;瓶体要有良好的回弹性和…

jmeter链路压测

比如登录后返回token&#xff0c;业务打印上传的操作需要用到token 线程组中添加登录请求&#xff0c;并执行 1、添加登录并执行&#xff0c;查看结果 2、结果树中下拉选择正则表达式&#xff0c;将token参数和值复制粘贴到下方&#xff0c;将token值改为(.*?)&#xff0…

P - Beat

题目分析 1.看数据范围&#xff0c;大概知道dfs能做 2.自0问题开始查找&#xff0c;确保之后每次查找到的问题的困难度均大于上一次 3.遍历所有情况再记录cnt即可 代码 #include <iostream> #include <algorithm> #include <cstdio> #include <cstring&…

蓝桥杯 2023 省A 颜色平衡树

树上启发式合并是一个巧妙的方法。 dsu on tree&#xff0c;可以称为树上启发式合并&#xff0c;是一种巧妙的暴力。用一个全局数组存储结果&#xff0c;对于每棵子树&#xff0c;有以下操作&#xff1a; 先遍历轻儿子&#xff0c;处理完轻儿子后将数组清零&#xff08;要再…

基于Java中的SSM框架实现快餐店线上点餐系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现快餐店线上点餐系统演示 摘要 随着计算机互联网的高速发展。餐饮业的发展也加入了电子商务团队。各种网上点餐系统纷纷涌现&#xff0c;不仅增加了商户的销售量和营业额&#xff0c;而且为买家提供了极大的方便&#xff0c;足不出户&#xff0c;就能订…

【机器学习300问】50、什么是基于用户的协同过滤算法?

一、 基于用户的协同过滤算法直观感受 假设你在一家大型书店&#xff0c;店主不仅知道你过去的购买记录&#xff0c;还了解其他所有顾客的购买行为。当你要寻找下一本喜欢的书籍时&#xff0c;店主不是根据书籍本身的属性来推荐&#xff08;比如作者、类型&#xff09;&#xf…

RPC 快速入门

一、What 1&#xff09;小故事 张三和李四都在同一个家公司负责商品交易的模块&#xff0c;两个人平时开发甚是紧密。 &#x1f64b;&#x1f3fb;‍♂️ 张三&#xff1a;“李四&#xff0c;我这边一个商品下单了&#xff0c;但是付款数额不对&#xff0c;你帮我查下支付有没…

【应用笔记】LAT1305+使用STM32+TT类型IO的注意事项

1. 概述 在 STM32 系列 MCU 中&#xff0c; 除了一些特殊管脚外&#xff0c;绝大多数管脚都可以分类为 FT (兼容5V 信号)或 TT&#xff08;兼容 3V3 信号&#xff09;类型的 IO&#xff0c;由于 MCU 内部设计的不同&#xff0c; TT IO 相比 5V IO 有更多的限制&#xff0c;下面…

【机器学习】包裹式特征选择之序列前向选择法

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

Jenkins中使用Generic Webhook Trigger插件实现持续集成

项目环境 宝塔Linux面板DockerJenkinsgitee 目的 实现每次push推送dev分支到gitee上&#xff0c;Jenkins自动构建项目&#xff1b;push其它分支时&#xff0c;不运行。 实现方法 1.在Jenkins上安装Generic Webhook Trigger插件 在“系统设置–插件管理–可选插件”界面搜…