利用栈求表达式的值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) {