《大数据结构》算术表达式求值

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实用标准文档

二课程设计2——算术表达式求值

一、需求分析

二、程序的主要功能

三、程序运行平台

四、数据结构

五、算法及时间复杂度

六、测试用例

七、程序源代码

三感想体会与总结

算术表达式求值

一、需求分析

一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。

二、程序的主要功能

(1)从键盘读入一个合法的算术表达式,输出正确的结果。

(2)显示输入序列和栈的变化过程。

三、程序运行平台

Visual C++ 6.0版本

四、数据结构

本程序的数据结构为栈。

(1)运算符栈部分:

struct SqStack //定义栈

{

char *base; //栈底指针

char *top; //栈顶指针

int stacksize; //栈的长度

};

int InitStack (SqStack &s) //建立一个空栈S

{

if (!(s.base = (char *)malloc(50 * sizeof(char))))

exit(0);

s.top=s.base;

s.stacksize=50;

return OK;

}

char GetTop(SqStack s,char &e) //运算符取栈顶元素

{

if (s.top==s.base) //栈为空的时候返回ERROR

{

printf("运算符栈为空!\n");

return ERROR;

}

else

e=*(s.top-1); //栈不为空的时候用e做返回值,返回S的栈顶元素,并返回OK

return OK;

}

int Push(SqStack &s,char e) //运算符入栈

{

if (s.top-s.base >= s.stacksize)

{

printf("运算符栈满!\n");

s.base=(char*)realloc (s.base,(s.stacksize+5)*sizeof(char) ); //栈满的时候,追加5个存储空间

if(!s.base) exit (OVERFLOW);

s.top=s.base+s.stacksize;

s.stacksize+=5;

}

*(s.top)++=e; //把e入栈

return OK;

}

int Pop(SqStack &s,char &e) //运算符出栈

{

if (s.top==s.base) //栈为空栈的时候,返回ERROR

{

printf("运算符栈为空!\n");

return ERROR;

}

else

{

e=*--s.top; //栈不为空的时候用e做返回值,删除S的栈顶元素,并返回OK

return OK;

}

}

int StackTraverse(SqStack &s) //运算符栈的遍历

{

char *t;

t=s.base ;

if (s.top==s.base)

{

printf("运算符栈为空!\n"); //栈为空栈的时候返回ERROR

return ERROR;

}

while(t!=s.top)

{

printf(" %c",*t); //栈不为空的时候依次取出栈元素

t++;

}

return ERROR;

}

(2)数字栈部分:

struct SqStackn //定义数栈

{

int *base; //栈底指针

int *top; //栈顶指针

int stacksize; //栈的长度

};

int InitStackn (SqStackn &s) //建立一个空栈S

{

s.base=(int*)malloc(50*sizeof(int));

if(!s.base)exit(OVERFLOW); //存储分配失败

s.top=s.base;

s.stacksize=50;

return OK;

}

int GetTopn(SqStackn s,int &e) //数栈取栈顶元素

{

if (s.top==s.base)

{

printf("运算数栈为空!\n"); //栈为空的时候返回ERROR

return ERROR;

}

else

e=*(s.top-1); //栈不为空的时候,用e作返回值,返回S的栈顶元素,并返回OK return OK;

}

int Pushn(SqStackn &s,int e) //数栈入栈

{

if (s.top-s.base >=s.stacksize)

{

printf("运算数栈满!\n"); //栈满的时候,追加5个存储空间

s.base=(int*)realloc (s.base,(s.stacksize+5)*sizeof(int) );

if(!s.base) exit (OVERFLOW);

s.top=s.base+s.stacksize; //插入元素e为新的栈顶元素

s.stacksize+=5;

}

*(s.top)++=e; //栈顶指针变化

return OK;

}

int Popn(SqStackn &s,int &e) //数栈出栈

{

if (s.top==s.base)

相关文档
最新文档