第3章特殊线性表-1解读.pptVIP

  • 1
  • 0
  • 约5.55千字
  • 约 48页
  • 2016-11-01 发布于湖北
  • 举报
栈的链接存储结构及实现 链栈:栈的链接存储结构 first a1 a2 an ∧ ai 链栈需要加头结点吗? 如何改造链表实现栈的链接存储? 将哪一端作为栈顶? 将链头作为栈顶,方便操作。 链栈不需要附设头结点。 栈的链接存储结构及实现 栈顶 栈底 链栈:栈的链接存储结构 top an an-1 a1 ∧ first a1 a2 an ∧ ai 两种示意图在内存中对应同一种状态 top a1 an-1 an ∧ 栈顶 栈底 栈的链接存储结构及实现 链 栈 的 类 声 明 template class T class LinkStack { public: LinkStack( ); ~LinkStack( ); void Push(T x); T Pop( ); T GetTop( ); bool Empty( ); private: NodeT *top; } 链栈的实现——插入 算法描述: template class T void LinkStack::Push(T x) { s=new NodeT; s-data=x; s-next=top; top=s; } top an an-1 a1 ∧ x s top 操作接口: void Push(T x); 为 什 么 没 有 判 断 栈 满? 链栈的实现——删除 算法描述: template class T T LinkStack::Pop( ) { if (top==NULL) throw 下溢; x=top-data; p=top; top=top-next; delete p; return x; } 操作接口: T Pop( ); top an an-1 a1 ∧ top p top++可以吗? * 数据结构(C++版) 清华大学出版社 * 第3章 特殊线性表—栈、队列和串 本章的基本内容是: 三种特殊的线性表——栈、队列、串 从数据结构角度看,栈和队列是操作受限的线性表,他们的逻辑结构相同。 串是重要的非数值处理对象,它是以字符作为数据元素的线性表。 3.1 栈 栈的知识点组织结构图 栈的逻辑结构 栈的定义 栈的操作特性 栈的ADT定义 栈的存储结构(类定义、基本操作的实现) 顺序栈 两栈共享空间 链栈 栈的逻辑结构 空栈:不含任何数据元素的栈。 (a1, a2, ……, an) 栈:限定仅在表尾进行插入和删除操作的线性表。 栈顶 栈底 允许插入和删除的一端称为栈顶,另一端称为栈底。 栈的示意图 a1 a2 a3 入栈 出栈 栈底 栈顶 插入:入栈、进栈、压栈 删除:出栈、弹栈 栈顶 栈顶 栈的示意图 栈的操作特性:后进先出 a1 a2 a3 入栈 出栈 栈底 栈顶 插入:入栈、进栈、压栈 删除:出栈、弹栈 栈顶 栈的逻辑结构 例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种? 栈底 栈顶 a b 栈顶 c 栈顶 情况1: 栈底 栈顶 a b 栈顶 c 栈顶 出栈序列:c 出栈序列:c、b 出栈序列:c、b、a 例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种? 情况1: 栈的逻辑结构 栈底 栈顶 a b 栈顶 出栈序列:b 栈的逻辑结构 例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种? 情况2: 栈底 a 出栈序列:b 出栈序列:b、c 出栈序列:b、 c、a c 栈顶 栈顶 注意:栈只是对表插入和删除操作的位置进行了限制,并没有限定插入和删除操作进行的时间。 栈的逻辑结构 例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种? 情况2: 栈的抽象数据类型定义 ADT Stack Data 栈中元素具有相同类型及后进先出特性, 相邻元素具有前驱和后继关系 Operation InitStack 前置条件:栈不存在 输入:无 功能:栈的初始化 输出:无 后置条件:构造一个空栈 教材P82 栈的顺序存储结构及实现 顺序栈——栈的顺序存储结构 如何改造数组实现栈的顺序存储? 0 1 2 3 4 5 6 7

文档评论(0)

1亿VIP精品文档

相关文档