数据结构课程设计-用静态栈数据结构实现表达式求值

数据结构课程设计-用静态栈数据结构实现表达式求值 

一.    课题意义:当用户输入一个合法的表达式后,能够返回正确的结果。能够计算的运算符包括:加、减、乘、除、括号;能够计算的数要求在实数范围内。对于异常表达式给出错误提示。

二.软件需求:数据对象:D={ ai |ai∈ElemSet,i=1,2,3,……,n,n≥0}

数据关系:R={<ai-1,ai,)>| ai-1,ai ∈D, i=2,3,……,n}约定a1为栈底,an 为栈顶。基本操作:Push(&s,e)

       初始条件:栈s已经存在。

操作结果:插入元素e为新的栈顶元素

Pop(&s,&e)

       初始条件:栈s已经存在且非空。

       操作结果:删除s的栈顶元素,并用e返回其值

二.    系统设计:

流程图:

开始

readnextch算法

factor算法

建立栈

存放操作字符

存放数据

expression算法

计算

结束

三.    重点模块详细设计:

    主要算法:(伪代码)

#define N 50

#define OK 1

#define ERROR 0

#include <ctype.h>

#include <string.h>

typedef struct{

    int top;

    double array[N];

}NumStack;

typedef struct{

    int top;

    char array[N];

}OpStack;

//把字符转换为相应的整数的函数

int Cint(char mychar){

    return (mychar-48);

}

//数字进栈的函数

status PushNum(NumStack &numstack,double num){

    if(numstack.top<N)

{numstack.top++;

     numstack.array[numstack.top-1]=num;

     return OK;

}

else return ERROR;

}

//数字出栈的函数

status PopNum(NumStack &numstack,double &num){

    if(numstack.top>0){

num=numstack.array[numstack.top-1];

    numstack.top--;

    return OK;

}

else return ERROR;

 

}

//操作符进栈的函数

status PushOp(OpStack &opstack,char &op){

    if(opstack.top<N){

opstack.top++;

    opstack.array[opstack.top-1]=op;

    return OK;

}

else return ERROR;

}

//操作符出栈的函数

status PopOp(OpStack &opstack,char &op){

if(opstack.top>0){ 

op=opstack.array[opstack.top-1];

    opstack.top--;

return OK;

}

else return ERROR;

}

//进行运算的函数

double Calc(double a,double b,char c){

    double result;

[1] [2] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有