利用栈求表达式的值

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

数据结构课程设计

姓名:杨颂敬

班级:软件0901班

学号:0930*******

目录:

1.需求分析 (1)

2.概要设计 (1)

3.详细设计................................. 3-6 4.调试分析................................. 6-8 5.用户使用说明 (8)

6.测试结果 (9)

7.附录 (9)

利用栈求表达式的值,可供小学生作业,并

能给出分数。

1.需求分析

任务:通过此系统可以实现如下功能:

此系统能够输入一个表达式,并计算该表达式的值。可以根据计算结果给出分数。能供小学生进行简单的四则运算,此外这里特别强调括号的匹配!

要求:

根据以上功能说明,设计运算信息,堆栈的存储结构,设计程序

完成功能;

2. 概要设计

在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。

主菜单

3.详细设计

#include "string.h"

#include "stdio.h"

#include"conio.h"

#define maxsize 100

#include "ctype.h"

typedef char datatype;

typedef struct

{

datatype stack[maxsize];

int top;

} seqstack;

void stackinitiate(seqstack *s)

{

s->top=0;

}

int stacknotempty(seqstack s)

{

if(s.top<=0) return 0;

else return 1;

}

int stackpush(seqstack *s, datatype x) {

if(s->top>=maxsize)

{

printf("堆栈已满无法插入!\n");

return 0;

}

else

{

s->stack[s->top]=x;

s->top++;

return 1;

}

}

int stackpop(seqstack *s,datatype *d) {

if(s->top<=0)

{

printf("堆栈已空无数据元素出栈!\n");

return 0;

}

else

{

s->top--;

*d=s->stack[s->top];

return 1;

}

}

int stacktop(seqstack s,datatype *d)

{

if(s.top<=0)

{

printf("堆栈已空!\n");

return 0;

}

else

{

*d=s.stack[s.top-1];

return 1;

}

}

void expiscorrect(char exp[], int n)

{

seqstack mystack;

int i;

char c;

stackinitiate(&mystack);

for(i=0;i

{

if(exp[i]=='(')

stackpush(&mystack, exp[i]);

else if((exp[i]==')') && stacknotempty(mystack) && stacktop(mystack,&c) && c=='(') stackpop(&mystack,&c);

else if((exp[i]==')') && !stacknotempty(mystack))

{

printf("右括号多余左括号!\n");

return ;

}

}

if(stacknotempty(mystack))

printf("左括号多余右括号!\n");

else

printf("左右括号匹配正确!\n");

}

static float ans[50];

static int count=0;

static int right=0;

static float yourresult[50];

int postexp(char exp[])

{

seqstack mystack;

datatype x1,x2;

int i;

int j=0,ls;

int top=0;

int isFalse=0;

int isRead=0;

char oprator = ' ';

stackinitiate(&mystack);

for(i=0;exp[i]!='#';i++)

{

if(isdigit(exp[i]))

{

top=(int)(exp[i]-48);

top*=10;

}

else

{

if (isRead == 0)

{

isRead++;

top/=10;

stackpush(&mystack,top);

oprator = exp[i];

top=0;

}

else if (isRead == 1)

{

相关文档
最新文档