本关任务要求通过实现函数double ComputeInfix(char* s)来计算中缀表达式。
相关知识
中缀表达式的计算需要用到栈。关于链接存储的栈,其中已实现了如下操作:
- 创建栈:
创建一个链式栈。具体操作函数定义如下:
LinkStack* LS_Create();
- 释放栈:
释放栈所占用的空间。具体操作函数定义如下:
void LS_Free(LinkStack* ls);
- 清空一个栈:
将链式栈变为空栈。具体操作函数定义如下:
void LS_MakeEmpty(LinkStack* ls);
- 判断栈是否为空:
若栈为空,则返回true,否则返回false。具体操作函数定义如下:
bool LS_IsEmpty(LinkStack* ls);
- 求栈的长度:
获取链式栈的长度。具体操作函数定义如下:
int LS_Length(LinkStack* ls);
- 将元素 x 进栈:
将 x 进栈,若满栈则无法进栈,返回false,否则返回true。具体操作函数定义如下:
void LS_Push(LinkStack* ls, T x);
- 出栈:
出栈的元素放入item。若出栈成功(栈不为空),则返回true;否则(空栈),返回false。具体操作函数定义如下:
bool LS_Pop(LinkStack* ls, T& item);
- 获取栈顶元素:
获取栈顶元素放入item中。若获取失败(空栈),则返回false,否则返回true。具体操作函数定义如下:
bool LS_Top(LinkStack* ls, T& item);
- 打印栈中元素:
从栈顶到栈底打印各结点数据元素。具体操作函数定义如下:
void LS_Print(LinkStack* ls)。
在计算中缀表达式的过程中,你可以根据需要调用以上操作。因为表达式的计算结果可能是浮点数,所以这里将栈的数据元素类型设置为了double类型。
typedef double T; // 数据元素类型
此外,为了计算中缀表达式,我们定义了如下函数,其中的 1)已经实现,你需要实现 2):
1):
void