哈工大 数据结构 实验一 线性表的实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;}
else {
this -> top--;
return this -> ss[this -> top + 1];
}
}
void push(elementtype x) {
if (this -> top == 511) printf("error:full!!!\n");
else {
this -> top++;
1.逻辑设计
2.物理设计
四、测试结果
五、系统不足与经验体会
六、附录:源代码(带注释)
#include<iostream>
using namespace std;
template <class elementtype>
class stack{
private:
elementtype ss[512];
int top;
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();
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");
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");
}
哈尔滨工业大学计算机科学与技术学院
实验报告
课程名称:数据结构与算法
课程类型:必修
实验项目名称:线性表实验
实验题目:算术表达式求值
班级:0903201
学号:1090320110
姓名:王岳
设计成绩
报告成绩
指导老师
一、实验目的
二、实验要求及实验环境
三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)
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++;
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);
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){
else if(o==')') {
o=getchar();
for(;!s.empty();){
input[j]=s.pop();j++;
if(input[j-1]=='(') {j--;break;}
}
}
else if(o=='*'||o=='/'){
o=getchar();
for(;!s.empty();){
}
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']);
}
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");
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++;}
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;
相关文档
最新文档