北理工数据结构实验二Word文档格式.docx
- 文档编号:14635763
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:22
- 大小:120.58KB
北理工数据结构实验二Word文档格式.docx
《北理工数据结构实验二Word文档格式.docx》由会员分享,可在线阅读,更多相关《北理工数据结构实验二Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
(4+2)*(2-10)=输出:
-48
三、程序设计
1、概要设计
为实现上述程序功能,应用栈存储运算符和操作数,为此需要建立一个抽象数据类型:
栈。
(1)、栈的抽象数据类型定义为:
ADTStack{
数据对象:
D={ai|ai∈ElemSet,i=1,2,3……,n,n≥0}
数据关系:
R1={<
ai-1,ai>
|ai∈D,i=1,2,……,n}
基本操作:
InitStack(&
S)
操作结果:
创建一个空栈S。
Push(&
S,e)
初始条件:
栈S已存在
插入运算符e作为新的栈顶元素
GetTop(&
栈S已存在且非空
用e返回寄存运算符栈S的栈顶元素
Pop(&
S,&
e)
删除寄存运算符栈S的栈顶元素
Operate(a,theta,b)
a,b为整数,theta为运算符
返回a与b运算的结果
Precede(d,c)
d,c为运算符
若d优先级大于c,返回‘>
’;
若d优先级小于c,返回‘<
若d优先级等于c,返回‘=’;
EvaluateExpression()
输入合法的表达式
返回表达式的值
}ADTStack
⑵主程序流程
调用EvaluateExpression()函数计算表达式的值,并将结果输出在屏幕上。
⑶各函数模块的调用关系
先由主函数调用计算求值函数;
再由求值模块调用栈构造函数,构造两个栈分别用来保存操作数和运算符,然后根据情况多次调用进栈、出栈、取栈顶元素、判断运算符优先级、计算表达式的值等多个函数,计算并返回表达式的值;
最后由主函数在屏幕上输出表达式的结果。
⑷流程图
2、详细设计
(1)、宏定义
#defineSTACK_INIT_SIZE10//栈存储空间的初始分配量
#defineSTACKINCREMENT10//空间的分配增量
#defineOK1//正确时返回值为真
#defineERROR0//出错时返回值为假
(2)、抽象数据类型定义
typedefcharElemType1;
//定义元素类型1为char
typedefintElemType2;
//定义元素类型2为int
typedefstruct
{//栈SqStack1存储元素为char
ElemType1*base;
//栈空间基址
ElemType1*top;
//栈顶指针
intstacksize;
//当前分配的栈空间大小
}SqStack1;
{//栈SqStack2存储元素为int
ElemType2*base;
ElemType2*top;
}SqStack2;
(3)、操作算法程序实现:
intInitStack1(SqStack1&
S)
{//构造一个空栈S
S.base=(ElemType1*)malloc(STACK_INIT_SIZE*sizeof(ElemType1));
//为顺序栈动态分配存储空间
if(!
S.base)exit(OVERFLOW);
//分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
returnOK;
}//InitStack1
intPush1(SqStack1&
S,ElemType1e)
{//将元素e插入栈中,使其成为新的栈顶元素
if(S.top-S.base>
=S.stacksize)//若栈满则追加存储空间
{S.base=(ElemType1*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType1));
S.base)exit(OVERFLOW);
//存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
//元素e插入栈顶,后修改栈顶指针
//*S.top=e;
S.top++;
}//Push1
charGetTop1(SqStack1S)
{//取栈顶元素并返回其值
ElemType1e;
if(S.top==S.base)
returnERROR;
//栈空
e=*(S.top-1);
returne;
}//GetTop1
intPop1(SqStack1&
S,ElemType1&
e)
{//删除栈顶元素,并用e返回其值
if(S.top==S.base)
//栈空
e=*--S.top;
//--S.top;
e=*S.top;
}//Pop1
intInitStack2(SqStack2&
S.base=(ElemType2*)malloc(STACK_INIT_SIZE*sizeof(ElemType2));
}//InitStack2
intPush2(SqStack2&
S,ElemType2e)
{S.base=(ElemType2*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType2));
}//Push2
intGetTop2(SqStack2S)
ElemType2e;
}//GetTop2
intPop2(SqStack2&
S,ElemType2&
}//Pop2
intIn(charc)
{//判断c是否为运算符,是则返回1,否则返回0。
if(c=='
+'
||c=='
-'
*'
/'
^'
('
)'
='
)
return1;
else
return0;
}//In
charPrecede(chard,charc)
{//判断运算符d与运算符c的优先级
switch(c)
{
case'
:
switch(d)
{
case'
return'
>
'
;
break;
<
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北理工 数据结构 实验