第3章数据结构精选文档.ppt
《第3章数据结构精选文档.ppt》由会员分享,可在线阅读,更多相关《第3章数据结构精选文档.ppt(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章数据结构本讲稿第一页,共二十四页从数据结构上看,栈和队列也是线性表,不过是从数据结构上看,栈和队列也是线性表,不过是两种特殊的线性表。栈只允许在表的一端进行插两种特殊的线性表。栈只允许在表的一端进行插入或删除操作,而队列只允许在表的一端进行插入或删除操作,而队列只允许在表的一端进行插入操作、而在另一端进行删除操作。因而,栈和入操作、而在另一端进行删除操作。因而,栈和队列也可以被称作为操作受限的线性表。通过本队列也可以被称作为操作受限的线性表。通过本章的学习,应能掌握栈和队列的逻辑结构和存储章的学习,应能掌握栈和队列的逻辑结构和存储结构,以及栈和队列的基本运算以及实现算法。结构,以及栈和队
2、列的基本运算以及实现算法。本讲稿第二页,共二十四页3.1.1 抽象数据类型栈的定义抽象数据类型栈的定义1栈的定义栈的定义栈栈(stack)是是一一种种只只允允许许在在一一端端进进行行插插入入和和删删除除的的线线性性表表,它它是是一一种种操操作作受受限限的的线线性性表表。在在表表中中只只允允许许进进行行插插入入和和删删除除的的一一端端称称为为栈栈顶顶(top),另另一一端端称称为为栈栈底底(bottom)。栈栈的的插插入入操操作作通通常常称称为为入入栈栈或或进进栈栈(push),而而栈栈的的删删除除操操作作则则称称为为出出栈栈或或退退栈栈(pop)。当当栈栈中中无无数数据据元元素素时时,称称为空
3、栈。为空栈。根根据据栈栈的的定定义义可可知知,栈栈顶顶元元素素总总是是最最后后入入栈栈的的,因因而而是是最最先先出出栈栈;栈栈底底元元素素总总是是最最先先入入栈栈的的,因因而而也也是是最最后后出出栈栈。这这种种表表是是按按照照后后进进先先出出(LIFO,lastinfirstout)的的原原则则组组织织数数据据的的,因因此此,栈栈也也被被称称为为“后后进进先先出出”的的线性表。线性表。3.1 栈栈本讲稿第三页,共二十四页a0a1an-1入栈出栈栈顶 top栈底 bottom图3-3栈的示意图下下图图是是一一个个栈栈的的示示意意图图,通通常常用用指指针针top指指示示栈栈顶顶的的位位置置,用用指
4、指针针bottom指向栈底。栈顶指针指向栈底。栈顶指针top动态反映栈的当前位置。动态反映栈的当前位置。本讲稿第四页,共二十四页2、栈的类型定义栈的类型定义ADTStack 数据对象数据对象:D ai|ai ElemSet,i=1,2,.,n,n0 数据关系数据关系:R1|ai-1,aiD,i=2,.,n 约定an 端为栈顶,a1 端为栈底。本讲稿第五页,共二十四页基本操作基本操作:InitStack(&S)操作结果:构造一个空栈S。DestroyStack(&S)初始条件:栈S已存在。操作结果:栈S被销毁。ClearStack(&S)初始条件:栈S已存在。操作结果:将S清为空栈。StackE
5、mpty(S)初始条件:栈S已存在。操作结果:若栈S为空栈,则返回TRUE,否则FALE。StackLength(S)初始条件:栈S已存在。操作结果:返回S的元素个数,即栈的长度。GetTop(S,&e)初始条件:栈S已存在且非空。操作结果:用e返回S的栈顶元素。Push(&S,e)初始条件:栈S已存在。操作结果:插入元素e为新的栈顶元素。Pop(&S,&e)初始条件:栈S已存在且非空。操作结果:删除S的栈顶元素,并用e返回其值。ADTStack 本讲稿第六页,共二十四页3.1.2栈的表示和实现栈的表示和实现1顺序栈的数组表示顺序栈的数组表示与第二章讨论的一般的顺序存储结构的线性表一样,利用一
6、组地址连续的存储单元依次存放自栈底到栈顶的数据元素,这种形式的栈也称为顺序栈。因此,我们可以使用一维数组来作为栈的顺序存储空间。设指针top指向栈顶元素的当前位置,以数组小下标的一端作为栈底,通常以top=0时为空栈,在元素进栈时指针top不断地加1,当top等于数组的最大下标值时则栈满。一、栈的顺序存储结构一、栈的顺序存储结构本讲稿第七页,共二十四页top=0top=1Atop=5ACDBEtop=3ABC图图栈的存储结构栈的存储结构(a)空栈;)空栈;(b)插入元素)插入元素A后;后;(c)插入元素)插入元素B、C、D、E后;后;(d)删除元素)删除元素E、D后后(a)(b)(c)(d)本
7、讲稿第八页,共二十四页二、二、栈的链式存储结构栈的链式存储结构栈也可以采用链式存储结构表示,这种结构的栈简称为链栈。在一个链栈中,栈底就是链表的最后一个结点,而栈顶总是链表的第一个结点。因此,新入栈的元素即为链表新的第一个结点,只要系统还有存储空间,就不会有栈满的情况发生。一个链栈可由栈顶指针top唯一确定,当top为NULL时,是一个空栈。下图给出了链栈中数据元素与栈顶指针top的关系。链栈的C语言定义为:typedef struct Stacknode Elemtype data;Struct Stacknode*next;slStacktype;本讲稿第九页,共二十四页BAtopBAto
8、pCAtop图3-6 链栈的存储结构图(a)含有两个元素A、B的栈;(b)插入元素C后的栈;(c)删除元素C、B后的栈(a)(b)(c)本讲稿第十页,共二十四页3.2栈的应用举例栈的应用举例例一、例一、数制转换数制转换十进制数N和其他d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理:N=(Ndivd)d+Nmodd(其中:其中:div为整除运算,为整除运算,mod为求余运算)为求余运算)例如:(例如:(1348)10=(2504)8,其运算过程如下:,其运算过程如下:NNdiv8Nmod8134816841682102125202假设现要编制一个满足下列要
9、求的程序:对于输入的任意一个非负十进制整数,打假设现要编制一个满足下列要求的程序:对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。由于上述计算过程是从低位到高位顺序产生八进制数印输出与其等值的八进制数。由于上述计算过程是从低位到高位顺序产生八进制数的各个数位,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反。的各个数位,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反。因此,若将计算过程中得到的八进制数的各位顺序进栈,则按出栈序列打印输出的因此,若将计算过程中得到的八进制数的各位顺序进栈,则按出栈序列打印输出的即为与输入对应的八进制数。即为与输入对应的八进制数
10、。本讲稿第十一页,共二十四页voidconversion()/对于输入的任意一个非负十进制整数,打印输出对于输入的任意一个非负十进制整数,打印输出/与其等值的八进制数与其等值的八进制数InitStack(S);/构造空栈构造空栈scanf(%d,N);while(N)Push(S,N%8);N=N/8;while(!StackEmpty(S)Pop(S,e);printf(%d,e);/conversion这是利用栈的后进先出特性的最简单的例子。在这个例子中,栈操作的序列这是利用栈的后进先出特性的最简单的例子。在这个例子中,栈操作的序列是直线式的,即先一味地入栈,然后一味地出栈。也许,有的同学
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 精选 文档
限制150内