没有合适的资源?快使用搜索试试~ 我知道了~
一、大型作业(课程设计)题目与内容 1.1 算术表达式求值 输入一个算术表达式,其中操作数必须为实数,运算符包括加、减、乘、除、小(圆)括号,试编写程序实现: 1.用算符优先法求表达式的值。 *2.用下列方法求表达式的值: (1)先生成表达式二叉树; (2)根据表达式二叉树求表达式的值; (3)先序遍历表达式二叉树; (4)中序遍历表达式二叉树,要求恢复必要的括号; (5)后序遍历表达式二叉树,根据后序遍历序列(逆波兰式)求表达式的值;要求能用文件形式存放表达式二叉树,同时能从文件中读入保存的表达式二叉树。
资源推荐
资源详情
资源评论
姓 名:
学 号:
专业班级:
1.1 算术表达式求值
输入一个算术表达式,其中操作数必须为实数,运算符包括加、减、乘、
除、小(圆)括号,试编写程序实现:
1.用算符优先法求表达式的值。
程序如下:
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define MAXNUM 100
typedef int DataType;
struct SeqStack
{
DataType s[MAXNUM];
int t;
};
typedef struct SeqStack *PSeqStack; //定义结构体类型的指针变量
PSeqStack createEmptyStack_seq() //建立一个空栈
{
PSeqStack p;//定义一个指向顺序栈的指针 p
p = (PSeqStack)malloc(sizeof(struct SeqStack));
//给 p 申请动态存储空间,并把首地址赋给 p
if (p == NULL)
printf("Out of space!!\n");
else
p->t = -1;
return p;
}
int isEmptyStack_seq(PSeqStack p) //此函数功能是返回栈顶指针 t=-1
{
return p->t == -1;
}
void push_seq(PSeqStack p, DataType x) //入栈
{
if (p->t >= MAXNUM - 1)
printf("Overflow!\n"); //栈满不能入栈
else
{
p->t = p->t + 1; //栈顶指针加 1
p->s[p->t] = x; //把元素 x 存入栈中
}
}
void pop_seq(PSeqStack p) //出栈
{
if (p->t == -1)
printf("Underflow!\n"); //栈空不能出栈
else
p->t = p->t - 1; //栈顶指针减 1
}
DataType top_seq(PSeqStack p)//取栈顶元素
{
return p->s[p->t];
}
int infix_to_Suffix(const char * infix, char * suffix)
//const 的功能是保持形参即指针首地址不改变,此处的指针实质上是数组名
{
//将中缀表达式转换为后缀表达式,顺利转换返回 true,
//若转换过程中发现中缀表达式非法则返回 false
int state_int = FALSE;
//state_int 记录状态,等于 true 表示刚读入的是数字字符,
//等于 false 表示刚读入的不是数字字符,
//设置这个变量是为了在每输出一个整数后输出一个空格,
//以免连续输出的两个整数混在一起。
char c, c2;
PSeqStack ps = createEmptyStack_seq(); //运算符栈
int i, j = 0;
if (infix[0] == '\0')
return FALSE; //不允许出现空表达式
for (i = 0; infix[i] != '\0'; i++)
{
c = infix[i];
switch (c)
{
case ' ':
case '\t':
case '\n':
if (state_int == TRUE)
suffix[j++] = ' ';//状态从 true 转换为 false 时输出一个空格
state_int = FALSE;
break; //遇到空格或制表符忽略
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
state_int = TRUE;
suffix[j++] = c; //遇到数字输出
break;
case '(':
if (state_int == TRUE)
suffix[j++] = ' ';//状态从 true 转换为 false 时输出一个空格
state_int = FALSE;
push_seq(ps, c); //遇到左括号,入栈
break;
case ')':
if (state_int == TRUE)
suffix[j++] = ' ';//状态从 true 转换为 false 时输出一个空格
state_int = FALSE;
c2 = ')';
while (!isEmptyStack_seq(ps)) //栈顶指针为-1 时结束循环
{
c2 = top_seq(ps);//取栈顶
pop_seq(ps); //出栈 ,即把栈顶指针减 1
if (c2 == '(')
{
break;
}
剩余19页未读,继续阅读
资源评论
pgy6x
- 粉丝: 1
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功