【问题标题】:Data Structures: Infix to Prefix LinkedList(LL)数据结构:中缀到前缀 LinkedList(LL)
【发布时间】:2021-12-06 04:10:42
【问题描述】:

我的代码能够编译和运行,但是进程返回-1。我手动抽出了各种测试用例,相信它是有效的,所以我不确定我的逻辑哪一部分是错误的。

我要求用户提供一个中缀 exp,in2PreLL

  1. 反转中缀 exp.
  2. 根据 switch-case 语句将其插入到 Linked List inExpLL 或 Stack s 的前面
  3. 最后,我把整个inExpLL倒过来得到前缀exp。

此代码假定:

  1. 输入字符串只包含正整数
  2. 只有运算符是 + - * / ( )

我输入了(1+2)+(3-4),期待前缀exp。 ++12-34 当我手动绘制过程时。但是,当我运行代码时,它给了我Process returned -1 (0xFFFFFFFF)

编辑: 我已经调试了我的代码,它现在可以工作了!谢谢大家的建议!

【问题讨论】:

  • 请提供一个minimal reproducible example 来证明您的观察结果,如有必要,提供样本输入(但最好不需要输入,例如使用硬编码的初始化值),您得到的输出(包括完整引用的错误消息,逐字逐句,作为文本直接在此处)与您期望的输出形成对比。
  • 我已经尝试包含驱动程序代码以及示例输入来演示我的逻辑。希望我的问题更清楚@Yunnosch
  • 请阅读minimal reproducible example的概念描述并尝试应用。通常一个 MRE 只有一个代码部分要复制以进行复制。
  • 无法编译:缺少insertNode() 的定义。
  • @Meisner 你好!你是对的,我错过了定义,我已经包含了它,它现在可以编译但它仍然没有返回正确的输出

标签: c data-structures linked-list prefix infix-notation


【解决方案1】:

警告不容忽视:

    ...
    default:   //operand
        insertNode(inExpLL, atoi(c), OPERAND);
    ...

我的编译器发出呱呱叫

incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'

确实atoi(c) 在这里是完全错误的。要将单个数字转换为其数值,您应该使用c - '0'

更糟糕的是,您的代码使用了已弃用的 gets 并且使用不当:它至少应该是:

    gets(infix, stdin);

最后:你真的应该学习如何使用调试器...


添加代码和我的 2 个修复后,代码给出:

 4  3  +  2  1  +  )  +  )

所以仍然是要删除的结束括号和相反的顺序......

【讨论】:

  • 感谢您的帮助,我已经包含了我之前错过的 insertNode 的定义。我能问一下为什么atoi在这里错了吗?我以为atoi是用来将字符串/字符转换成整数数据类型的?
  • @newtocodingyikes:atoi 参数应为 C 字符串,即指向以空字符结尾的字符数组的指针。不是一个字符。
猜你喜欢
  • 2018-10-02
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多