栈的顺序表示和实现.docx

上传人:b****6 文档编号:4485025 上传时间:2022-12-01 格式:DOCX 页数:8 大小:36.14KB
下载 相关 举报
栈的顺序表示和实现.docx_第1页
第1页 / 共8页
栈的顺序表示和实现.docx_第2页
第2页 / 共8页
栈的顺序表示和实现.docx_第3页
第3页 / 共8页
栈的顺序表示和实现.docx_第4页
第4页 / 共8页
栈的顺序表示和实现.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

栈的顺序表示和实现.docx

《栈的顺序表示和实现.docx》由会员分享,可在线阅读,更多相关《栈的顺序表示和实现.docx(8页珍藏版)》请在冰豆网上搜索。

栈的顺序表示和实现.docx

栈的顺序表示和实现

长沙理工大学

数学与计算科学学院

实验报告

实验项目名称栈的顺序表示和实现

所属课程名称数据结构

实验类型验证型

实验日期2013.11.14

班级信计1201

学号201253100109

姓名

成绩

 

一、实验概述:

【实验目的】

掌握栈的特点及顺序栈的基本运算

【实验原理】

1、栈是限定仅在表尾插入或删除操作的线性表,栈的修改是按后进先出的原则进行的

2、栈的顺序存储表示:

#defineSTACK_INIT_SIZE6//存储空间初始分配量

#defineSTACKINCREMENT2//存储空间分配增量

typedefstruct{

SElemType*base;//在栈构造之前和销毁之后,base的值为NULL

SElemType*top;//栈顶指针

intstacksize;//当前分配的存储空间,以元素为单位

}SqStack;

【实验环境】

VC++6.0

二、实验内容:

【实验方案】

编写主函数,调用栈的初始化建空栈、取栈顶元素、进栈以及出栈的算法,调制运行,得出结果。

【实验过程】(实验步骤、记录、数据、分析)

1、输入初始化建空栈、取栈顶元素、进栈、出栈算法和主函数:

//栈的顺序存储表示

#defineSTACK_INIT_SIZE6;//存储空间初始分配量

#defineSTACKINCREMENT2;//存储空间分配增量

typedefstruct{

SElemType*base;//在栈构造之前和销毁之后,base的值为NULL

SElemType*top;//栈顶指针

intstacksize;//当前分配的存储空间,以元素为单位

}SqStack;

StatusInitStack(SqStack&S){

//构造一个空栈S

………………

}//InitStack

StatusGetTop(SqStackS,SElemType&e){

//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR

………………

}//GetTop

StatusPush(SqStack&S,SElemTypee){

//插入元素e为新的栈顶元素

………………

}//Push

StatusPop(SqStack&S,SElemType&e){

//若栈顶不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR

………………

}//Pop

voidmain()

{

………………

}

2、调试:

发现错误:

在以下编码中出现多个错误:

StatusInitStack(SqStack&S){

S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

①syntaxerror:

missing')'before';';

②syntaxerror:

')';

③illegalindirection;

这三个错误主要是由于前面栈的顺序存储表示编码中出现错误,应把“#defineSTACK_INIT_SIZE6;#defineSTACKINCREMENT2;”中的两个分号去掉;

修改之后,继续调试,又发现一个错误:

④'Sqstack':

undeclaredidentifier即Sqstack无定义,查看前面编码发现,是对’SqStack’进行定义,故这里也要与之相应,需把’Sqstack’改为’SqStack’;

3、调试到无任何错误,运行:

因栈的存储空间初始化分配量为6,故需输入六个数字“2356775”,按回车键,得到“2356775;e=5”其中e=5表示栈顶元素为5,由此完成了栈的初始化建空栈、取栈顶元素算法;接着输入一个数“23”,表示要插入的元素,回车,得到“23567723;e=23;23”,此时“23”已进栈,栈顶元素变为e=23,因存储空间为6,而栈的修改是按后进先出原则进行,所以栈顶元素“23”先出栈,由此完成了栈的进栈、出栈算法;最终栈的顺序表示和实现得以完成。

【实验结论】(结果)

【实验小结】(收获体会)

这次上机,顺利的完成了栈的顺序表示和实现的上机实验任务,但是没有能够独立编写主函数,而是需要在老师和同学的帮助下才能够编写出来,所以自己还要继续努力,争取学会自己编写主函数。

三、指导教师评语及成绩:

评语

评语等级

及格

不及格

1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强

2.实验方案设计合理

3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)

4实验结论正确.

成绩:

指导教师签名:

批阅日期:

 

附录1:

源程序

#include

#include

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

typedefintStatus;

typedefintSElemType;

#defineSTACK_INIT_SIZE6//存储空间初始分配量

#defineSTACKINCREMENT2//存储空间分配增量

typedefstruct{

SElemType*base;//在栈构造之前和销毁之后,base的值为NULL

SElemType*top;//栈顶指针

intstacksize;//当前分配的存储空间,以元素为单位

}SqStack;

StatusInitStack(SqStack&S){

//构造一个空栈S

S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!

S.base)exit(OVERFLOW);//存储分配失败

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

returnOK;

}//InitStack

StatusGetTop(SqStackS,SElemType&e){

//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR

if(S.top==S.base)returnERROR;

e=*(S.top-1);

returnOK;

}//GetTop

StatusPush(SqStack&S,SElemTypee){

//插入元素e为新的栈顶元素

if(S.top-S.base>=S.stacksize){//栈满,追加存储空间

S.base=(SElemType*)realloc(S.base,

(S.stacksize+STACKINCREMENT)*sizeof(SElemType));

if(!

S.base)exit(OVERFLOW);//存储分配失败

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

S.stacksize+=STACKINCREMENT;

}

*S.top++=e;

returnOK;

}//Push

StatusPop(SqStack&S,SElemType&e){

//若栈顶不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR

if(S.top==S.base)returnERROR;

e=*--S.top;

returnOK;

}//Pop

voidmain()

{

SqStackS;inti;

SElemTypee;

InitStack(S);

for(i=0;i

scanf("%d",&S.base[i]);

S.top++;

}

for(i=0;i

printf("%d",*(S.base+i));

printf("\n");

GetTop(S,e);

printf("e=%d\n",e);

scanf("%d",&e);

Push(S,e);

for(i=0;i

printf("%d",*(S.base+i));

printf("\n");

Pop(S,e);

printf("e=%d\n",e);

for(i=0;i

printf("%d",*(S.base+i));

printf("\n");

}

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

当前位置:首页 > 高中教育 > 语文

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

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