【数据结构】(三)顺序表习题(表达式求解)
(1)预习作业:
查表:
算法,结合图理解:
- 判断所读取的字符是否为#(为#说明表达式已经读取到尾部),且栈底元素是否为#(为#表示表达式中所有运算符都已计算完毕),这样输出另一个栈中的值就是结果。
- 通过判断符号优先级来判断是否要执行运算,要执行时,将所需运算符和数字从两个栈提取出来,之后进行Operate运算出当前结果存入数栈,运算完毕之后无需将ch向后移动读取下一个,还在此处判断优先级是否可以再进行
运算。
判断是否为数字或者字符:isdigit© 其是头文件 ctype.h 里的库函数, 参数 c是一个字符, 用来判断 c 是否为十进制数,若不是,则返回NULL.
#include"biao.h"
#define Max 100
#include<stdio.h>
#include<stdlib.h>
#include< ctype.h > // isdigit(c); 其是头文件 ctype.h 里的库函数, 参数 c是一个字符, 用来判断 c 是否为十进制数,若不是,则返回NULL.
biao :: biao()
{
//空
}
void biao::inbiao1(biao* ps) //创建数字表
{
ps->top = new Node;
ps->base = ps->top;
ps->top->next = NULL;
}
void biao::inbiao2(biao* pm) //创建字符表
{
pm->top = new Node;
pm->base = pm->top;
pm->top->next = NULL;
}
void biao:: push1 (biao* ps, Node temp) //压入数字
{
PNode p1 = new Node;
p1->dat = temp.dat;
p1->next = ps->top;
ps->top = p1;
}
void biao::push2(biao* pm, Node temp) //压入字符
{
PNode p2 = new Node;
p2->ch = temp.ch;
p2->next = pm->top;
pm->top = p2;
}
//int getIndex(char theta) //获取theta所对应的索引
//{
// int index = 0;
// switch (theta)
// {
// case '+':
// index = 0;
// break;
// case '-':
// index = 1;