【发布时间】:2020-04-20 12:06:11
【问题描述】:
我正在使用堆栈实现这个数据结构(中缀到后缀)。
基本上,我正在测试推送和打印,没有弹出操作。第一个堆栈,即stack 保存运算符和数字,而第二个堆栈stack_precedence 记录优先级。我认为两个堆栈都可以正常工作,但我不明白为什么优先堆栈不打印优先数字而是返回空白输出。
部分实现:
#include <iostream>
#include <glib.h>
using namespace std;
int main(int argc, char *argv[])
{
GList *stack = nullptr;
GList *stack_precedence = nullptr;
int size = 0;
for (int i = 0; argv[1][i] != '\0'; i++) {
int precedence = 0;
bool is_precedence_set = false;
switch (argv[1][i]) {
/*
* Precedence order:
* 3) ^
* 2) / *
* 1) + -
* 0) ( )
*/
case '^':
precedence = 3;
is_precedence_set = true;
case '/':
case '*':
if (!is_precedence_set) {
precedence = 2;
is_precedence_set = true;
}
case '+':
case '-':
if (!is_precedence_set) {
precedence = 1;
is_precedence_set = true;
}
case '(':
if (!is_precedence_set) {
precedence = 0;
is_precedence_set = true;
}
stack = g_list_append(
stack, GINT_TO_POINTER(argv[1][i]));
stack_precedence = g_list_append(
stack_precedence, GINT_TO_POINTER(precedence));
size++;
break;
case ')':
if (!is_precedence_set) {
precedence = 0;
is_precedence_set = true;
}
break;
default:
if (argv[1][i] >= '0' and argv[1][i] <= '9') {
precedence = 9;
stack = g_list_append(
stack, GINT_TO_POINTER(argv[1][i]));
stack_precedence = g_list_append(
stack_precedence, GINT_TO_POINTER(precedence));
size++;
}
}
}
cout << "Stack size: " << size << endl;
stack = g_list_first(stack);
while (stack != nullptr) {
char c = GPOINTER_TO_INT(stack->data);
cout << c;
stack = g_list_next(stack);
}
cout << endl;
stack_precedence = g_list_first(stack_precedence);
while (stack_precedence != nullptr) {
char c = GPOINTER_TO_INT(stack_precedence->data);
cout << c;
stack_precedence = g_list_next(stack_precedence);
}
cout << endl;
return 0;
}
我将 2+2 作为参数传递给我的程序,stack 可以准确地打印 2+2,但 stack_precedence 返回空白。
我的预期结果是
2+2
919
不是
2+2
空白
【问题讨论】: