网站大量收购独家精品文档,联系QQ:2885784924

数据结构实验报告 栈和队列.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 PAGE 11页 北京邮电大学电信工程学院 第 PAGE 1页 2007级数据结构实验报告 实验名称: 实验二 栈和队列 日 期: 2008年11月15日 1.实验要求 实验目的 通过选择下面五个题目之一进行实现,掌握如下内容: 进一步掌握指针、模板类、异常处理的使用 掌握栈的操作的实现方法 掌握队列的操作的实现方法 学习使用栈解决实际问题的能力 学习使用队列解决实际问题的能力 实验内容 2.1题目1 根据栈和队列的抽象数据类型的定义,按要求实现一个栈或一个队列。 要求: 实现一个共享栈 实现一个链栈 实现一个循环队列 实现一个链队列 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构 存储结构: 特殊线性表:栈,队列 下标: 下标:0 1 i-1 共享栈 a1 a2 …… ai bj …… b2 b1 栈1底 top1 top2 栈2底 StackSize-1 循环队列front 循环队列 front rear a6 a5 a4 a7 an-1 an a1 ∧ 栈顶 栈底 top 链栈 ∧ ∧ a1 a2 an ∧ 非空链队列 ∧ 空链队列 front rear front rear 2.2 关键算法分析 共享栈的入栈算法伪码(Push): 1.如果栈满,抛出上溢异常。 2.判断是插在栈1还是栈2: 2.1如果在栈1插入,则栈顶指针top1加1,在top1处填入元素x; 2.2如果在栈2插入,则栈顶指针top2加1,在top2处填入元素x。 共享栈的出栈算法伪码(Pop): 1. 判断是在栈1删除还是在栈2删除。 2. 若是在栈1删除,则 2.1 若栈1为空栈,抛出下溢异常; 2.2 删除并返回栈1的栈顶元素; 3. 若是在栈2删除,则 3.1 若栈2为空栈,抛出下溢异常; 3.2 删除并返回栈2的栈顶元素。 共享栈的取栈顶元素算法伪码(GetTop): 判断是在栈1取还是栈2取; 如果在栈1取,则 2.1 若栈1不空,返回栈顶元素的值,不删除; 2.2 若栈1空,返回0; 3.如果在栈2取,则 3.1 若栈2不空,返回栈顶元素的值,不删除; 3.2 若栈2空,返回0。 链栈的入栈算法伪码(Push): 申请一个新的结点,数据域为x; 将新结点插在栈顶; 栈顶指针重新指向栈顶元素。 链栈的出栈算法伪码(Pop): 如果栈空,抛出下溢异常; 暂存栈顶元素; 将栈顶结点摘链; 删除该结点,返回该元素的值。 链栈的取栈顶元素算法的伪码(GetTop): 如果栈非空,返回栈顶元素的值,不删除。 循环队列的入队算法伪码(EnQueue): 如果队满,抛出上溢异常; 队尾指针在循环意义下加1; 在队尾插入元素。 循环队列的出队算法伪码(DeQueue): 如果队空,抛出下溢异常; 队头指针在循环意义下加1; 读取并返回出队前的队头元素。 循环队列的取队头元素算法伪码(GetQueue): 如果队空,抛出下溢异常; 值为队头指针的工作指针i在循环意义下加1,注意不给队头指针赋值; 返回队头指针的队头元素。 链队列的入队算法伪码(EnQueue): 申请一个数据域为x的新结点; 该结点的next域置空; 将其插到队尾。 链队列的出队算法伪码(DeQueue): 如果队空,抛出下溢异常; 暂存队头元素; 将队头元素所在结点摘链; 如果被删除的队头元素同时也是队尾元素,则修改队尾指针。 链队列的取队头元素算法伪码(GetQueue): 如果队非空,返回队头元素的值,不删除。 ∧ ∧ a1 ∧ 特殊情况:队列长度为1 a1 a2 an ∧ 一般情况:队列长度大于1 链队列出队操作 front rear front rear p p 以上算法的时间复杂度均为O(1)。可比较的是空间性能。初始时顺序栈必须确定一个固定的长度,所以有存储元素个数的限制和空间浪费的问题。链栈没有栈满的问题,只有当内存没有可用空间时才会出现栈满。但是每个元素都需要一个指针域,所以产生了结构性开销。循环队列和链队列的空间性能的比较与顺序栈和链栈的空间性能比较类似,只是循环队列不能像顺序栈那样共享空间,通常不能在一个数组中存储两个循环队列。 3. 程序运行结果 开始 开始 新建共享栈B 对B入栈操作 判断两个栈是否为空并输出判断结果 对B取栈顶元素操作 判断两个栈是否为空并输出判断结果 判断两个栈是否为空并输出判断结果 对B出栈操作 共享栈主函数流程图: 新建链栈LS 新建链

文档评论(0)

159****8201 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档