当前位置: 首页 > article >正文

25.2.3 【洛谷】作为栈的复习不错(学习记录)

今天学习的东西不算多,放了一个星期假,感觉不少东西都没那么清楚,得复习一下才行。今天搞个栈题写,把栈复习一下,明天进入正轨,边复习边学习新东西,应该会有二叉树的学习等等...


【洛谷】P1449 后缀表达

今天主要是复习,所以就概括一下栈使用的重点。

目前学习的都是用数组模拟栈,c++中直接使用stack还不明白。

模拟栈的创建重点有二:

1. 数组(栈)

2.一个变量(栈指针)

模拟栈的基本使用:

1. 入栈

2. 出栈

(出入栈的操作靠栈指针完成)


这道题要想到用栈去解决。

基本思路:在遇到 ‘ . ’时,将前面的数字入栈,遇到运算符的时候,将栈顶的两个数字进行运算,再将运行结果放到栈中。

输入------>入栈-------->遇到运算符,栈顶两个数出栈计算------->结果入栈

注意:我一开始使用scanf直接输入字符串,然后用getchar去获取每个字符,导致运行超时

之后使用了fgets(这个记得要学一下) 和 char数组,利用for循环对输入的数组进行遍历,效果比第一个好。

这题是比较简单的栈应用,很好的复习一遍栈的基本使用。

代码留下更清楚:

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

int main() {
    char s[10000];
    fgets(s, sizeof(s), stdin);
    long long stack[1000];
    long long ok = 0;
    long long i = -1;

    // 遍历每个字符直到遇到 '@'
    for (int j = 0; s[j] != '@'; j++) {
        char input = s[j];
        if (input >= '0' && input <= '9') {
            // 处理数字字符
            ok = ok * 10 + (input - '0');
        } else if (input == '.') {
            // 入栈当前数值
            stack[++i] = ok;
            ok = 0; // 重置 ok 为 0
        } else if (input == '+') {
            stack[i - 1] = stack[i - 1] + stack[i];
            i--; // 减小栈顶指针
        } else if (input == '-') {
            stack[i - 1] = stack[i - 1] - stack[i];
            i--;
        } else if (input == '*') {
            stack[i - 1] = stack[i - 1] * stack[i];
            i--;
        } else if (input == '/') {
            // 向零取整的除法
            stack[i - 1] = (stack[i - 1] / stack[i]);
            i--;
        }
    }
    
    // 打印栈顶元素,即计算结果
    printf("%lld\n", stack[0]);
    return 0;
}


http://www.kler.cn/a/531221.html

相关文章:

  • 【LLM-agent】(task2)用llama-index搭建AI Agent
  • Python在线编辑器
  • 智能小区物业管理系统推动数字化转型与提升用户居住体验
  • 优化 PHP-FPM 参数配置:实现服务器性能提升
  • React中useState()钩子和函数式组件底层渲染流程详解
  • 在 Ubuntu 中使用 FastAPI 创建一个简单的 Web 应用程序
  • opencv图像处理框架
  • 【Rust自学】19.4. 宏(macro)
  • Javascript代码库-jQuery入门
  • 读算法简史:从美索不达米亚到人工智能时代05天气预报
  • Apache Iceberg数据湖技术在海量实时数据处理、实时特征工程和模型训练的应用技术方案和具体实施步骤及代码
  • 爱普生L3153打印机无线连接配置流程
  • 【C++】B2120 单词的长度
  • C++11 多线程 锁与条件变量:mutex、lock_guard、unique_lock 和 condition_variable
  • 电控三周速成计划参考
  • 51c嵌入式~电路~合集25
  • GRE阅读双线阅读 --青山学堂GRE全程班 包括 阅读、数学、写作、填空、背单词
  • Math数字类
  • CH340G上传程序到ESP8266-01(S)模块
  • 大模型领域的Scaling Law的含义及作用
  • 7-4 西安距离
  • SAP HCM 回溯分析
  • 民法学学习笔记(个人向) Part.2
  • 元音字母(模拟)
  • 网络工程师 (16)侵权判断
  • DeepSeek- R1 原理介绍