- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 第 * 页 第四章 栈和队列 从逻辑关系的角度来看,栈和队列与线性表相同。 从运算的角度来看,栈和队列的操作是线性表操作的子集。 4.1 栈 4.2 栈的应用 4.3 队列 4.4 队列的应用 4.5 小结 * 第 * 页 4.1 栈 栈的定义 栈是指插入和删除都限定在表尾进行的线性表。 在栈中允许插入、删除的表尾叫做栈顶,不允许插入、删除的表头叫做栈底。 栈的结构 假设,栈Stack =(a1,a2,…,an),则a1为栈底元素,a1为栈顶元素。栈中元素的插入(进栈)次序为a1,a2,…,an。而删除(出栈)次序为an,an-1,…,a1。 栈中元素被处理时,按照先进后出的顺序进行,所以栈又称为先进后出(FILO - First In Last Out)的线性表。 ?图4-1-1栈的结构示意 a1 an a2 栈底 栈顶 进栈 出栈 ? * 第 * 页 4.1 栈 栈的基本操作 1. ? 初始化:生成一个新的空栈。 2. ? 进栈:向栈中加入一个新的元素,作为新的栈顶 3. ? 出栈:取得栈顶元素,并将它从栈中删除。 4. ? 取栈顶元素:取得栈顶元素的值。 5. 判空:判别一个栈是否为空。若为空,返回TRUE;否则,返回FALSE。 * 第 * 页 4.1.1 顺序栈 栈的顺序存储结构简称顺序栈。 利用一组地址连续的存储单元来存放栈中的数据元素。 在C语言中,通常用一维数组来定义顺序栈。 设置栈顶指针来指示栈顶元素的位置。 * 第 * 页 4.1.1 顺序栈(续1) 存储结构定义 #define STACK_SIZE 100 /* 栈的大小 */ typedef struct stack_st { ELEMENT data[STACK_SIZE]; /* ELEMENT为栈中元素的数据类型 */ int top; /* 栈顶元素的指针(下标)*/ } STACKE; 在C语言中,数组下标从0开始,所以,空栈的标志是top = -1。 (a) (b) (c) (d) 图4-1-2栈操作示例 (a)表示空栈,(b)栈中插入A,(c)依次插入B、C、D的情况, (d)从栈中弹出D、C后的情况。 top ? ? ? ? ? top A ? ? ? ? top A D C B ? top A ? ? B ? * 第 * 页 4.1.1 顺序栈(续2) 五种基本操作的实现 * 第 * 页 4.1.2 链接栈 链栈结构形式与单链表相似。 链栈的栈顶指针就是链表的头指针,结点的插入和删除操作只能在此进行。 链栈的所有操作只针对链栈的头部,故链栈不设头结点。 * 第 * 页 4.1.2 链接栈(续1) 链栈的结点结构定义 typedef struct node_st { ELEMENT data; /* 链栈结点的内容 */ struct node_st *next; /* 指向下一个栈元素的指针 */ } NODE; a2 a1 ^ an-1 an top data next 栈底 栈顶 图4-1-3链栈的结构示意 * 第 * 页 4.1.2 链接栈(续2) 五种基本操作的实现 * 第 * 页 4.2 栈的应用 函数调用与栈 递归与栈 迷宫求解 * 第 * 页 4.2.1 函数调用与栈 函数调用与栈 栈在函数调用、递归、语法分析、表达式求值等的实现中都要用到。 在函数调用中,函数调用 -- 返回关系的控制就是通过栈来实现的。 在递归过程中,子程序间的信息传递和控制转移也是通过栈来实现的。 * 第 * 页 4.2.2 递归与栈 递归是一种重要的程序设计方法。 如果在一个函数、过程或数据结构的定义内部又直接或间接地应用了定义本身,则称它们是递归的。 递归可以分为直接递归和间接递归两种。 例如,在常见的函数递归调用中,直接调用时,在函数内有调用本函数的语句,当执行到这条语句时,程序将会转到本函数的第1行重新开始执行本函数。 间接调用时,在f1函数内,先调用f2函数,在执行f2函数中,又有调用f1的函数。 f函数 调用f函数 f1函数 调用f2函数 调用f1函数 f2函数 直接调用本函数 图4-5 函数的递归调用 间接调用本函数 * 第 * 页 4.2.2 递归与栈(续1) 一个递归函数的运行类似于多个函数的嵌套调用。 系统设定一个递归工作栈,每进入一层递归调用时,将相应的信息(函数返回值及返回地址)压入栈顶,而每退出一层递归时,栈顶元素就是要返回的地址。 (1)调用 power(3) 时 函数返回地址r2 函
您可能关注的文档
- 数据挖掘与知识获取课件2、数据预处理幻灯片.ppt
- 数据挖掘与知识获取课件3、数据仓库和数据挖掘的OLAP技术幻灯片.ppt
- 接入网实作接入网系统幻灯片.ppt
- 数据挖掘与知识获取课件4、数据立方体计算与数据泛化幻灯片.ppt
- 数据挖掘与知识获取课件5、挖掘频繁模式、关联和相关幻灯片.ppt
- 数据挖掘与知识获取课件6、聚类分析幻灯片.ppt
- 普通地质学201201-32课时第一章地球的圈层结构幻灯片.ppt
- 数据挖掘原理算法与应用教学作者梁亚声第1章节电子教案课件幻灯片.ppt
- 宁夏电信WLAN综合网管培训课件幻灯片.ppt
- 数据挖掘原理算法与应用教学作者梁亚声第2章节电子教案课件幻灯片.ppt
文档评论(0)