数据结构堆栈计算机实验报告.doc
文本预览下载声明
综合设计报告
课程名称: 数据结构
题 目:
指导教师: 蔡 英
设计起始日期:
学 院: 计算机学院
系 别: 系
学生姓名:
班级/学号: 2014011277
成 绩: 一、需求分析
1. 掌握栈的运算及应用,了解对算法的健壮性要求。
2. 用栈设计一个可用于计算多项式的程序
二、概要设计
1、数据结构
栈
2、使用算法
1.压栈
2.出栈
3.优先级
4运算
5非法输入过滤
三、详细设计
1、数据结构详细设计
1.
2.设计符号左右优先级lp、rp和代数运算operate函数;
3.增加对输入的合法性检查,包括滤掉所有非法输入及处理左右括号不配对的输入;
4.编制应用程序测试这个计算器;
2、×××算法
1.
templateclass vc
errorcode Stackvc::push(const vc da)
{
Nodevc* p = head;
Nodevc* q = new Nodevc(da, p);
if (NULL == q)
return overflow;
head = q;
len++;
return success;
}
2.出栈
templateclass vc
vc Stackvc::pop()
{
if (0 == len || NULL == head)
exit(1);//非正常结束
vc temp = head-data;
head = head-next;
len--;
return temp;
}
3.优先级
int Calculator::lp(char op)
{
switch (op)
{
case +:
case -:return 3; break;
case *:
case /:return 5; break;
case (:return 1; break;
case ):return 6; break;
case #:return 0; break;
default:return -1; break;
}
}
int Calculator::rp(char op)
{
switch (op)
{
case +:
case -:return 2; break;
case *:
case /:return 4; break;
case (:return 6; break;
case ):return 1; break;
case #:return 0; break;
default:return -1; break;
}
}
4运算
errorcode Calculator::run()
{
char ch,op,ope;
double val,a,b;
bool lastisdig = false;
bool lastisdot = false;
op = #;
cin ch;
while (ch!=#||op!=#)
{
if (error(op, ch))
return wrong;
if (.==ch)
{
if (. == ch)
lastisdot = true;
cin ch;
continue;
}
else if (isdigit(ch))
{
cin.putback(ch);
cin val;
if (true == lastisdig)//两部分数字组合为一个,两种情况 dig和dot
{
if (true==lastisdot)
{
double integer = opnd.pop();
val = integer + standarddouble(val);
}
else
{
}
}
opnd.push(val);
lastisdig = true;
lastisdot = false;
cin ch;
}
else if (lp(op)rp(ch))
{
optr.push(ch);
op = ch;
lastisdig = false;
lastisdot = false;
cin ch;
}
else if (lp(o
显示全部