算法与数据结构课件-DSC3.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《算法与数据结构课件-DSC3.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 数据结构 课件 DSC3
- 资源描述:
-
1、S33.1 栈第三章. 栈和队列 (Chapter 3. Stack and Queue) 栈(stack)是插入和删除操作受限的线性表,是一种后进先出(Last In First Out - LIFO)的线性表。表头端称为栈底(bottom),表尾端称为栈顶(top),插入和删除都在栈顶进行。bottomtopS1S2S5S6S3S4S3S3S3S3S3PUSHPUSHPUSHPOPPUSHPUSHPUSH栈的基本操作:栈的基本操作:InistackClearGettopEmptyPushPop栈的实现:栈的实现:#define STACK_INIT_SIZE user_supply#def
2、ine STACKINCREMENT user_supplytypedef struct elemtype * bottom ; elemtype * top ; int stackzise ; sqstack ;顺序存储结构表示栈Fulltypedef strcut lnode elemtype data ; struct lnode * next ; * linkedstack;链式存储结构表示栈-链栈(Linked_stack)上溢(上溢(overflow):):若栈的容量已全部用完,再进行插入操作(PUSH),就会发生上溢错误。下溢(下溢(underflow):):若栈已空,再进行删除
3、操作(POP),就会发生下溢错误。3.2 栈的应用-表达式求值 任一表达式(expression)都是由操作数(operand)、操作符(operator)和界限符(delimiter)组成。 我们通常习惯使用中缀表达式(infix expression),但中缀表达式离不开括号(bracket)。若使用前缀表达式(prefix expression)或后缀表达式( postfix expression)则不需要括号。利用栈,可以将中缀表达式变为前缀表达式或后缀表达式,再用栈进行运算即可得到表达式的值(value)。3.3 栈与递归递归(递归(recursive):):一个程序直接调用自己或通
4、过其它程序调用自己就称为递归。根据调用关系可分为直接递归(direct recursive)和间接递归(indirect recursive )。第第 一一 次次 上上 机机 作作 业业 输入表达式字符串,以输入表达式字符串,以“=”表示结表示结束,束, 计算并输出表达式值。计算并输出表达式值。 操作数可操作数可以是整数或实数,操作符有以是整数或实数,操作符有 “+”、“-”、“*”、“/”、“”(乘方)和(乘方)和 “sin( )”(正弦)、(正弦)、“cos( )”(余弦)、(余弦)、“log( )”(对数)、(对数)、“ln( )”(自然对数)等函数。(自然对数)等函数。栈在程序的过程或
5、函数调用中的作用:过程一过程二过程三过程四断点三断点一断点二断点一断点二断点三stack调用子程序返回断点程序执行 递归是程序设计中一种强有力的工具。下面三种情况可用递归解决: 1、有些数学函数是递归定义的,对其求解可用递归; 2、有些数据结构具有递归特性,对其操作可用递归; 3、有些问题的解决方法用递归描述,对其求解也可用递归。 例:例: 求阶乘(factorial): Fact(n) = 1 当 n = 0 nFact(n-1) 当 n 0 int Fact ( int n ) if ( ! n ) return 1 ; / 出口条件出口条件 return n * Fact ( n 1 )
6、 ; / 递归调用部分递归调用部分 例:例: 求 n 个数的最小值:int Min ( sqlist S, int n ) if ( n=1 ) return S 1 ; / 出口条件出口条件 x = Min ( S, n-1 ); if ( x S n ) return m ; return S n ; 1、河内塔问题的解决方法应用的就是分治法;例:例:程序设计常用方法之二:程序设计常用方法之二: 回溯法(回溯法(Backtracking) 回溯法是一种满足一定条件的穷举搜索法:在求解过程中,不断利用可供选择的规则扩展部分解,一旦当前的部分解不成立,就停止扩展,退回到上一个较小的部分解继续试
7、探,直到找到问题所有的解或无解为止。 1、地图染色(四色定理)问题:例:例:000102030405060002060601050302040 1 1 1 1 1 01 0 0 0 0 1 01 0 0 1 1 0 01 0 1 0 1 1 01 0 1 1 0 1 01 1 0 1 1 0 00 0 0 0 0 0 00 1 2 3 4 5 6R0132456void MapColor ( int R n n , int s n ) s 0 =1; / 00 区染区染 1 色色 i = 1 ; j = 1 ; / i 为区域号,为区域号,j 为染色号为染色号 while ( i n ) wh
展开阅读全文