数据结构Ch04教材.pptVIP

  • 1
  • 0
  • 约1.6万字
  • 约 50页
  • 2017-06-05 发布于湖北
  • 举报
第4章 栈和队列 4.1 栈 4.1.1 栈的定义 栈(stack)又称堆栈,它是一种运算受限的线性表,仅允许在表的一端(称为栈顶)进行元素的插入和删除操作。栈顶的第一个元素称为栈顶元素。在栈顶插入一个元素称为进栈,而删除一个元素称为出栈。 由于栈的插入和删除操作仅在栈顶一端进行,后进栈的元素必定先出栈,所有又把栈称为后进先出表(Last In First Out, LIFO)。 例如,一个栈S为(a,b,c),其中表尾的一端为栈顶,字符c为栈顶元素。若向S压入一个元素d,则S变为(a,b,c,d),d为栈顶元素;若依次删除两个元素,则首先删除的是元素d,接着删除的是c,栈S变成(a,b),栈顶元素为b。如图: 3.1.1 集合的定义(续) 栈的入栈出栈示意图: 4.1.2 栈的抽象数据类型 栈的抽象数据类型定义如下: 4.2 栈的顺序存储和操作实现 4.2.1 栈的顺序存储结构 栈的存储结构同样需要使用一个数组合一个整型变量来实现,利用数组来顺序存储栈中的所有元素,利用整型变量来存储栈顶元素的下标位置。 栈数组用stack[Max]表示,指示栈顶位置的整型变量用top表示。在顺序存储的栈中,top的值为-1表示栈空,每次向栈中压入一个元素时,首先使top增1,用以指示新的栈顶位置,然后再把元素赋值到这个空位置上,每次从栈中弹出一个元素时,首先取出栈顶元素,然后使top减1,指示出前一个元素成为新的栈顶元素。 4.2.2 顺序存储下的栈操作的实现 顺序栈类CSeqStack的定义 4.2.2 顺序存储下的栈操作的实现(续) CSeqStack类操作函数的实现 4.2.2 顺序存储下的栈操作的实现(续) 4.2.2 顺序存储下的栈操作的实现(续) 4.2.2 顺序存储下的栈操作的实现(续) 使用CSeqStack类对象的VC++6.0应用程序实例 3.2.2 顺序存储下的线性表操作的实现(续) 使用CSeqStack类对象的VC++6.0应用程序实例(续) 4.3 栈的链接存储和操作的实现 4.3 栈的链接存储和操作的实现(续) 栈类CLinkStack的定义 4.3 栈的链接存储和操作的实现(续) CLinkStack类操作函数的实现 4.3 栈的链接存储和操作的实现(续) CLinkStack类操作函数的实现(续) 4.3 栈的链接存储和操作的实现(续) CLinkStack类操作函数的实现(续) 4.3栈的链接存储和操作的实现(续) 使用CLinkStack类对象的VC++6.0应用程序实例 4.3栈的链接存储和操作的实现(续) 使用CLinkStack类对象的VC++6.0应用程序实例(续) 4.4 栈的简单应用举例 这一节我们将通过几个简单示例说明堆栈在应用中的使用方法。其中,我们将使用前一节设计好的链栈来完成相关操作。其方法如下: 在我们创建了一个示例相关的项目后,通过如下步骤在项目中添加CLinkStack栈类。 将Exam04_02项目文件夹中的LinkStack.h和LinkStack.cpp文件复制到新项目所在的文件夹中; 在新项目的VC++编程环境下,通过Project/Add To Project/Files菜单项把LinkStack.h和LinkStack.cpp文件添加到工程中; 堆栈默认的ElemType是int类型,如果是其他类型,则将ElemType定义修改成相应类型。例如【例4-2】使用的就是字符类型,则将类头文件中的ElemType定义修改成如下形式: typedef char ElemType; 4.4 栈的简单应用举例(续) 【例4-1】从键盘上输入一批整数,然后按照相反的次序打印出来。 4.4 栈的简单应用举例(续) 【例4-2】栈在计算机语言的编译过程中用来进行语法检查,在这个算法中,需要扫描待查程序中的每一个字符,当扫描到每个大、中、圆左括号时,令其进栈,当扫描到每个大、方和圆右括号时,检查栈顶元素是否匹配,若匹配则已匹配字符出栈,否则出错,返回0,如果扫描完成后,堆栈尚不为空,则说明仍不匹配,返回0,全部匹配则返回1 。主函数及匹配检查函数如下: (注意在本项目中添加CLinkStack类文件后,需要修改ElemType的定义) 4.4 栈的简单应用举例(续) 【例4-2】(续) 4.5 算术表达式的计算 4.6 栈与递归 4.6 栈与递归(续) 4.6 栈与递归(续) 4.6 栈与递归(续) 4.7 队列 4.7.1 队列的定义 队列(queue) 简称队,它也是一种运算受限的线性表。其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。把进行出入的一端称为队尾(rear),进行删除的一端称为队首(front)。由于队列的插入和删除操作分别是在各自

文档评论(0)

1亿VIP精品文档

相关文档