当前位置:
文档之家› 哈工大 数据结构 实验一 线性表的实验
哈工大 数据结构 实验一 线性表的实验
n.push(w*y);
}
else if(input[i]=='/'){
y=n.pop();w=n.pop();
n.push(w/y);
}
}
cout<<n.pop()<<endl;
}
int main(){
int i,j;
double a[64];
char input[512],o;
stack<char> s;
printf("do you want to try again?(Y/N) ");
o=getchar();
if(o=='n'||o=='N') break;
getchar();printf("\n");
}
printf("thanks for using it...\n");
}
stack<double> n;
while(true){
i=0;j=0;s.null();n.null();
printf("please input the expression: ");
change(i,j,a,input,s);
printf("the answer is: ");
compute(i,j,a,input,n);
哈尔滨工业大学计算机科学与技术学院
实验报告
课程名称:数据结构与算法
课程类型:必修
实验项目名称:线性表实验
实验题目:算术表达式求值
班级:0903201
学号:1090320110
姓名:王岳
设计成绩
报告成绩
指导老师
一、实验目的
二、实验要求及实验环境
三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)
1.逻辑设计
2.物理设计
四、测试结果
五、系统不足与经验体会
六、附录:源代码(带注释)
#include<iostream>
using namespace std;
template <class elementtype>
class stack{
private:
elementtype ss[512];
int top;
this -> ss[this -> top] = x;
}
}
};
void change(int &i,int &j,double *a,char *input,stack<char> &s){//change front to back
char o,p;
bool fu=true;
while(true){
public:
stack() {
this -> top =0;
}
void null() {
this -> top =0;
}
bool empty() {
if (this -> top ==0)
return true;
else
return false;
}
elementtype pop() {
if (this -> empty()) printf("error:empty!!!\n");
p=s.pop();
if(p=='*'||p=='/') {input[j]=p;j++;}
else {s.push(p);break;}
}
s.push(o);
}
else if(o=='+'||o=='-'){
o=getchar();
if(fu) {a[i]=0;input[j]=i+'0';i++;j++;}
else if(input[i]=='+') {
y=n.pop();w=n.pop();
n.push(w+y);
}
else if(input[i]=='-'){
y=n.pop();w=n.pop();
n.push(w-y);
}
else if(input[i]=='*'){
y=n.pop();w=n.pop();
}
break;
}
fu=false;
}
printf("the postfix expression is: ");
for(i=0;i<j;i++){
if(input[i]>='0') cout<<a[input[i]-'0']<<' ';
else printf("%c ",input[i]);
}
printf("\n");
for(;!s.empty();){
p=s.pop();
if(p!='(') {input[j]=p;j++;}
else {s.push(p);break;}
}
s.push(o);
}
else if(o=='\n'){
o=getchar();
for(;!s.empty();){
input[j]=s.pop();j++;
o=cin.peek();
if((o<'('||o>'9')&&o!='\n') {o=getchar();fu=false; continue;}
else if(o>='0'&&o<='9') {scanf("%lf",&a[i]); input[j]=i+'0';i++;j++; }
else if(o=='(') {o=getchar();s.push(o);fu=true;continue;}
}
void compute(int &i,int &j,double *a,char *input,stack<double> &n){//compute expression
double w,y;
for(i=0;i<j;i++){
if(input[i]>='0') n.push(a[input[i]-'0']);
else if(o==')') {
o=getchar();
for(;!s.empty();){
input[j]=s.pop();j++;
if(input[j-1]=='(') {j--;break;}
}}else i源自(o=='*'||o=='/'){
o=getchar();
for(;!s.empty();){
else {
this -> top--;
return this -> ss[this -> top + 1];
}
}
void push(elementtype x) {
if (this -> top == 511) printf("error:full!!!\n");
else {
this -> top++;