- 6
- 0
- 约4.03千字
- 约 10页
- 2018-04-23 发布于河南
- 举报
数据结构表达式求值实验报告1
算术表达式求值
用算符优先法设计一个具有加、减、乘、除四功能的计算程序掌握栈的数据结构和基本操作。”#”为运算符栈的栈底元素;
2.依次读入表达式,若是操作符即进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为”#”)。
3 ADT描述
#define changint long int
typedef struct sqst
{
changint shu[stacksize];
char data[stacksize];
changint top;
}sqstack;
基本操作:
initstack(S)
操作结果:构造一个空栈S。
gettop(S)
初始条件:栈S已存在。
操作结果:用P返回S的栈顶元素。
push(S,ch)
初始条件:栈S已存在。
操作结果:插入元素ch为新的栈顶元素。
pop(S,x)
初始条件:栈S已存在。
操作结果:返回S的栈顶字符型元素。
popshu(st,x)
初始条件:栈S已存在。
操作结果:返回S的栈顶整型元素。
panduan(char x)
操作结果:判断字符是否是运算符,运算符即返回1。
precede(c1, c2)
初始条件:c1,c2为运算符。
操作结果:判断运算符优先权,返回优先权高的。
operate(a,op,b)
初始条件:a,b为整数,op为运算符。
操作结果:a与b进行运算,op为运算符,返回其值。
4.算法的基本思路:
(1)首先置操作数栈为空栈,表达式起始符#作为运算符栈的栈底元素;
(2) 依次读入表达式中的每个字符,通过运算符判断函数panduan()使操作数进OPND栈;
(3)通过函数precede()将运算符与OPTR栈的栈底运算符比较出优先权,若栈顶元素优先权低则输入下个操作数到OPND,若两优先权相等,脱号并接受下一个字符,若栈顶元素优先高,退栈并将运算结果(通过函数operate()运算)入栈。循环上述操作直到表达式求值结束。
(4)返回运算结果。
5.主要函数描述及作用:
initstack():构造一个空栈
push():插入元素进栈
gettop():返回栈顶元素
precede():运算符优先权进行判断
pop():字符元素出栈
popshu():整型元素出栈
operate():运算操作数
get():从输入的字符串中依次读入每一个字符
panduan():运算符判断函数
6. 测试结果与分析
上述程序在Visual C++ 6.0环境下加以实现。经过多次测试,程序运行正确。运行结果。如图所示:
7. 收获与体会
通过这次课程设计:
1.我又进一步巩固了C语言的基础,尤其是栈。
2.算法中需要建很多的函数,提高了自己的编程能力有帮助,
3.程序不够简洁,还有待改进,功能还有待更完善。
程序源码:
#includestdio.h
#includestring.h
#includeiostream.h
#define stacksize 100
#define changint long int
typedef struct sqst
{
changint shu[stacksize];
char data[stacksize];
changint top;
}sqstack;
void initstack(sqstack st)
{
st.top=-1;
}
char gettop(sqstack st,char x)
{
if(st.top==-1)
return 0;
else
{
x=st.data[st.top];
return x;
}
}
changint push(sqstack st,int x)
{
if(st.top ==stacksize-1)
return 0;
else
{
st.top++;
st.data[st.top]=x;
st.shu[st.top]=(changint)x;
return 1;
}
}
changint pop(sqstack st,char x)
{
if(st.top ==-1)
{
return 0;
}
else
{
x=st.data[st.top];
st.top--;
return 1;
}
}
changint popshu(sqstack st,changint x)
{
if(st.top ==-1)
{
return
您可能关注的文档
- 消防工程投标用稿-商务标.doc
- COG制程管制标准书.doc
- 实训6X-Scan的使用.doc
- 2012年经营规划.doc
- Mule用户手册.doc
- 典型的web2.0网站界面制作步骤详解(=).doc
- 博锐个性化辅导教案——盐类的水解20111204.doc
- 枞阳小学“班班通”设备应用与管理实施方案.doc
- 校正系统的设计.ppt
- 泄水洞初期支护技术交底.doc
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
最近下载
- 2025年自来水供应专属承包合同样本版.docx VIP
- 2022化工安全与环保第二版课后题答案最新版(完整版).docx VIP
- ASUS华硕主板大师系列Z97-A 用户使用手册 (繁体中文).pdf
- 智能金融:AI 驱动的金融变革.pptx
- 人工智能在心血管无创影像中的应用:前沿技术与临床价值.pdf VIP
- 2025年氢燃料电池在数据中心储能应用趋势.docx
- 2026年中国铁路上海局集团有限公司招聘普通高校毕业生1236人备考题库及答案详解(考点梳理).docx VIP
- 井工煤矿复工复产开工第一课教案.docx VIP
- 社区居务监督培训课件.ppt VIP
- 心灵终结单位全代码.doc VIP
原创力文档

文档评论(0)