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

第7讲 栈与队列1.pptx

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 主讲人:陈红丽 第3章 栈和队列 掌握栈和队列的特点,并能在相应的应用问题中正确选用 熟练掌握栈的两种存储结构的基本操作实现算法,特别应注意栈满和栈空的条件 熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的条件 掌握表达式求值方法 教学目标 3.1 栈和队列的定义和特点 3.2 案例引入 3.3 栈的表示和操作的实现 3.4 栈与递归 3.5 队列的的表示和操作的实现 3.6 案例分析与实现 教学内容 用铁路调度站表示栈 第7讲 栈(Stack) 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式 3.1  栈和队列的定义和特点 1. 定义 只能在表的一端(栈顶)进行插入和删除运算的线性表 栈 只能在栈顶运算,且访问结点时依照后进先出(LIFO)或先进后出(FILO)的原则 4.运算规则 栈的运算演示 能否由入栈序列A、B、C、D、E得到出栈序列CBDAE? A 操作序列: 出栈序列: ① 元素A入栈 ② 元素B入栈 ③ 元素C入栈 B C D E DE 操作序列: 出栈序列: ① 元素A入栈 A ② 元素B入栈 B ③ 元素C入栈 ④ 元素C出栈 C C ⑤ 元素B出栈 B 栈的运算演示 能否由入栈序列A、B、C、D、E得到出栈序列CBDAE? 操作序列: 出栈序列: ① 元素A入栈 A ② 元素B入栈 ③ 元素C入栈 ④ 元素C出栈 C ⑤ 元素B出栈 B ⑥ 元素D入栈 ⑦ 元素D出栈 D ⑧ 元素A出栈 A 栈的运算演示 能否由入栈序列A、B、C、D、E得到出栈序列CBDAE? D E 操作序列: 出栈序列: ① 元素A入栈 ② 元素B入栈 ③ 元素C入栈 ④ 元素C出栈 C ⑤ 元素B出栈 B ⑥ 元素D入栈 ⑦ 元素D出栈 D ⑧ 元素A出栈 A ⑨ 元素E入栈 ⑩ 元素E出栈 E 栈的运算演示 能否由入栈序列A、B、C、D、E得到出栈序列CBDAE? E 435612中到了12顺序不能实现; 135426可以实现。 1.如果一个栈的输入序列为123456,能否得到435612和135426的出栈序列? 练习 练习 A.i B.n-i C.n-i+1 D.不确定 C 2.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为 3.3 栈的表示和操作的实现 “进” =压入=PUSH() “出” =弹出=POP( ) ADT Stack { 数据对象:D={ ai | ai ∈ElemSet, i=1,2,...,n, n≥0 } 数据关系:R1={ ai-1, ai | ai-1, ai∈D, i=2,...,n } 约定an 端为栈顶,a1 端为栈底。 基本操作: Push(S, e)  初始条件:栈 S 已存在。  操作结果:插入元素e为新的栈顶元素。 Pop(S, e)  初始条件:栈 S 已存在且非空。  操作结果:删除S的栈顶元素,并用e返回其值。 其他略 } ADT Stack 抽象数据类型栈的定义 写入:v[i]= ai 读出: x= v[i] 压入:PUSH (an+1) 弹出: POP (x) 前提:一定要预设栈顶指针top! an+1 顺序栈与顺序表 typedef struct {   SElemType *base; // 存储空间基址   SElemType * top; // 栈顶指针   int stacksize;  // 允许的最大存储空间 // 以元素为单位 } SqStack; c b a 利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素。 非空栈中的栈顶指针指向栈顶元素之上的位置 SqStack … 3 2 1 0 结构体类型 顺序栈的表示 设S是SqStack类型的变量。base是栈底指针,top是栈顶指针。 栈不存在条件 S.base= =NULL 栈空条件 S.top==S.base 栈满条件 S.top-S.base=S.stacksize c b a … 3 2 1 0 A B … D E F G 顺序栈的表示 构造一个空栈 步骤: (1)分配空间并检查空间是否分配失败,若失败则返回错误 顺序栈初始化 s (2)设置栈顶指针 S.top = S.base; (3)设置栈大小 Status InitStack (SqStack S){ S.base = new SElemType[MAXSIZE]; if (!S.base

您可能关注的文档

文档评论(0)

189****6140 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档