欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    数据结构顺序栈的基本运算.pdf

    • 资源ID:85977971       资源大小:271.58KB        全文页数:13页
    • 资源格式: PDF        下载积分:19.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要19.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构顺序栈的基本运算.pdf

    .数据结构上机报告 _年_月_日 姓名_ 学号_ 同组成员 _ 1.实验题目及要求 实验一:顺序栈的各种基本运算 编写一个程序,实现顺序栈的各种基本运算,并在基础上完成以下功能:1)初始化顺序栈;2)判断顺序栈是否为空;3)依次进栈元素 a,b,c,d,e;4)判断顺序栈是否为空;5)输出栈长度;6)输出从栈顶到栈底的元素;7)读出栈顶元素;8)删除栈顶元素;9)输出从栈顶到栈底的元素;10)判断顺序栈是否为空;11)释放栈。2.需求分析 首先初始化顺序栈(1)判断顺序队列 S 是否为空 输入参数的格式和合法取值范围:若顺序栈内无元素则输出顺序栈为空,反之 输出顺序栈为非空。输出格式:判断顺序栈是否为空:测试数据:初始化顺序表后,显示顺序栈为空。(2)依次进栈元素 a,b,c,d,e 输入参数的格式和合法取值范围:依次进栈元素 a,b,c,d,e并用逗号分隔。输出格式:依次进栈元素 a,b,c,d,e。测试数据:依次进队列元素 a,b,c,d,e后,顺序栈中包含 a,b,c,d,e五个元素。(3)输出栈的长度 输入参数的格式和合法取值范围:此时顺序栈中包含 a,b,c,d,e五个元素,故 长度为 5。输出格式:输出栈长度:5。测试数据:此时顺序栈中的元素为 a,b,c,d,e。所以屏幕显示输出栈长度:5。(4)输出从栈顶到栈底的元素.输入参数的格式和合法取值范围:进栈顺序依次为 a,b,c,d,e,故栈底为 a,栈 顶 为 e,则 栈 顶 到 栈 底 元 素 依 次 为e,d,c,b,a。输出格式:输出从栈顶到栈底的元素:edcba 测试数据:进栈顺序依次为 a,b,c,d,e,故栈底为 a,栈顶为 e,则栈顶到栈底 元素依次为 e,d,c,b,a。(5)读出栈顶元素 输入参数的格式和合法取值范围:顺序栈中元素从栈顶到栈底依次为 e,d,c,b,a。故栈顶为 e。输出格式:读出栈顶元素:e。测试数据:顺序栈中元素从栈顶到栈底依次为 e,d,c,b,a。故屏幕显示读出栈 顶元素为 e。(6)删除栈顶元素 输入参数的格式和合法取值范围:顺序栈中元素从栈顶到栈底依次为 e,d,c,b,a。故栈顶为 e,删除 e。输出格式:删除栈顶元素 e。测试数据:顺序栈中元素从栈顶到栈底依次为 e,d,c,b,a。进行删除栈顶元素 操作,即删除元素 e。(7)输出从栈顶到栈底的元素 输入参数的格式和合法取值范围:此时删除了栈顶元素 e,栈顶元素变为 d,故 顺 序 栈 中 元 素 从 栈 顶 到 栈 底 依 次 为d,c,b,a,输出格式:输出从栈顶到栈底的元素:dcba 测试数据:此时栈顶到栈底元素依次为 d,c,b,a,故屏幕显示输出从栈顶到栈 底的元素:dcba。3.概要设计(1)给出所用抽象数据类型的逻辑定义。ADT Stack 数据对象:D=ai|aiElemSet,i=1,2,n,n0 结构关系:R=|ai-1,ai D,i=2,n 基本操作:InitStack(&S)操作前提:S 是一个未初始化的空栈。操作结果:构造一个空栈 S。DestroyStack(&S)操作前提:栈 S 已存在。操作结果:栈 S 清被摧毁。StackEmpty(S)操作前提:栈 S 已存在。操作结果:若栈 S 为空栈,则返回 TURE,否则返回 FALSE。StackJudgement 操作前提:栈 S 已存在。操作结果:若栈 S 为空栈,则输出是,没否则输出否。.StackLength(S)操作前提:栈 S 已存在。操作结果:返回 S 的元素个数。Push(&S,e)操作前提:栈 S 已存在。操作结果:插入元素 e 为新的栈顶元素。GetTop(S,&e)操作前提:栈 S 已存在且非空。操作结果:用 e 返回 S 的栈顶元素。Pop(&S,&e)操作前提:栈 S 已存在且非空。操作结果:删除 S 的栈顶元素,并用 e 返回其值。StackTraverse(S,visit()操作前提:栈 S 已存在且非空。操作前提:从栈底到栈顶依次对 S 的每个数据元素调用函数 visit()。一 旦 visit()失败,则操作失败。(2)画出各模块之间的调用关系图。main DestroyStack InitStack StackEmpty StackJudgement StackLength Push GetTop Pop StackTraverse (3)用伪码给出主程序的主要处理过程。#include#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define NULL 0#define OVERFLOW-2 typedef int Status;typedef char SElemType;Status visit(SElemType e);.#define STACK_INIT_SIZE 100#define STACKINCREMENT 10 typedef struct SElemType *base;SElemType *top;int stacksize;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 DestroyStack(SqStack&S)free(S.base);S.base=NULL;S.top=NULL;S.stacksize=0;return OK;Status StackEmpty(SqStack S)if(S.top=S.base)return TRUE;else return FALSE;Status StackJudgement(SqStack S)if(S.top=S.base)printf(是n);else printf(否n);return OK;.Status Push(SqStack&S,SElemType 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;int StackLength(SqStack S)return S.top-S.base;/StackLength Status visit(SElemType e)printf(%c,e);return OK;Status GetTop(SqStack S,SElemType&e)if(S.top=S.base)return ERROR;e=*(S.top-1);return e;Status Pop(SqStack&S,SElemType&e)if(S.top=S.base)return ERROR;e=*-S.top;return e;Status StackTraverse(SqStack S,Status(*visit)(SElemType)while(S.top!=S.base)visit(*-S.top);return OK;void main()SElemType e;.SqStack S;printf(1)初始化顺序栈。n);InitStack(S);printf(2)判断顺序栈是否为空:n);StackJudgement(S);StackEmpty(S);printf(3)依次进栈元素 a,b,c,d,e:n);Push(S,a);Push(S,b);Push(S,c);Push(S,d);Push(S,e);printf(4)判断顺序栈是否为空:n);StackJudgement(S);StackEmpty(S);printf(5)输出栈长度:%dn,StackLength(S);printf(6)输出从栈顶到栈底的元素:n);StackTraverse(S,visit);printf(n);printf(7)读出栈顶元素:%cn,GetTop(S,e);printf(8)删除栈顶元素:%cn,Pop(S,e);printf(9)输出从栈顶到栈底的元素:n);StackTraverse(S,visit);printf(n);printf(10)判断顺序栈是否为空n);StackEmpty(S);StackJudgement(S);printf(11)释放栈。);DestroyStack(S);4.详细设计(1)类型定义 typedef struct SElemType *base;SElemType *top;int stacksize;SqStack;(2)给出所用抽象数据类型中每个操作的伪码算法 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 DestroyStack(SqStack&S)free(S.base);S.base=NULL;S.top=NULL;S.stacksize=0;return OK;Status StackEmpty(SqStack S)if(S.top=S.base)return TRUE;else return FALSE;Status StackJudgement(SqStack S)if(S.top=S.base)printf(是n);else printf(否n);return OK;Status Push(SqStack&S,SElemType 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;.int StackLength(SqStack S)return S.top-S.base;/StackLength Status visit(SElemType e)printf(%c,e);return OK;Status GetTop(SqStack S,SElemType&e)if(S.top=S.base)return ERROR;e=*(S.top-1);return e;Status Pop(SqStack&S,SElemType&e)if(S.top=S.base)return ERROR;e=*-S.top;return e;Status StackTraverse(SqStack S,Status(*visit)(SElemType)while(S.top!=S.base)visit(*-S.top);return OK;(3)给出其他模块的伪码算法 void main()SElemType e;SqStack S;printf(1)初始化顺序栈。n);InitStack(S);printf(2)判断顺序栈是否为空:n);StackJudgement(S);StackEmpty(S);printf(3)依次进栈元素 a,b,c,d,e:n);Push(S,a);Push(S,b);Push(S,c);Push(S,d);Push(S,e);.printf(4)判断顺序栈是否为空:n);StackJudgement(S);StackEmpty(S);printf(5)输出栈长度:%dn,StackLength(S);printf(6)输出从栈顶到栈底的元素:n);StackTraverse(S,visit);printf(n);printf(7)读出栈顶元素:%cn,GetTop(S,e);printf(8)删除栈顶元素:%cn,Pop(S,e);printf(9)输出从栈顶到栈底的元素:n);StackTraverse(S,visit);printf(n);printf(10)判断顺序栈是否为空n);StackEmpty(S);StackJudgement(S);printf(11)释放栈。);DestroyStack(S);5.调试分析(1)调试过程中主要遇到哪些问题?是如何解决的?在调试过程中,输出从栈顶到栈底的元素时出现了问题,使得输出不是字母而是数字,后发现原因在输出的数据类型错误,从而输出数字,将输出数据类型改为%c 字符型后结果正确。(2)经验和体会 通过这次试验,我深切的理解了顺序栈的知识要点和表示与实现。并通过 C 语言实现了顺序队列的初始化,判空,删除,插入,等。进一步熟练了 C 语言操作环境。.6.测试结果 7.附件#include#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define NULL 0#define OVERFLOW-2 typedef int Status;typedef char SElemType;Status visit(SElemType e);#define STACK_INIT_SIZE 100#define STACKINCREMENT 10 typedef struct SElemType *base;SElemType *top;int stacksize;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 DestroyStack(SqStack&S)free(S.base);S.base=NULL;S.top=NULL;S.stacksize=0;return OK;Status StackEmpty(SqStack S)if(S.top=S.base)return TRUE;else return FALSE;Status StackJudgement(SqStack S)if(S.top=S.base)printf(是n);else printf(否n);return OK;Status Push(SqStack&S,SElemType 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;int StackLength(SqStack S)return S.top-S.base;/StackLength Status visit(SElemType e)printf(%c,e);return OK;Status GetTop(SqStack S,SElemType&e)if(S.top=S.base)return ERROR;e=*(S.top-1);return e;Status Pop(SqStack&S,SElemType&e)if(S.top=S.base)return ERROR;e=*-S.top;return e;Status StackTraverse(SqStack S,Status(*visit)(SElemType)while(S.top!=S.base)visit(*-S.top);return OK;void main()SElemType e;SqStack S;printf(1)初始化顺序栈。n);InitStack(S);printf(2)判断顺序栈是否为空:n);StackJudgement(S);StackEmpty(S);printf(3)依次进栈元素 a,b,c,d,e:n);Push(S,a);Push(S,b);Push(S,c);.Push(S,d);Push(S,e);printf(4)判断顺序栈是否为空:n);StackJudgement(S);StackEmpty(S);printf(5)输出栈长度:%dn,StackLength(S);printf(6)输出从栈顶到栈底的元素:n);StackTraverse(S,visit);printf(n);printf(7)读出栈顶元素:%cn,GetTop(S,e);printf(8)删除栈顶元素:%cn,Pop(S,e);printf(9)输出从栈顶到栈底的元素:n);StackTraverse(S,visit);printf(n);printf(10)判断顺序栈是否为空n);StackEmpty(S);StackJudgement(S);printf(11)释放栈。);DestroyStack(S);

    注意事项

    本文(数据结构顺序栈的基本运算.pdf)为本站会员(g****s)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开