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

栈的定义、表示、实现.pptVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程的内容: 第三章 栈和队列 3.1 栈(Stack) 3.2 队列 (Queue) 1.定义 讨论1:堆栈是什么?它与一般线性表有什么不同? 顺序栈的入栈操作——例如用堆栈存放(A,B,C,D) 顺序栈出栈操作——例如从栈中取出‘B’ 讨论3:为什么要设计堆栈?它有什么独特用途? 例2(严题集3.1)一个栈的输入序列为1,2,3,若在入栈的过程中允许出栈,则可能得到的出栈序列是什么? 例4:设依次进入一个栈的元素序列为c,a,b,d,则可得到出栈的元素序列是: A)a,b,c,d B)c,d,a,b C)b,c,d,a D)a,c,d,b 3、若已知一个栈的进栈序列是1,2,3,….,n,其输出序列为P1,P2,P3,….Pn,若P1=3,则P2为 A. 可能是2 B. 一定是2 C.可能是1 D. 一定是1 * 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式 通常称,栈和队列是限定插入和删除操作只能在表的“端点”进行的线性表。 线性表(L) 栈(S) 队列(Q) Insert(L, i, x) Insert(S, n+1, x) Insert(Q, n+1, x) 1≤i≤n+1 Delete(L, i) Delete(S, n) Delete(Q, 1) 1≤i≤n 栈和队列是两种常用的数据类型 3.1 栈 限定只能在表尾进行插入和删除运算的线性表。 表的尾端称为栈顶,表头端称为栈底。 例如: 栈 S= (a1 , a2 , a3 , ……….,an-1 , an ) an称为栈顶元素 a1称为栈底元素 强调:插入和删除都只能在表的一端(栈顶)进行! 插入元素到栈顶的操作,称为入栈。 从栈顶删除最后一个元素的操作,称为出栈。 一、概念: 想一想:要从栈中取出a1,应当如何操作? 与线性表相同,仍为一对一( 1:1)关系。 用顺序栈或链栈存储均可,但以顺序栈更常见 只能在栈顶运算,且访问结点时依照后进先出(LIFO)或先进后出(FILO)的原则。 关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的存储结构有别而不同。 3. 存储结构: 4. 运算规则: 5. 实现方式: 2. 逻辑结构: 堆栈是一种特殊的线性表,它只能在表的一端(即栈顶)进行插入和删除运算。 与一般线性表的区别:仅在于运算规则不同。 一般线性表 堆栈 逻辑结构:1:1 逻辑结构: 1:1 存储结构:顺序表、链表 存储结构:顺序栈、链栈 运算规则:任意位置存取 运算规则:后进先出(LIFO) “进”=插入=压入=PUSH(an+1) “出”=删除=弹出=POP(an) 二、栈的抽象数据类型定义 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 端为栈底。 基本操作: } ADT Stack (1)初始化栈 InitStack(S) (2)入栈 Push(S,e) (3)出栈 Pop(S,e) (4)获取栈顶元素内容 GetTop(S,e) (5)判断栈是否为空 StackEmpty(S) 基本操作: 建栈、判断栈满或栈空、入栈、出栈、读栈顶元素值,等等。 #define STACK_INIT_SIZE 100; //存储空间初始分配量 #define STACKINCREMENT 10; //存储空间分配增量 typedef struct { SElemType *base; //栈底指针 SElemType *top; //栈顶指针 int stacksize; //当前已分配的存储空间 } SqStack; 三、栈的表示和实现 1. 顺序栈 // -----栈的顺序存储表示----- 栈不存在的条件: base=NULL; 栈为空 的条件 : base=top; 栈满的条件 : top-base=stacksize; a1 a

文档评论(0)

lyxbb + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档