* 算法设计: 1.编写一个算法,利用栈的基本运算返回指定栈中栈底元素。 先退栈 s中所有元素,利用一个临时栈 temp存放从 s栈中退出的元素,最后一个元素即为所求,然后将临时栈 temp 中的元素逐一出栈并进栈到 s 中,这样恢复 s 栈中原来的元素。 SElemType Bottom ( SqStack S ) { SElemType x, y; SqStack temp; InitStack ( temp ); //初始化临时栈 * while ( ! StackEmpty ( S )) //临时栈temp中包含s栈中逆转元素 { Pop ( S, x);//最后一个元素即x Push ( temp, x); } while ( ! StackEmpty ( temp )) //恢复s栈中原来的内容 { Pop (temp, y); Push (S, y); } return x; } * 思考:如何利用栈的基本运算将链表中的内容进行逆置。 算法的思路:首先遍历链表,逐个访问节点, 并把节点依次压入栈中,再从栈中取出存放的节点, 把它们依次插入单链表中。 通过栈把节点的次序颠倒过来。 (请先思考,下节课讨论) * 1. 递归的概念: 一个过程(或子程序,函数)在完成之前又直接或间接地调用自己,则称之为递归过程(或子程序,函数)。 若直接调用自己称为直接递归,若通过其它函数并由后者反过来调用前者,成为间接递归。 2. 递归不是一种数据结构,而是一种算法设计方法。 3.2栈与递归的实现 * 3. 以下三种情况,常用到递归方法 (1)数学函数是递归定义的 求阶乘的递归算法 long Factorial ( long n ) { if ( n == 0 ) return 1; else return n*Factorial (n-1); } * 求解阶乘 n! 的过程 * (2)数据结构是递归的 例:单链表结构 搜索链表最后一个结点并打印其数值 void Find ( LNode *L ) { if ( L -next == NULL ) printf(“%d”, L-data); else Find ( L -next ); } * 4. 递归设计 对原问题f(s)进行分解,给出合理的较小问题f(s’); 假设f(s’)是可解的,在此基础上确定f(s)的解,给出f(s)与f(s’)之间的关系; 确定一个特定情况的解,由此作为递归出口。 含一个递归调用的递归过程的一般形式 void p(参数) { if(数据为递归出口) 操作; else{ 操作; p(参数); 操作; } } * 5.递归调用的内部实现原理 (1)一般函数调用 运行被调用函数之前 实在参数,返回地址传给被调用函数保存; 为被调用函数的局部变量分配存储区; 将控制转移到被调用函数入口,转被调用函数执行。 被调用函数返回之前 保存被调用函数的计算结果; 释放被调用函数的数据区; 按返回地址将控制权转移到调用函数。 (2)递归调用 调用自身代码的复制件 函数之间的信息传递和控制转移通过“栈”来实现。 * void test(int sum){ int x; scanf(x); if(x==0)sum=0; else{test(sum);sum+=x;} printf(sum); } 断点地址入栈 例4(严题集3.10③)阅读下列递归过程,说明其功能。 输入x1≠0 输入x5=0 输入x2 输入x3 输入x4 输出sum=0 输出sum=0+x4 输出sum=x4+x3 输出sum= x4+x3 +x2 输出sum= x4+x3 +x2+x1 注意:最先输入的数据 x1 最后才被累加 程序功能:对键盘输入数据求和,直到输入0结束 * long Factorial ( long n ) { int temp; if ( n == 0 ) return 1; else temp = n * Factorial (n-1); return temp; RetLoc2 } void main ( ) { int n; n = Facto
您可能关注的文档
- 12、西湖名堤详解.ppt
- 12.《北京亮起来了》详解.ppt
- 12.《罗布泊消逝的仙湖》详解.ppt
- 12.《为人民服务》详解.ppt
- 12.《小英雄雨来》(完美版)详解.ppt
- 12.《种瓜得豆》第一课时详解.ppt
- 12.2价值判断和价值选择详解.ppt
- 12.2价值判断与价值选择详解.ppt
- 12.2艰苦奋斗走向成功详解.ppt
- CH-02_2014预案.ppt
- 广东省广州省实验中学教育集团2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州大学附属中学2025-2026学年八年级上学期奥班期中物理试题(解析版).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(含答案).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(解析版).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 2026《中国人寿上海分公司营销员培训体系优化研究》18000字.docx
- 《生物探究性实验教学》中小学教师资格模拟试题.docx
原创力文档

文档评论(0)