数据结构实验二Word格式.doc

上传人:b****1 文档编号:13085018 上传时间:2022-10-04 格式:DOC 页数:8 大小:63.50KB
下载 相关 举报
数据结构实验二Word格式.doc_第1页
第1页 / 共8页
数据结构实验二Word格式.doc_第2页
第2页 / 共8页
数据结构实验二Word格式.doc_第3页
第3页 / 共8页
数据结构实验二Word格式.doc_第4页
第4页 / 共8页
数据结构实验二Word格式.doc_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

数据结构实验二Word格式.doc

《数据结构实验二Word格式.doc》由会员分享,可在线阅读,更多相关《数据结构实验二Word格式.doc(8页珍藏版)》请在冰豆网上搜索。

数据结构实验二Word格式.doc

二、实验要求

1.进行栈的基本操作时要注意栈"

后进先出"

的特性。

2.编写完整程序完成下面的实验内容并上机运行。

3.整理并上交实验报告。

三、实验内容

1.编写生成栈的函数,栈的元素从键盘输入

2.编写在栈中压入一个元素的函数

3.编写在栈中弹出一个元素的函数

4.编写主函数,调用以上各函数,以便能观察出各函数的屏幕输出。

四、实验步骤以及程序测试

#include<

iostream>

string>

#defineL1100

#defineL210

typedefintElemType;

usingnamespacestd;

//1.编写程序任意输入栈长度和栈中的元素值

typedefstruct

{

ElemType*base;

ElemType*top;

intstacksize;

}SqStack;

intInitStack(SqStack&

S)//构造一个顺序栈

S.base=(ElemType*)malloc(L1*sizeof(ElemType));

if(!

S.base)

return0;

S.top=S.base;

S.stacksize=L1;

return1;

}

intClearStack(SqStack&

S)//清空、

if(S.top!

=S.base)

{

S.stacksize=0;

intDestroyStack(SqStack&

S)//销毁、

free(S.base);

if(S.base)

intPush(SqStack&

S,ElemTypee)//入栈

if(S.top-S.base>

=S.stacksize)

S.base=(ElemType*)realloc(S.base,(S.stacksize+L2)*sizeof(ElemType));

return0;

S.top=S.base+S.stacksize;

S.stacksize+=L2;

*S.top++=e;

intPop(SqStack&

S,ElemType&

e)//出栈

if(S.top==S.base)

e=*(--S.top);

ElemTypeGetTop(SqStackS)//取栈顶元素操作

returnNULL;

return*(S.top-1);

};

intPrecede(chartop,chare)//用来比较运算符优先级的函数

switch(top)

case'

+'

:

-'

if(e=='

||e=='

)'

#'

){return1;

}//栈顶元素优先,返回1

else{return-1;

}//栈顶元素没有优先权,返回-1以下相同

*'

/'

('

){return-1;

else{return1;

}

){return0;

}//返回0表示搭配括号

else{return-1;

if(e=='

}elsereturn-1;

ElemTypeOperate(ElemTypea,ElemTypetheta,ElemTypeb)//计算加减乘除

switch(theta)

case43:

returna+b;

case45:

returna-b;

case42:

returna*b;

case47:

returna/b;

doubleEvalExpression(stringex)

ElemTypea,b,theta;

SqStackOPTR,OPND;

InitStack(OPTR);

//设运算符栈OPTR

InitStack(OPND);

//运算数栈OPND

Push(OPTR,'

);

//栈底

charch=ex[0];

for(inti=0;

ch!

='

||GetTop(OPTR)!

;

i++)

ElemTypeoprand=0;

intj=10;

while(ex[i]>

=48&

&

ex[i]<

=57)//判断是否是数字

{

oprand=oprand*j+ex[i++]-48;

}

if(oprand!

=0)

Push(OPND,oprand);

ch=ex[i];

if(ch>

=40&

ch<

=43||ch=='

||ch=='

{

switch(Precede(GetTop(OPTR),ch))

case-1:

//栈顶元素优先权--底--

Push(OPTR,ch);

break;

case0:

//栈顶元素和ex[i]为配对括号,脱掉

Pop(OPTR,a);

case1:

//栈顶元素优先

Pop(OPTR,theta);

Pop(OPND,b);

Pop(OPND,a);

Push(OPND,Operate(a,theta,b));

i--;

break;

}//switch

else

returnGetTop(OPND);

intmain()

intn;

stringstr;

cin>

>

n;

while(n--)

str;

doubleresult=EvalExpression(str+'

cout<

<

str<

"

="

result<

endl;

五、总结

1、程序中关于字符与数值之间的转换,是耗费我大量时间考虑的部分,我试图

寻找一种更高效的方法来实现,然而我仍在学习中。

2、这次实验用栈来求表达式值,让我更加熟悉了栈的特点及操作。

六、思考与提高

如果一个程序中要用到两个栈,为了不发生上溢错误,就必须给每个栈预先分配一个足够大的存储空间。

若每个栈都预分配过大的存储空间,势必会造成系统空间紧张。

如何解决这个问题?

答:

就像以上程序中预定义的L1,L2,事先给栈设置一个存储空间分配增量,当栈满的时候,使用realloc函数扩大栈的空间。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1