第二个堆栈使用 GList 打印空白
Second stack prints blank using GList
我正在使用堆栈实现这个数据结构(中缀到后缀)。
基本上,我正在测试推送和打印,没有弹出操作。第一个堆栈,即 stack
保存运算符和数字,而第二个堆栈 stack_precedence
记录优先级。我认为两个堆栈都可以正常工作,但我不明白为什么优先级堆栈不打印优先级数字而是 returns 空白输出。
部分实施:
#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] != '[=10=]'; 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
returns 空白。
我的预期结果是
2+2
919
而不是
2+2
空白
优先顺序是整数而不是字符
int c = GPOINTER_TO_INT(stack_precedence->data);
^^^ change here
我正在使用堆栈实现这个数据结构(中缀到后缀)。
基本上,我正在测试推送和打印,没有弹出操作。第一个堆栈,即 stack
保存运算符和数字,而第二个堆栈 stack_precedence
记录优先级。我认为两个堆栈都可以正常工作,但我不明白为什么优先级堆栈不打印优先级数字而是 returns 空白输出。
部分实施:
#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] != '[=10=]'; 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
returns 空白。
我的预期结果是
2+2
919
而不是
2+2
空白
优先顺序是整数而不是字符
int c = GPOINTER_TO_INT(stack_precedence->data);
^^^ change here