数据结构王红梅栈和队列.pptx
《数据结构王红梅栈和队列.pptx》由会员分享,可在线阅读,更多相关《数据结构王红梅栈和队列.pptx(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 3.1 3.1 栈栈栈的逻辑结构栈的逻辑结构(a1,a2,an)p栈:栈:限定仅在限定仅在表的一端表的一端进行插入和删除操作的进行插入和删除操作的线性表线性表。p允许插入和删除的一端称为栈顶,另一端称为栈底。p空栈:不含任何数据元素的栈。栈顶栈顶栈底栈底第1页/共73页a1a2a3入栈入栈出栈出栈栈底栈底栈顶栈顶插入:入栈、进栈、压栈插入:入栈、进栈、压栈删除:出栈、弹栈删除:出栈、弹栈栈顶栈顶栈顶栈顶 3.1 3.1 栈栈栈的逻辑结构栈的逻辑结构第2页/共73页栈的操作特性:栈的操作特性:后进先出后进先出a1a2a3入栈入栈出栈出栈栈底栈底栈顶栈顶插入:入栈、进栈、压栈插入:入栈、进栈、压
2、栈删除:出栈、弹栈删除:出栈、弹栈栈顶栈顶 3.1 3.1 栈栈栈的逻辑结构栈的逻辑结构第3页/共73页例:有三个元素按例:有三个元素按a、b、c的次序依次进栈,且每个的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种?元素只允许进一次栈,则可能的出栈序列有多少种?栈底栈底栈顶栈顶ab栈顶栈顶c栈顶栈顶 情况情况1:栈的逻辑结构栈的逻辑结构 3.1 3.1 栈栈第4页/共73页栈底栈底栈顶栈顶ab栈顶栈顶c栈顶栈顶出栈序列:出栈序列:c出栈序列:出栈序列:c、b出栈序列:出栈序列:c、b、a例:有三个元素按例:有三个元素按a、b、c的次序依次进栈,且每个的次序依次进栈,且每个元
3、素只允许进一次栈,则可能的出栈序列有多少种?元素只允许进一次栈,则可能的出栈序列有多少种?栈的逻辑结构栈的逻辑结构 情况情况1:3.1 3.1 栈栈第5页/共73页栈底栈底栈顶栈顶ab栈顶栈顶出栈序列:出栈序列:b 情况情况2:例:有三个元素按例:有三个元素按a、b、c的次序依次进栈,且每个的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种?元素只允许进一次栈,则可能的出栈序列有多少种?栈的逻辑结构栈的逻辑结构 3.1 3.1 栈栈第6页/共73页栈底栈底a出栈序列:出栈序列:b出栈序列:出栈序列:b、c出栈序列:出栈序列:b、c、ac栈顶栈顶栈顶栈顶注意:注意:栈只是对表插入
4、和删除操作的位置进行了限栈只是对表插入和删除操作的位置进行了限制,并没有限定插入和删除操作进行的时间。制,并没有限定插入和删除操作进行的时间。例:有三个元素按例:有三个元素按a、b、c的次序依次进栈,且每个的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种?元素只允许进一次栈,则可能的出栈序列有多少种?栈的逻辑结构栈的逻辑结构 情况情况2:3.1 3.1 栈栈第7页/共73页栈的抽象数据类型定义栈的抽象数据类型定义 ADT StackData 栈中元素具有相同类型及后进先出特性,栈中元素具有相同类型及后进先出特性,相邻元素具有前驱和后继关系相邻元素具有前驱和后继关系Operat
5、ion InitStack 前置条件:栈不存在前置条件:栈不存在 输入:无输入:无 功能:栈的初始化功能:栈的初始化 输出:无输出:无 后置条件:构造一个空栈后置条件:构造一个空栈 3.1 3.1 栈栈第8页/共73页DestroyStack 前置条件:栈已存在 输入:无 功能:销毁栈 输出:无 后置条件:释放栈所占用的存储空间Push 前置条件:栈已存在 输入:元素值x 功能:在栈顶插入一个元素x 输出:如果插入不成功,抛出异常 后置条件:如果插入成功,栈顶增加了一个元素栈的抽象数据类型定义栈的抽象数据类型定义 3.1 3.1 栈栈第9页/共73页Pop 前置条件:栈已存在 输入:无 功能:
6、删除栈顶元素 输出:如果删除成功,返回被删元素值,否则,抛出异常 后置条件:如果删除成功,栈减少了一个元素GetTop 前置条件:栈已存在 输入:无 功能:读取当前的栈顶元素 输出:若栈不空,返回当前的栈顶元素值 后置条件:栈不变栈的抽象数据类型定义栈的抽象数据类型定义 3.1 3.1 栈栈第10页/共73页Empty 前置条件:栈已存在前置条件:栈已存在 输入:无输入:无 功能:判断栈是否为空功能:判断栈是否为空 输出:如果栈为空,返回输出:如果栈为空,返回1,否则,返回,否则,返回0 后置条件:栈不变后置条件:栈不变endADT栈的抽象数据类型定义栈的抽象数据类型定义 3.1 3.1 栈栈
7、第11页/共73页栈的顺序存储结构及实现栈的顺序存储结构及实现 顺序栈顺序栈栈的顺序存储结构栈的顺序存储结构如何改造数组实现栈的顺序存储?如何改造数组实现栈的顺序存储?0 1 2 3 4 5 6 7 8a1确定用数组的哪一端表示栈底。确定用数组的哪一端表示栈底。附设指针附设指针top指示栈顶元素在数组中的位置。指示栈顶元素在数组中的位置。top 3.1 3.1 栈栈第12页/共73页出栈:出栈:top减减1进栈:进栈:top加加1栈空:栈空:top=-1 0 1 2 3 4 5 6 7 8a1topa2topa3top栈满:栈满:top=MAX_SIZE-1栈的顺序存储结构及实现栈的顺序存储结
8、构及实现 3.1 3.1 栈栈第13页/共73页 顺顺序序栈栈类类的的声声明明const int MAX_SIZE=100;template class seqStack public:seqStack();seqStack();void Push(DataType x);DataType Pop();DataType GetTop();bool Empty();private:DataType dataMAX_SIZE;int top;3.1 3.1 栈栈第14页/共73页顺序栈的实现顺序栈的实现入栈入栈template void seqStack:Push(DataType x)if(to
9、p=MAX_SIZE-1)throw “溢出”;top+;datatop=x;操作接口:操作接口:void Push(DataType x);时间复杂度?时间复杂度?data+top=x 3.1 3.1 栈栈第15页/共73页顺序栈的实现顺序栈的实现出栈出栈template DataType seqStack:Pop()if(top=-1)throw “溢出”;x=datatop-;return x;操作接口:操作接口:DataType Pop();时间复杂度?时间复杂度?3.1 3.1 栈栈第16页/共73页两栈共享空间两栈共享空间 解决方案解决方案1:直接解决:为每个栈开辟一个数组空间。直
10、接解决:为每个栈开辟一个数组空间。解决方案解决方案2:顺序栈单向延伸顺序栈单向延伸使用一个数组来存储两个栈使用一个数组来存储两个栈在一个程序中需要在一个程序中需要同时同时使用具有使用具有相同相同数据类型的数据类型的两个栈两个栈,如何顺序存储这两个栈?如何顺序存储这两个栈?会出现什么问题?如何解决?会出现什么问题?如何解决?3.1 3.1 栈栈第17页/共73页两栈共享空间:两栈共享空间:使用一个数组来存储两个栈,让一个使用一个数组来存储两个栈,让一个栈的栈底为该数组的始端,另一个栈的栈底为该数组栈的栈底为该数组的始端,另一个栈的栈底为该数组的末端,两个栈从各自的端点向中间延伸。的末端,两个栈从
11、各自的端点向中间延伸。两栈共享空间两栈共享空间 3.1 3.1 栈栈第18页/共73页栈栈1的底固定在下标为的底固定在下标为0的一端;的一端;栈栈2的底固定在下标为的底固定在下标为StackSize-1的一端。的一端。top1和和top2分别为栈分别为栈1和栈和栈2的栈顶指针;的栈顶指针;Stack_Size为整个数组空间的大小(图中用为整个数组空间的大小(图中用S表示);表示);a1 a2 aitop10 1 2 S-1两栈共享空间两栈共享空间 top2bj b2 b1栈栈1底底栈栈2底底 3.1 3.1 栈栈第19页/共73页top1=-1什么时候栈什么时候栈1为空?为空?a1 a2 ai
12、top10 1 2 S-1两栈共享空间两栈共享空间 top2bj b2 b1top1 3.1 3.1 栈栈第20页/共73页top1=-1什么时候栈什么时候栈1为空?为空?a1 a2 aitop10 1 2 S-1两栈共享空间两栈共享空间 top2bj b2 b1什么时候栈什么时候栈2为空?为空?top2top2=Stack_Size 3.1 3.1 栈栈第21页/共73页top1=-1什么时候栈什么时候栈1为空?为空?a1 a2 aitop10 1 2 S-1两栈共享空间两栈共享空间 top2bj b2 b1什么时候栈什么时候栈2为空?为空?top2=Stack_Size什么时候栈满?什么时
13、候栈满?top2=top1+1 3.1 3.1 栈栈第22页/共73页const int Stack_Size=100;template class BothStack public:BothStack()();BothStack()();void Push(int i,DataType x);DataType Pop(int i);DataType GetTop(int i);bool Empty(int i);private:DataType dataStack_Size;int top1,top2;两两栈栈共共享享空空间间类类的的声声明明 3.1 3.1 栈栈第23页/共73页1.如果栈
14、满,则抛出上溢异常;如果栈满,则抛出上溢异常;2.判断是插在栈判断是插在栈1还是栈还是栈2;2.1 若在栈若在栈1插入,则插入,则加加1;在在top1处填入处填入x;2.2 若在栈若在栈2插入,则插入,则减减1;在在top2处填入处填入x;两栈共享空间的实现两栈共享空间的实现插入插入 操作接口:操作接口:void Push(int i,DataType x);3.1 3.1 栈栈第24页/共73页1.若是在栈若是在栈1删除,则删除,则 1.1 若栈若栈1为空栈,抛出下溢异常;为空栈,抛出下溢异常;1.2 删除并返回栈删除并返回栈1的栈顶元素;的栈顶元素;2.若是在栈若是在栈2删除,则删除,则
15、2.1 若栈若栈2为空栈,抛出下溢异常;为空栈,抛出下溢异常;2.2 删除并返回栈删除并返回栈2的栈顶元素;的栈顶元素;两栈共享空间的实现两栈共享空间的实现删除删除 操作接口:操作接口:DataType Pop(int i);3.1 3.1 栈栈第25页/共73页栈的链接存储结构及实现栈的链接存储结构及实现 链栈:链栈:栈的链接存储结构栈的链接存储结构firsta1a2anai链栈需要加头结点吗?链栈需要加头结点吗?如何改造链表实现栈的链接存储?如何改造链表实现栈的链接存储?将哪一端作为栈顶?将哪一端作为栈顶?将链头作为栈顶,方便操作。将链头作为栈顶,方便操作。链栈不需要附设头结点。链栈不需要
16、附设头结点。3.1 3.1 栈栈第26页/共73页栈的链接存储结构及实现栈的链接存储结构及实现 栈顶栈顶栈底栈底链栈:链栈:栈的链接存储结构栈的链接存储结构topanan-1a1firsta1a2anai两种示意图在内存中对两种示意图在内存中对应同一种状态,启示?应同一种状态,启示?topa1an-1an栈顶栈顶栈底栈底 3.1 3.1 栈栈第27页/共73页链链栈栈的的类类声声明明template class LinkStack public:LinkStack()();LinkStack()();void Push(DataType x);DataType Pop()();DataType
17、 GetTop()();bool Empty()();private:Node*top;3.1 3.1 栈栈第28页/共73页template void LinkStack:Push(DataType x)s=new Node;s-data=x;s-next=top;top=s;topanan-1a1链栈的实现链栈的实现插入插入 xstop操作接口:操作接口:void Push(DataType x);为什么没有判断栈满?为什么没有判断栈满?3.1 3.1 栈栈第29页/共73页template DataType LinkStack:Pop()if(top=NULL)throw 下溢下溢;x=
18、top-data;p=top;top=top-next;delete p;return x;链栈的实现链栈的实现删除删除操作接口:操作接口:DataType Pop();topanan-1a1topp top+可以吗?可以吗?3.1 3.1 栈栈第30页/共73页顺序栈和链栈的比较顺序栈和链栈的比较时间性能:时间性能:相同,都是常数时间相同,都是常数时间O(1)。空间性能:空间性能:顺序栈:有元素个数的限制和空间浪费的问题。顺序栈:有元素个数的限制和空间浪费的问题。链栈:没有栈满的问题,只有当内存没有可用空链栈:没有栈满的问题,只有当内存没有可用空间时才会出现栈满,但是每个元素都需要一个指针间
19、时才会出现栈满,但是每个元素都需要一个指针域,从而产生了结构性开销。域,从而产生了结构性开销。总之,当栈的使用过程中元素总之,当栈的使用过程中元素个数变化个数变化较大时,用较大时,用链栈是适宜的,反之,应该采用顺序栈。链栈是适宜的,反之,应该采用顺序栈。3.1 3.1 栈栈第31页/共73页3.2 3.2 队列队列队列的逻辑结构队列的逻辑结构p 队列:队列:只允许在只允许在一端一端进行插入操作,而进行插入操作,而另一端另一端进进行删除操作的线性表。行删除操作的线性表。p 允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端称为队头。p 空队列:不含任何数据元素的队列。(a1,a
20、2,an)队尾队尾队头队头第32页/共73页队列的操作特性:队列的操作特性:先进先出先进先出a1a2a3入队入队队尾队尾队头队头出队出队队头队头队列的逻辑结构队列的逻辑结构3.2 3.2 队列队列第33页/共73页队列的抽象数据类型定义队列的抽象数据类型定义 ADT Queue Data 队列中元素具有相同类型及先进先出特性,队列中元素具有相同类型及先进先出特性,相邻元素具有前驱和后继关系相邻元素具有前驱和后继关系Operation InitQueue 前置条件:队列不存在前置条件:队列不存在 输入:无输入:无 功能:初始化队列功能:初始化队列 输出:无输出:无 后置条件:创建一个空队列后置条
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 红梅 队列
限制150内