栈的基本操作
忻州师范学院计算机科学与技术系
实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
实验名称 栈的基本操作
专业班级 计算机科学与技术1003 姓名 张亚茹 学号 201008111180 指导教师 李荣 成绩 日期 2011-12-2
一、实验目的
熟练掌握栈的类型定义方法、存储方法及其基本运算(栈顶元素的插入、删除等)的实现方法,培养综合运用所学知识,根据具体问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
进行数据结构设计和算法设计的能力。 二、实验内容
建立栈,并实现栈的。
要求:要有良好的人机界面,具备栈顶元素插入、删除、以及栈的初始化,判空,取栈顶
元素的功能。
三、实验要求
1(在问题
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
的基础上选择合适的存储结构,进行算法设计,编制程序并上机调试成功。
2(按要求完成实验报告。
3(保存和打印出程序的运行结果,并结合程序进行分析。
四、实验步骤
1(需求分析
本演示程序用C语言编写,要有良好的人机界面,实现栈的基本功能:插入、删除、栈的初始化、
判空、取栈顶元素。
1) 输入的形式和输入值的范围:
通过键盘输入数据,输入的数据可以是数字或字符,如:3 -23 100 56
或 r q r y u
2) 输出的形式:
以栈的形式输出。如:3-> -23-> 100-> 56
或 r->q->r->y->u
3) 预期结果:
要求体现良好的人机界面,插入、删除数或字符之前,要给出提示信息,插入、删
除完成之后,要提示操作成功,并显示结果。
2(概要设计
本程序包含7个函数:
? 主函数main()
?初始化函数InitStack(&S)
?插入栈顶元素Push(&S,e)
?删除栈顶元素Pop(&S,e)
?取栈顶元素GetTop(&S,e)
各函数间关系如下:
main()
InitStack () Push () Pop () GetTop ( )
3(详细设计
实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。对主程序和其他模块也都
需要写出伪码算法。
(1)栈的存储结构
typedef struct SqStack
{ SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
(2)栈的基本操作算法
初始化函数InitStack(&S)
int InitStack(SqStack &s )
{
s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base) exit(OVERFLOW);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
插入栈顶元素Push(&S,e)
int Push(SqStack &s, char 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;
return OK;
}
删除栈顶元素Pop(&S,e)
int Pop(SqStack &s,char &e)
{
if(s.top==s.base) return ERROR;
e=*--s.top;
return OK;
}
取栈顶元素GetTop(&S,e)
int GetTop(SqStack &s,char &e)
{
If(s->top==-1)
Return 0;
Else{
x=s->data[s->top];
Return 1;
}
}
4(调试分析
1)分析算法的总体结构,分清程序中各部分应实现的功能;
2)调试方法通常有二种:总体调试、分块调试。你主要采用哪种调试方法,
总体调试:把算法组装成单个程序,按C程序结构
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
分层检查调试;
分块调试:把算法分拆成几个功能模块,按C程序结构标准分模块调试;
3)错误跟踪有两种方法:错误信息排查法、执行路线跟踪法。
错误信息排查法:根据错误信息进行分类排查,要求分析者对C的错误代码要有足够的了解和
认识,有
经验
班主任工作经验交流宣传工作经验交流材料优秀班主任经验交流小学课改经验典型材料房地产总经理管理经验
的程序员多用此法。
执行路线跟踪法:变量分析法(跟踪变量的值)、插入标签法(插入输出标签),这种方法适
合初学者。
4)调试分析不宜面面俱到,具体写出关键问题就行。
分析如下:
主函数main()首先调用构造栈函数SqStack(),然后分别调用以下函数:
初始化函数: InitStack(&S)
入栈函数: Push(&S,e)
出栈函数: Pop(&S,e)
取栈顶元素函数: GetTop(&S,e)
由上述结构可知,采用分功能模块调试的方法较合理,即主要功能按以下顺序实现:构造——
初始化——入栈——出栈——取栈顶的元素。
5(使用说明
输入1显示
输入2显示
输入12显示:
五、实验总结(调试和运行程序过程中产生的问题及采取的措施;对算法的程序的讨论、分析,改
进设想以及其它经验教训;对实验方式、组织、设备、题目的意见和建议等)
附源程序清单:
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define stack_init_size 100
#define stackincrement 10
typedef int status;
typedef int selemtype;
typedef struct
{
selemtype *base;
selemtype *top;
int stacksize;
int length;
}sqstack;
status initstack(sqstack &s)
{
s.base=(selemtype *)malloc(stack_init_size*sizeof(selemtype));
if(!s.base)
exit(OVERFLOW);
s.top=s.base;
s.stacksize=stack_init_size;
return OK;
}//
status createstack(sqstack &s) {
int i,m;
printf("请输入数据:");
for(i=0;i=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;
s.length++;
return OK;
}//
status pop(sqstack &s,selemtype &e) {
if(s.top==s.base)
return ERROR;
e=*--s.top;
s.length--;
return OK;
}//
status gettop(sqstack s,selemtype &e)
{
if(s.top==s.base)
return ERROR;
e=*(s.top-1);
return OK;
}//
status output(sqstack s) {
int i;
selemtype e;
printf("输出序列为:");
for(i=0;i
本文档为【栈的基本操作】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。