数据结构第3章栈和队列ppt课件.ppt
《数据结构第3章栈和队列ppt课件.ppt》由会员分享,可在线阅读,更多相关《数据结构第3章栈和队列ppt课件.ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能1 栈2 算术表达式求值3 队列 第三章第三章 栈和队列栈和队列本章学习导读本章学习导读 从数据结构上看,栈和队列也是线从数据结构上看,栈和队列也是线性表,不过是两种特殊的线性表。栈只性表,不过是两种特殊的线性表。栈只允许在表的一端进行插入或删除操作允许在表的一端进行插入或删除操作;而队列只允许在表的一端进行插入操作、而队列只允许在表的一端进行插入操作、而在另一端进行删除操作。因而,栈和而在另一端进行删除操作。因而,栈和队列也可以被称作为操作受限的线性表。队列也可以被称作为操作受限的线
2、性表。通过本章的学习,读者应能掌握栈和队通过本章的学习,读者应能掌握栈和队列的逻辑结构和存储结构,以及栈和队列的逻辑结构和存储结构,以及栈和队列的基本运算和算法的实现。列的基本运算和算法的实现。4学时学时为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能3.1栈在在各各种种程程序序设设计计语语言言中中都都有有子子程程序序(或或称称函函数数、过过程程)调调用用功功能能。而而子子程程序序也也可可以以调调用用其其它它的的子子程程序序。甚甚至至可可以以直直接接或或间间接接地地调调用用自自身身,这这种种调调用用关关系系就就是是递递归归。下下面面
3、以以求求阶阶乘乘的的递递归归方方法法为例,来分析计算机系统是如何处理这种递归调用关系的。为例,来分析计算机系统是如何处理这种递归调用关系的。求求n!的递归方法的思路是:!的递归方法的思路是:相应的相应的C语言函数是:语言函数是:floatfact(intn)floats;if(n=0|n=1)s=1;elses=n*fact(n-1);return(s);在该函数中可以理解为求在该函数中可以理解为求n!用!用fact(n)来表示,来表示,则求则求(n-1)!就用!就用fact(n-1)来表示。来表示。若求若求5!,则有,则有main()printf(“5!=%fn”,fact(5);)1()1
4、,0()!1(*1!=-=n nnnn为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能图图3-1给给出出了了递递归归调调用用执执行行过过程程。从从图图中中可可看看到到fact函函数数共共被被调调用用5次次,即即fact(5)、fact(4)、fact(3)、fact(2)、fact(1)。其其中中,fact(5)为为主主函函数数调调用用,其其它它则则为为在在fact函函数数内内的的调调用。每一次递归调用并未立即得到结果,而是进一步向深用。每一次递归调用并未立即得到结果,而是进一步向深度递归调用,直到度递归调用,直到n=1或或n=0时
5、,函数时,函数fact才有结果为才有结果为1,然后再一一返回计算,然后再一一返回计算,最终得到结果。最终得到结果。主函数主函数mani()printf(“fact(5)”)第一层调用第一层调用n=5s=5*fact(4)第二层调用第二层调用n=4s=4*fact(3)第三层调用第三层调用n=3S=3*fact(2)第四层调用第四层调用n=2S=2*fact(1)第五层调用第五层调用n=1S=1fact(1)=1fact(2)=2fact(3)=6fact(4)=24fact(5)=120输出s=120.00图图3-1递归调用过程示意图递归调用过程示意图为深入学习习近平新时代中国特色社会主义思想
6、和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能计计算算机机系系统统处处理理上上述述过过程程时时,其其关关键键是是要要正正确确处处理理执执行行过过程程中中的的递递归归调调用用层层次次和和返返回回路路径径,也也就就是是要要记记住住每每一一次次递递归归调调用用时时的的返返回回地地址址。在在系系统统中中是是用用一一个个线线性性表表(栈栈)动动态态记记忆忆调调用用过过程程中中的的路径,其处理原则为:路径,其处理原则为:(1)在开始执行程序前,建立一个线性表,其初始状态为空。)在开始执行程序前,建立一个线性表,其初始状态为空。(2)当当发发生生递递归归调调用用时时,将将当当前前的的调
7、调用用的的返返回回点点地地址址插插入入到到线性表的末尾;线性表的末尾;(3)当递归调用返回时,其返回地址从线性表的末尾取出。)当递归调用返回时,其返回地址从线性表的末尾取出。根根据据以以上上的的原原则则,可可以以给给出出线线性性表表中中的的元元素素变变化化状状态态如如图图3-2所示(以递归调用时所示(以递归调用时n值的变化为例):值的变化为例):545453453245321图图3-2递归调用时线性表状态递归调用时线性表状态入栈入栈出栈出栈为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能3.1.1 栈的定义及其运算栈的定义及其运算1
8、栈的定义栈的定义栈栈(stack)是是一一种种只只允允许许在在一一端端进进行行插插入入和和删删除除的的线线性性表表,它它是是一一种种操操作作受受限限的的线线性性表表。在在表表中中只只允允许许进进行行插插入入和和删删除除的的一一端端称称为为栈栈顶顶(top),另另一一端端称称为为栈栈底底(bottom)。栈栈的的插插入入操操作作通通常常称称为为入入栈栈或或进进栈栈(push),而而栈栈的的删删除除操操作作则则称称为为出出栈栈或退栈或退栈(pop)。当栈中无数据元素时,称为空栈。当栈中无数据元素时,称为空栈。根根据据栈栈的的定定义义可可知知,栈栈顶顶元元素素总总是是最最后后入入栈栈的的,因因而而是
9、是最最先先出出栈栈;栈栈底底元元素素总总是是最最先先入入栈栈的的,因因而而也也是是最最后后出出栈栈。这这种种表表是是按按照照后后进进先先出出(LIFO,lastinfirstout)的的原原则则组组织织数数据据的的,因此,栈也被称为因此,栈也被称为“后进先出后进先出”的线性表。的线性表。a1a2an入栈入栈出栈出栈栈顶栈顶top栈底栈底bottom图图3-3栈的示意图栈的示意图图图3-3是一个栈的示意图,通常用是一个栈的示意图,通常用指针指针top指示栈顶的位置,用指指示栈顶的位置,用指针针bottom指向栈底。栈顶指针指向栈底。栈顶指针top动态反映栈的当前位置。动态反映栈的当前位置。为深入
10、学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能2栈的基本运算栈的基本运算(1)initStack(s)初始化:初始化一个新的栈。初始化:初始化一个新的栈。(2)IsEmpty(s)栈栈空空判判断断:若若栈栈s空空,则则返返回回TRUE;否则,返回;否则,返回FALSE。(3)push(s,x)入入栈栈:在在栈栈s的的顶顶部部插插入入元元素素x,若栈满,则返回若栈满,则返回FALSE;否则,返回;否则,返回TRUE。(4)pop(s,x)出出栈栈:若若栈栈s不不空空,则则返返回回栈栈顶顶元元素素,并并从从栈栈顶顶中中删删除除该该元元素素;
11、否否则则,返返回回空空元元素素NULL。(5)getTop(s,x)取取栈栈元元素素:若若栈栈s不不空空,则则返返回回栈顶元素;否则返回空元素栈顶元素;否则返回空元素NULL。(6)ClearEmpty(s)置栈空操作:置栈置栈空操作:置栈s为空栈。为空栈。栈栈是是一一种种特特殊殊的的线线性性表表,因因此此栈栈可可采采用用顺顺序序存存储储结构存储,也可以使用链式存储结构存储。结构存储,也可以使用链式存储结构存储。(7)stacklenth(s)返回栈中元素的个数返回栈中元素的个数.为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能3.
12、1.2 栈的顺序存储结构栈的顺序存储结构1顺序栈的数组表示顺序栈的数组表示与与第第二二章章讨讨论论的的一一般般的的顺顺序序存存储储结结构构的的线线性性表表一一样样,利利用用一一组组地地址址连连续续的的存存储储单单元元依依次次存存放放自自栈栈底底到到栈栈顶顶的的数数据据元元素素,这这种种形形式式的的栈栈也也称称为为顺顺序序栈栈。因因此此,我我们们可可以以使使用用一一维维数数组组来来作作为为栈栈的的顺顺序序存存储储空空间间。设设指指针针top指指向向栈栈顶顶元元素素的的下下一一个个位位置置,以以数数组组小小下下标标的的一一端端作作为为栈栈底底,通通常常以以top=0时时为为空空栈栈,在在元元素素进
13、进栈栈时时指指针针top不不断断地地加加1,当,当top等于数组的最大下标值时则栈满。等于数组的最大下标值时则栈满。为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能top=0top=1Atop=5top=3图图3-4栈的存储结构栈的存储结构(a)空栈)空栈(b)插入元素)插入元素A后后(c)插入元素)插入元素B、C、D、E后后d)删除元素)删除元素E、D后后(a)(b)(c)(d)图图3-4展示了顺序栈中数据元素与栈顶指针的变化。展示了顺序栈中数据元素与栈顶指针的变化。ABABCCDEbasebasebasebase43210432
14、104321043210为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能用用C语言定义的顺序存储结构的栈如下:语言定义的顺序存储结构的栈如下:#defineTRUE1#defineFALSE0#defineSTACK_SIZE50;/存储空间分配增量存储空间分配增量typedefstructStackElementTypeelemSTACK_SIZE;inttop;SqStack;为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能2顺序栈的基本运算算法顺序栈的基本运算算法(
15、1)初始化栈)初始化栈【算法【算法3.1栈的初始化】栈的初始化】StatusInitStack(SqStack*S)/创建一个空栈由指针创建一个空栈由指针S指出指出S-TOP=0;/InitStack为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能(2)入栈操作)入栈操作【算法【算法3.2入栈操作】入栈操作】StatusPush(SqStack&S,SElemTypee)/将元素将元素e插入到栈插入到栈S中,作为中,作为S的新栈顶的新栈顶if(S-top=Stacksize)returnFALSE;S-elemtop=e;S-top
16、+;returnTRUE;/Push为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能(3)出栈操作)出栈操作【算法【算法3.3出栈操作】出栈操作】StatusPop(SqStack*S,SElemType*e)/若若栈栈s不不为为空空,则则删删除除栈栈顶顶元元素素,有有e返返回回其其值,并返回值,并返回TRUE;否则返回;否则返回ERRORif(S-top=0)returnERROR;/栈空栈空elseS-top-;*e=S-elemS-top;returnTRUE;/Pop为深入学习习近平新时代中国特色社会主义思想和党的十九大精神
17、,贯彻全国教育大会精神,充分发挥中小学图书室育人功能(4)取栈顶元素操作)取栈顶元素操作【算法【算法3.4取栈顶元素】取栈顶元素】StatusGetTop(SqStackS,SElemType*e)/若若栈栈S不不为为空空,则则用用e返返回回栈栈顶顶元元素素,并并返返回回OK;否则返回;否则返回ERRORif(S-top=0)returnERROR;/栈空栈空else*e=S-elemS-top1;returnOK;/GetTop取取栈栈顶顶元元素素与与出出栈栈不不同同之之处处在在于于出出栈栈操操作作改改变变栈栈顶顶指指针针top的的位位置置,而而取取栈栈顶顶元元素素操操作作不不改改变变栈栈的
18、栈顶指针。的栈顶指针。为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能(5)判断栈空)判断栈空intIsEmpty(SeqStack*s)return(S-top=0?TRUE:FALSE);为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能(6)求栈顶元素个数)求栈顶元素个数intIsFull(SeqStack*S)return(S-top);为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能3.1.3 多栈共享
19、邻接空间多栈共享邻接空间在在计计算算机机系系统统软软件件中中,各各种种高高级级语语言言的的编编译译系系统统都都离离不不开开栈栈的的使使用用。常常常常一一个个程程序序中中要要用用到到多多个个栈栈,为为了了不不发发生生上上溢溢错错误误,就就必必须须给给每每个个栈栈预预先先分分配配一一个个足足够够大大的的存存储储空空间间,但但实实际际中中很很难难准准确确地地估估计计。另另一一面面方方面面,若若每每个个栈栈都都预预分分配配过过大大的的存存储储空空间间,势势必必会会造造成成系系统统空空间间紧紧张张。若若让让多多个个栈栈共共用用一一个个足足够够大大的的连连续续存存储储空空间间,则则可可利利用用栈栈的的动动
20、态态特特性性使使它它们们的的存存储储空空间间互补。这就是栈的共享邻接空间。互补。这就是栈的共享邻接空间。为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能1双向栈在一维数组中的实现双向栈在一维数组中的实现栈栈的的共共享享中中最最常常见见的的是是两两栈栈的的共共享享。假假设设两两个个栈栈共共享享一一维维数数组组stackMAXNUM,则则可可以以利利用用栈栈的的“栈栈底底位位置置不不变变,栈栈顶顶位位置置动动态态变变化化”的的特特性性,两两个个栈栈底底分分别别为为-1和和MAXNUM,而而它它们们的的栈栈顶顶都都往往中中间间方方向向延延
21、伸伸。因因此此,只只要要整整个个数数组组stackMAXNUM未未被被占占满满,无无论论哪哪个个栈的入栈都不会发生上溢。栈的入栈都不会发生上溢。为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能C语语言言定定义义的的这这种种两两栈栈共共享享邻邻接接空空间间的的结结构构如如下:下:TypedefstructElemtypestackMAXNUM;intlefttop;/*左栈栈顶位置指示器左栈栈顶位置指示器*/int righttop;/*右右栈栈栈栈顶顶位位置置指指示示器器*/dupsqstack;两两个个栈栈共共享享邻邻接接空空间间
22、的的示示意意图图如如图图3-5所所示示。左左栈栈入入栈栈时时,栈栈顶顶指指针针加加1,右右栈栈入入栈栈时时,栈栈顶顶指指针减针减1。为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能自由区lefttoprightto0MAXNUM-1图图3-5两个栈共享邻接空间两个栈共享邻接空间charstatus;status=L;/*左栈左栈*/status=R;/*右栈右栈*/在在 进进 行行 栈栈 操操 作作 时时,需需 指指 定定 栈栈 号号:status=L为为 左左 栈栈,status=R为右栈;判断栈满的条件为:为右栈;判断栈满的条件
23、为:s-lefttop+1=s-rigthtop;为了识别左右栈,必须另外设定标志:为了识别左右栈,必须另外设定标志:为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能2共享栈的基本操作共享栈的基本操作(1)初始化操作)初始化操作【算法【算法3.7共享栈的初始化】共享栈的初始化】intinitDupStack(dupsqstack*s)/*创建两个共享邻接空间的空栈由指针创建两个共享邻接空间的空栈由指针S指出指出*/if(s=(dupsqstack*)malloc(sizeof(dupsqstack)=NULL)returnFALSE
24、;s-lefttop=-1;s-righttop=MAXNUM;returnTRUE;(2)入栈操作)入栈操作【算法【算法3.8共享栈的入栈操作】共享栈的入栈操作】intpushDupStack(dupsqstack*s,charstatus,Elemtypex)*把数据元素把数据元素x压入左栈(压入左栈(status=L)或右栈()或右栈(status=R)*/if(s-lefttop+1=s-righttop)returnFALSE;/*栈满栈满*/if(status=L)s-stack+s-lefttop=x;/*左栈进栈左栈进栈*/elseif(status=R)s-stack-s-l
25、efttop=x;/*右栈进栈右栈进栈*/elsereturnFALSE;/*参数错误参数错误*/returnTRUE;为深入学习习近平新时代中国特色社会主义思想和党的十九大精神,贯彻全国教育大会精神,充分发挥中小学图书室育人功能(3)出栈操作)出栈操作【算法【算法3.9共享栈的出栈操作】共享栈的出栈操作】ElemtypepopDupStack(dupsqstack*s,charstatus)/*从左栈(从左栈(status=L)或右栈()或右栈(status=R)退出栈顶元素)退出栈顶元素*/if(status=L)if(s-lefttopstacks-lefttop-);/*左栈出栈左栈出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列 ppt 课件
限制150内