深 圳 大 学
实 验 报 告
课程名称: 数据结构
实验名称: 后缀表达式的计算
班 级: 1 姓 名:
同 组 人: 无 实验日期: 2011 年 10 月 11 日
教师签字:一、实验目的
熟悉栈的使用。
掌握如何使用C 语言实现栈的说明、创建以及进栈和出栈等操作。
二、实验要求
熟悉C 语言编程。
三、实验内容
编写单独的初始化栈、判空、入栈和出栈以及取得栈顶元素的函数 编写compute()函数,实现后缀表达式的计算,在该函数中对第一步实现的栈函数进行调用以完成计算
四、实验步骤(算法)
实现后缀表达式423*+42/-#的运算
1. 依次读入数字和运算符当读入的是数字时进栈,当读入的是运算符时出栈两次并把两个出栈的数据进行运算符所实现的运算,一直这样的操作直到所读的数据为#时,输出栈底元素即为所要计算的结果。
五、程序代码
#include
#define error 0
#define ok 1
#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 100
#define OVERFLOW -2
#define STACKINCREMENT 10
#include
typedef int elemtype;
#include
#include
#include
typedef struct{
elemtype *base;
elemtype *top;
int stacksize;
}bds_stack;
int pop(bds_stack &S,int &e)
{
}
int InitStack (bds_stack &S)
{ if(S.top==S.base) return error; e= * --S.top; return ok;
}
int GetTop(bds_stack S,elemtype&e)
{
if(S.top==S.base) return error;
return e=*(S.top-1);
}//GetTop
int push(bds_stack &S,int e)
{
}
int compute (char A[], int &k)
{
int i=0; int x1,x2,temp, e; if(S.top-S.base>=S.stacksize) { S.base=(elemtype*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(elemtype)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++ = e; return ok; S.base = (elemtype *) malloc(STACK_INIT_SIZE *sizeof(elemtype)); if (!S.base) exit(OVERFLOW); S.top =S.base; S.stacksize = STACK_INIT_SIZE; return ok;
bds_stack bds; //定义一个栈
InitStack (bds); //初始化栈
}
int StackEmpty(bds_stack s)
{
if(s.top==s.base) } GetTop(bds,e); return k=e; } i++; //指针后移 push(bds,temp); //计算结果压栈 pop(bds,x1); //操作数1,出栈 //计算 switch (A[i]) { case '+': temp=x1+x2;break; case '-': temp=x1-x2;break; case '*': temp=x1*x2;break; case '/': temp=x1/x2;break; } while (A[i]!='#') //依次取得后缀表达式中的字符判断并操作 { if (('0'
}
else return FALSE;
void main()
{
} char bds_hz[]="423*+42/-#";//后缀表达式 int j; compute (bds_hz,j); cout
六、实验结果(屏幕截图)
七、心得体会
本次实验的要求有多个,但我只做了其中的一小部分,为后缀表达式的求值。其中的中缀表达式(就是我们通常所见的)转换为后缀表达式,经过多次的实验因为不会比较运算符的优先级无法做到。我想这是因为我的动手能力还不是很好吧,还需要以后多编一些程序来锻炼自己的实践能力吧。
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
深 圳 大 学
实 验 报 告
课程名称: 数据结构
实验名称: 后缀表达式的计算
班 级: 1 姓 名:
同 组 人: 无 实验日期: 2011 年 10 月 11 日
教师签字:一、实验目的
熟悉栈的使用。
掌握如何使用C 语言实现栈的说明、创建以及进栈和出栈等操作。
二、实验要求
熟悉C 语言编程。
三、实验内容
编写单独的初始化栈、判空、入栈和出栈以及取得栈顶元素的函数 编写compute()函数,实现后缀表达式的计算,在该函数中对第一步实现的栈函数进行调用以完成计算
四、实验步骤(算法)
实现后缀表达式423*+42/-#的运算
1. 依次读入数字和运算符当读入的是数字时进栈,当读入的是运算符时出栈两次并把两个出栈的数据进行运算符所实现的运算,一直这样的操作直到所读的数据为#时,输出栈底元素即为所要计算的结果。
五、程序代码
#include
#define error 0
#define ok 1
#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 100
#define OVERFLOW -2
#define STACKINCREMENT 10
#include
typedef int elemtype;
#include
#include
#include
typedef struct{
elemtype *base;
elemtype *top;
int stacksize;
}bds_stack;
int pop(bds_stack &S,int &e)
{
}
int InitStack (bds_stack &S)
{ if(S.top==S.base) return error; e= * --S.top; return ok;
}
int GetTop(bds_stack S,elemtype&e)
{
if(S.top==S.base) return error;
return e=*(S.top-1);
}//GetTop
int push(bds_stack &S,int e)
{
}
int compute (char A[], int &k)
{
int i=0; int x1,x2,temp, e; if(S.top-S.base>=S.stacksize) { S.base=(elemtype*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(elemtype)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++ = e; return ok; S.base = (elemtype *) malloc(STACK_INIT_SIZE *sizeof(elemtype)); if (!S.base) exit(OVERFLOW); S.top =S.base; S.stacksize = STACK_INIT_SIZE; return ok;
bds_stack bds; //定义一个栈
InitStack (bds); //初始化栈
}
int StackEmpty(bds_stack s)
{
if(s.top==s.base) } GetTop(bds,e); return k=e; } i++; //指针后移 push(bds,temp); //计算结果压栈 pop(bds,x1); //操作数1,出栈 //计算 switch (A[i]) { case '+': temp=x1+x2;break; case '-': temp=x1-x2;break; case '*': temp=x1*x2;break; case '/': temp=x1/x2;break; } while (A[i]!='#') //依次取得后缀表达式中的字符判断并操作 { if (('0'
}
else return FALSE;
void main()
{
} char bds_hz[]="423*+42/-#";//后缀表达式 int j; compute (bds_hz,j); cout
六、实验结果(屏幕截图)
七、心得体会
本次实验的要求有多个,但我只做了其中的一小部分,为后缀表达式的求值。其中的中缀表达式(就是我们通常所见的)转换为后缀表达式,经过多次的实验因为不会比较运算符的优先级无法做到。我想这是因为我的动手能力还不是很好吧,还需要以后多编一些程序来锻炼自己的实践能力吧。
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。