栈及其应用.docx

上传人:b****1 文档编号:10780077 上传时间:2023-05-27 格式:DOCX 页数:9 大小:44.89KB
下载 相关 举报
栈及其应用.docx_第1页
第1页 / 共9页
栈及其应用.docx_第2页
第2页 / 共9页
栈及其应用.docx_第3页
第3页 / 共9页
栈及其应用.docx_第4页
第4页 / 共9页
栈及其应用.docx_第5页
第5页 / 共9页
栈及其应用.docx_第6页
第6页 / 共9页
栈及其应用.docx_第7页
第7页 / 共9页
栈及其应用.docx_第8页
第8页 / 共9页
栈及其应用.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

栈及其应用.docx

《栈及其应用.docx》由会员分享,可在线阅读,更多相关《栈及其应用.docx(9页珍藏版)》请在冰点文库上搜索。

栈及其应用.docx

栈及其应用

贵州大学计算机科学与技术学院

计算机科学与技术系上机实验报告

课程名称:

数据结构

班级:

实验日期:

2013-4-22

姓名:

学号:

指导教师:

实验序号:

实验成绩:

一、实验名称

栈及其应用

二、实验目的及要求

1、熟悉栈的原理和实现方式;

2、理解使用栈消除函数递归调用的原理;

3、掌握后缀表达式计算的方法。

三、实验环境

VisualStudio2010

四、实验内容

1、栈实现阶乘函数;

2、栈实现后缀表达式的计算。

五、算法描述及实验步骤

函数调用栈的结构如下:

第n层调用

(当前函数局部变量空间)

第n-1层调用

(当前函数的主调函数变量空间)

第1层调用

主函数局部变量空间

函数调用的栈空间

使用栈消去递归的算法框架如下:

初始化栈;

将完整问题参数压栈;

while(栈非空)

{

取出栈顶元素所描述的问题

如果可以直接解决,则直接解决

否则分解为子问题压栈

}

后缀表达式是运算符在运算数之后的一种表达式存储的数据结构,不需要比较运算符优先级别,只需要每次读到运算数时压栈,读到运算符时将运算数出栈,将结果压栈即可。

最后的运算结果存放在栈底。

实验步骤

1、创建结构体栈Stack:

其中有栈顶指针,栈底指针。

2、创建顺序栈SqStack:

其中有数据域data,next指针。

3、从程序中写出所要求的阶乘值(用栈求阶乘函数)。

4、在程序中用数组表示后缀表达式,从控制面板输出结果(用栈实现后缀表达式的计算)。

5、调试运行。

六、调试过程及实验结果

1、用栈实现阶乘函数结果如下:

2、用栈实现后缀表达式计算结果如下:

七、总结

本次试验是用栈来完成阶乘函数与后缀表达式的计算,从中加深了对栈原理的理解并懂得如何用栈来解决一些实际问题,利用栈是一种递归的思想,学会怎样使用栈,如何将其运用到编程实践中去是一件值得非常重视的问题,希望在以后的学习中不断将其运用到实处。

八、附录

1、用栈实现阶乘函数代码如下:

#include"iostream"

#include

usingnamespacestd;

typedefstructSqStack

{

chardata;

structSqStack*next;

}SqStack;//链元素

typedefstructStack

{

structSqStack*base;//栈底指针

structSqStack*top;//栈顶指针

}Stack;//栈

StackS;//栈的全局对象S

intAj;

voidcreatstack()

{

S.top=S.base=NULL;

}//建立初始化链栈

voidpush(Stack&S,inte)

{

SqStack*Q;

Q=(SqStack*)malloc(sizeof(SqStack));

if(!

Q)exit(0);

Q->next=S.top;//前一结点置在新建结点之后

S.top=Q;//栈顶指针往上移动

S.top->data=e;

++Aj;//记录字符的个数

}//左括号入栈

charPop(Stack&S)

{

chare;

SqStack*q;//辅助指针

e=S.top->data;

q=S.top->next;

free(S.top);

S.top=q;//栈顶指针下移

returne;

}//括号出栈

intcheck()

{

intn=5;//表示求多少数的阶乘

intNum=1;

for(inti=n;i>=1;i--)

{

push(S,i);

}

for(Aj;Aj>0;Aj--)

{

Num=Num*Pop(S);

}

returnNum;

}

voidmain()//主函数

{

intReturn;

creatstack();//调用初始化栈

Return=check();

cout<<"输出5的阶乘为:

"<

cout<

}

2、用栈实现后缀表达式计算代码如下:

//输出运算结果为:

15

#include"iostream"

#include

usingnamespacestd;

typedefstructSqStack

{

intdata;

structSqStack*next;

}SqStack;//链元素

typedefstructStack

{

structSqStack*base;//栈底指针

structSqStack*top;//栈顶指针

}Stack;//栈

StackS;//栈的全局对象S

voidcreatstack()

{

S.top=S.base=NULL;

}//建立初始化链栈

voidpush(Stack&S,inte)

{

SqStack*Q;

Q=(SqStack*)malloc(sizeof(SqStack));

if(!

Q)exit(0);

Q->next=S.top;//前一结点置在新建结点之后

S.top=Q;//栈顶指针往上移动

S.top->data=e;

}

intPop(Stack&S)

{

inte;

SqStack*q;//辅助指针

e=S.top->data;

q=S.top->next;

free(S.top);

S.top=q;//栈顶指针下移

returne;

}//括号出栈

intcheck()

{

intReturn;

inta=0;

intRet;

charstring[]={'1','_','0','5','1','_','0','1','_','5','5','2','^','+','-','*','/','='};

charch,sh,*st,*stt;//ch表示前一个字符,sh表示后一个字符

cout<<"后缀表达式为:

"<

st=stt=string;//分别将st,stt指向输入字符串的首地址

ch=*st;//将字符串的第一个字符赋给字符变量ch

sh=*(++stt);

while(ch!

='=')//判断字符是否为结束标志

{//"_"即下划线表示:

当输入为2位数或2位数以上时,中间用下划线隔开。

if(ch!

='+'||ch!

='-'||ch!

='*'||ch!

='/'||ch!

='^')//判断是否满足入栈和出栈条件

{

if((ch>='0'&&ch<='9')||sh=='_')

{

if(ch>='0'&&ch<='9'&&sh=='_')//将字符型转化为整型,之后压栈

a=(a+ch-48)*10;//1的ACSII码为48;

else

{

a=(a+ch-48);

push(S,a);

a=0;

}

}

}

if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='^')//判断遇到运算符就从栈中出来2个数进行相应的运算

{

intfirst=Pop(S);

intsecond=Pop(S);

switch(ch)

{

case'+':

{Ret=first+second;push(S,Ret);}break;

case'-':

{Ret=first-second;push(S,Ret);}break;

case'*':

{Ret=first*second;push(S,Ret);}break;

case'/':

{Ret=first/second;push(S,Ret);}break;

case'^':

{

inttemp=1;

for(first;first>=1;first--)

{

temp=temp*second;

}

push(S,temp);

}break;

}

}

ch=*(++st);//字符往后移动

sh=*(++stt);

}

if(ch=='=')

Return=Pop(S);

returnReturn;

}

voidmain()//主函数

{

intResult;

creatstack();//调用初始化栈

Result=check();

cout<<"此表达式的结果为:

"<

}

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2