欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    算法与数据结构ppt课件.ppt

    • 资源ID:1548856       资源大小:474.50KB        全文页数:26页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    算法与数据结构ppt课件.ppt

    3.1 栈,第三章. 栈和队列 (Chapter 3. Stack and Queue),栈(stack)是插入和删除操作受限的线性表,是一种后进先出(Last In First Out - LIFO)的线性表。表头端称为栈底(bottom),表尾端称为栈顶(top),插入和删除都在栈顶进行。,bottom,top,栈的基本操作:,Inistack,Clear,Gettop,Empty,Push,Pop,栈的实现:,#define STACK_INIT_SIZE user_supply#define STACKINCREMENT user_supplytypedef struct elemtype * bottom ; elemtype * top ; int stackzise ; sqstack ;,顺序存储结构表示栈,Full,typedef strcut lnode elemtype data ; struct lnode * next ; * linkedstack;,链式存储结构表示栈-链栈(Linked_stack),上溢(overflow):若栈的容量已全部用完,再进行插入操作(PUSH),就会发生上溢错误。,下溢(underflow):若栈已空,再进行删除操作(POP),就会发生下溢错误。,3.2 栈的应用-表达式求值,任一表达式(expression)都是由操作数(operand)、操作符(operator)和界限符(delimiter)组成。,我们通常习惯使用中缀表达式(infix expression),但中缀表达式离不开括号(bracket)。若使用前缀表达式(prefix expression)或后缀表达式( postfix expression)则不需要括号。利用栈,可以将中缀表达式变为前缀表达式或后缀表达式,再用栈进行运算即可得到表达式的值(value)。,3.3 栈与递归,递归(recursive):一个程序直接调用自己或通过其它程序调用自己就称为递归。根据调用关系可分为直接递归(direct recursive)和间接递归(indirect recursive )。,第 一 次 上 机 作 业 输入表达式字符串,以“=”表示结束, 计算并输出表达式值。 操作数可以是整数或实数,操作符有 “+”、“-”、“*”、“/”、“”(乘方)和 “sin( )”(正弦)、“cos( )”(余弦)、“log( )”(对数)、“ln( )”(自然对数)等函数。,栈在程序的过程或函数调用中的作用:,过程一,过程二,过程三,过程四,断点一,断点二,断点三,stack,递归是程序设计中一种强有力的工具。下面三种情况可用递归解决:,1、有些数学函数是递归定义的,对其求解可用递归;,2、有些数据结构具有递归特性,对其操作可用递归;,3、有些问题的解决方法用递归描述,对其求解也可用递归。,int Fact ( int n ) if ( ! n ) return 1 ; / 出口条件 return n * Fact ( n 1 ) ; / 递归调用部分,int Min ( sqlist S, int n ) if ( n=1 ) return S 1 ; / 出口条件 x = Min ( S, n-1 ); if ( x S n ) return x; else return S n ; / 递归调用部分,如何解决这个问题呢?真伤脑筋啊!,解决该问题可分三步走:,1、将 A 柱上面的 n-1 个盘子从 A 柱移到 C 柱;,2、将第 n 个盘子从 A 柱移到 B 柱;,3、再将 C 柱上面的 n-1 个盘子移到 B 柱。,void Hanoi ( int n , int x, int y, int z) If ( n ) / 出口条件 Hanoi ( n 1 , x, z, y ) ; / 递归调用部分 Move ( n, x, y ) ; Hanoi ( n - 1, z, y, x); ,求费波拉契数列(Fibonacci)、迷宫问题(Maze)、八皇后(Eight Queens)、骑士遍历(Cavalier travel)等等。,以下这些问题也可用递归程序解决:,程序设计常用方法之一:分治法(Divide and Conquer),亦即“分而治之”的方法:把原问题分成若干个子问题,对每一个子问题分别求解,然后把这些解连结成原问题的解。如果子问题仍然比较复杂,还可递归使用分治法,直到每个子问题都得出解为止。,2、下面求 S 中 n 个元素最大值的方法也是使用的分治法:,int Max ( int S MAXLEN , int n) if ( n = 1 ) return S 0 ; m = Max ( S , n 1 ) ; if ( m S n ) return m ; return S n ; ,程序设计常用方法之二: 回溯法(Backtracking),回溯法是一种满足一定条件的穷举搜索法:在求解过程中,不断利用可供选择的规则扩展部分解,一旦当前的部分解不成立,就停止扩展,退回到上一个较小的部分解继续试探,直到找到问题所有的解或无解为止。,void MapColor ( int R n n , int s n ) s 0 =1; / 00 区染 1 色 i = 1 ; j = 1 ; / i 为区域号,j 为染色号 while ( i n ) while ( j 4 ) / 该区染色成功,结果进栈,继续染色下一区, if ( j 4 ) j = s - - i + 1; ; / (回溯)变更栈顶区域的染色色数,用新颜色重试 ,s:,2、过河问题:某人带了一条狗、一只鸡和一筐菜过河,因船小,每次只能带一样东西过河。若单独留下狗和鸡,则狗会吃鸡;若单独留下鸡和菜,则鸡会吃菜。试问他如何过河?,结果如下: 1、人+鸡过河; 2、人空手返回; 3、人+狗过河; 4、人+鸡返回; 5、人+菜过河; 6、人空手返回; 7、人+鸡过河。,前面说到的迷宫问题、八皇后问题、骑士遍历问题均可应用回溯法求解。,作 业2. 试推导求解 n 阶梵塔问题至少要执 行的移动操作 move 次数。3. 一个简化的背包问题:一个背包能装总重量为 T,现有 n 个物件,其重量分别为(W1、W2、Wn)。问能否从这 n 个物件中挑选若干个物件放入背包中,使其总重量正好为 T ?若有解则给出全部解,否则输出无解。,作 业4. 已知以字符型顺序表表示的表达式含有三种扩号“(”、“)”、“”、“”、“”和“”,它们可嵌套使用,试写出算法判断给定表达式中所含扩号是否正确配对出现。,第 二 次 上 机 作 业八皇后问题或骑士遍历问题任选一个。,递归过程的模拟,对有些具有尾递归的过程,由于尾递归后不需保留参数和局部变量,可直接用循环代替递归。例如:,3.3 队列,队列(queue)也是插入和删除操作受限的线性表,但是一种先进先出( First In First Out - FIFO)的线性表。表头端称为队头(front),表尾端称为队尾(rear),插入在队尾进行,而删除则在队头进行。,front,rear,队列的基本操作:,Iniqueue,Clear,Gethead,Empty,Enqueue,Dequeue,Full,Size,队列的实现:,链式存储结构表示队列,typedef struct node elemtype data ; struct node * next ; * pointer;typedef struct pointer front, rear ; linkedqueue ;,顺序存储结构表示队列,#define MAXLEN user_supplytypedef struct elemtype elem MAXLEN ; int front , rear; queue;,ENQUEUE1,ENQUEUE2,ENQUEUE3,DEQUEUE1,ENQUEUE4,DEQUEUE2,ENQUEUE5,ENQUEUE6,ENQUEUE7,ENQUEUE8,ENQUEUE1,ENQUEUE2,ENQUEUE3,DEQUEUE1,ENQUEUE4,DEQUEUE2,ENQUEUE5,ENQUEUE6,ENQUEUE7,ENQUEUE8,q1,q2,q3,q4,q5,q6,q7,q8,循环队列 (circular queue),i = (i+1) % n 入队列 rear+1,出队列 front+1, 元素个数 =(rear front + n ) % n,F,R,F,R,F,R,R,R,R,R,R,R,判断循环队列满和空的三种方法:,2、留下一个单元不使用,则 rear 永远也追不上 front;,作 业5. 若栈的输入序列为 1234,给出所有可能的输出序列。6. 已知有两个栈 S1 和 S2 及其基本操作 Push(S , x)、Pop(S)、Full(S) 和 Empty(S),给出用此二栈实现队列操作Enqueue、Dequeue、Fullq 和Emptyq的算法,

    注意事项

    本文(算法与数据结构ppt课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开