收藏 分享(赏)

数据结构与算法 (3).ppt

上传人:Facebook 文档编号:3817438 上传时间:2018-11-19 格式:PPT 页数:26 大小:474.50KB
下载 相关 举报
数据结构与算法 (3).ppt_第1页
第1页 / 共26页
数据结构与算法 (3).ppt_第2页
第2页 / 共26页
数据结构与算法 (3).ppt_第3页
第3页 / 共26页
数据结构与算法 (3).ppt_第4页
第4页 / 共26页
数据结构与算法 (3).ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、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_supply typedef struct elem

2、type * 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)都是由操作数

3、(operand)、操作符(operator)和界限符(delimiter)组成。,我们通常习惯使用中缀表达式(infix expression),但中缀表达式离不开括号(bracket)。若使用前缀表达式(prefix expression)或后缀表达式( postfix expression)则不需要括号。利用栈,可以将中缀表达式变为前缀表达式或后缀表达式,再用栈进行运算即可得到表达式的值(value)。,3.3 栈与递归,递归(recursive):一个程序直接调用自己或通过其它程序调用自己就称为递归。根据调用关系可分为直接递归(direct recursive)和间接递归(indire

4、ct recursive )。,第 一 次 上 机 作 业输入表达式字符串,以“=”表示结束, 计算并输出表达式值。 操作数可以是整数或实数,操作符有 “+”、“-”、“*”、“/”、“”(乘方)和 “sin( )”(正弦)、“cos( )”(余弦)、“log( )”(对数)、“ln( )”(自然对数)等函数。,栈在程序的过程或函数调用中的作用:,过程一,过程二,过程三,过程四,断点一,断点二,断点三,stack,递归是程序设计中一种强有力的工具。下面三种情况可用递归解决:,1、有些数学函数是递归定义的,对其求解可用递归;,2、有些数据结构具有递归特性,对其操作可用递归;,3、有些问题的解决方

5、法用递归描述,对其求解也可用递归。,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 个盘子从

6、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),亦

7、即“分而治之”的方法:把原问题分成若干个子问题,对每一个子问题分别求解,然后把这些解连结成原问题的解。如果子问题仍然比较复杂,还可递归使用分治法,直到每个子问题都得出解为止。,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),回溯法是一种满足一定条件的穷举搜索法:在求解过程中,不断利用可供选择的

8、规则扩展部分解,一旦当前的部分解不成立,就停止扩展,退回到上一个较小的部分解继续试探,直到找到问题所有的解或无解为止。,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、过河问题:某人带了一条狗、一只鸡和一筐菜过河,因船小,每次只能带一样东西过河。若单独

9、留下狗和鸡,则狗会吃鸡;若单独留下鸡和菜,则鸡会吃菜。试问他如何过河?,结果如下:1、人+鸡过河; 2、人空手返回; 3、人+狗过河; 4、人+鸡返回; 5、人+菜过河; 6、人空手返回;7、人+鸡过河。,前面说到的迷宫问题、八皇后问题、骑士遍历问题均可应用回溯法求解。,作 业2. 试推导求解 n 阶梵塔问题至少要执 行的移动操作 move 次数。 3. 一个简化的背包问题:一个背包能装总重量为 T,现有 n 个物件,其重量分别为(W1、W2、Wn)。问能否从这 n 个物件中挑选若干个物件放入背包中,使其总重量正好为 T ?若有解则给出全部解,否则输出无解。,作 业4. 已知以字符型顺序表表示

10、的表达式含有三种扩号“(”、“)”、“”、“”、“”和“”,它们可嵌套使用,试写出算法判断给定表达式中所含扩号是否正确配对出现。,第 二 次 上 机 作 业八皇后问题或骑士遍历问题任选一个。,递归过程的模拟,对有些具有尾递归的过程,由于尾递归后不需保留参数和局部变量,可直接用循环代替递归。例如:,3.3 队列,队列(queue)也是插入和删除操作受限的线性表,但是一种先进先出( First In First Out - FIFO)的线性表。表头端称为队头(front),表尾端称为队尾(rear),插入在队尾进行,而删除则在队头进行。,front,rear,队列的基本操作:,Iniqueue,C

11、lear,Gethead,Empty,Enqueue,Dequeue,Full,Size,队列的实现:,链式存储结构表示队列,typedef struct node elemtype data ;struct node * next ; * pointer; typedef struct pointer front, rear ; linkedqueue ;,顺序存储结构表示队列,#define MAXLEN user_supply typedef struct elemtype elem MAXLEN ;int front , rear; queue;,ENQUEUE1,ENQUEUE2,E

12、NQUEUE3,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的算法,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报