电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

内蒙古大学《算法与数据结构》课件第3章栈、队列与广义表

98页
  • 卖家[上传人]:东***
  • 文档编号:270893662
  • 上传时间:2022-03-27
  • 文档格式:PDF
  • 文档大小:1.88MB
  • / 98 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、1第三章第三章 栈、队列与广义表栈、队列与广义表 3.1 栈栈 3.2 队列队列 3.3 栈与队列的应用栈与队列的应用 3.4 广义表广义表23.1 栈栈 ( Stack ) 3栈的抽象数据类型栈的抽象数据类型ADT Stack Data 数据元素表数据元素表 top: 栈顶位置栈顶位置 Operations Constructor Process: 创建一个空栈创建一个空栈 IsEmpty Process: 判断栈是否为空判断栈是否为空 Output: 如果栈为空,则返回如果栈为空,则返回true,否则返回,否则返回false GetTop Process: 取栈顶元素取栈顶元素 Output: 返回栈顶元素返回栈顶元素 3.1.1 ADT栈栈4栈的抽象数据类型栈的抽象数据类型 Length Process: 求栈中元素个数求栈中元素个数 Output: 返回栈中元素的个数返回栈中元素的个数 Push / 入栈入栈 Input: 要添加的数据元素要添加的数据元素 Process: 向栈中添加元素向栈中添加元素x Pop / 出栈出栈 Process: 删除栈顶元素删除栈顶元素 Out

      2、put: 返回栈顶元素返回栈顶元素 Clear Process: 删除栈中所有元素并置新的栈顶删除栈中所有元素并置新的栈顶 /Stack5一、顺序栈一、顺序栈const int MaxStackSize=50; /栈中能容纳最大元素个数栈中能容纳最大元素个数class SeqStack DataType StackListMaxStackSize; int top; public: SeqStack(); /构造函数,初始化构造函数,初始化top bool IsEmpty(); /判断栈的状态是否为空判断栈的状态是否为空 bool IsFull(); DataType GetTop(); /取栈顶元素取栈顶元素 void Push(const DataType x); /入栈入栈 DataType Pop(); /出栈出栈 void Clear(); /栈清空栈清空;/ SeqStack3.1.2 栈的实现栈的实现6顺序栈的基本操作的实现顺序栈的基本操作的实现: SeqStack( ) /构造函数,初始化一个空栈构造函数,初始化一个空栈 StackList = new DataType

      3、MaxStackSize; top=-1; / SeqStack bool SeqStack : IsEmpty ( ) /判断栈是否为空判断栈是否为空 if(top=-1) return true; else return false;/ IsEmpty7bool SeqStack :IsFull( ) /判断栈是否已满判断栈是否已满 if(top=MaxStackSize-1) return true; else return false;/ IsFull8DataType SeqStack : GetTop( ) /取栈顶元素取栈顶元素 i f (IsEmpty( ) cout”栈空!栈空!”endl; return nulldata; return StackListtop;9栈顶指针栈顶指针top,指向栈底指向栈底位置位置top入栈入栈Atop出栈出栈栈满栈满BCDEFtop=-1,栈空,此时出栈,则下溢(栈空,此时出栈,则下溢(underflow)top= MaxStackSize-1,栈满,此时入栈,则上溢栈满,此时入栈,则上溢(overflow)toptoptoptop

      4、toptoptoptoptoptoptop栈空栈空top123450栈空栈空123450ABCDEF123450顺序栈的入栈与出栈顺序栈的入栈与出栈10void SeqStack : Push(DataType x) /入栈入栈 if (IsFull( ) cout”栈满!栈满!”endl; else StackList+top = x;/ Push11DataType SeqStack : Pop( ) /出栈出栈 if (IsEmpty( ) cout”栈空!栈空!”next=NULL; /创建头结点创建头结点 void Push (DataType data); /入栈入栈 DataType Pop ( ); /出栈出栈 DataType GetTop ( ); / 读栈顶元素读栈顶元素 void Clear ( ) top-next=NULL; /清栈空清栈空,实现错实现错 bool IsEmpty ( ) return top -next= = NULL; /判栈空判栈空;/ LinkStack链式栈链式栈 (LinkedStack)类的定义类的定义17类中操作算法描述如下:

      5、类中操作算法描述如下:void LinkStack : Push (DataType item ) /入栈操作入栈操作 p=new StackNode ( item); p-next=top-next; top-next=p;/Push18DataType LinkStack :pop ( ) /出栈操作出栈操作 if ( top-next!=NULL ) p = top-next; retvalue = p-data; /暂存栈顶数据暂存栈顶数据 top -next= p-next; /修改栈顶指针修改栈顶指针 delete p; return retvalue; /释放释放,返回数据返回数据 else /栈空的情况栈空的情况 cout”the stack is empty!”next!=NULL) return top-next-data; else /栈空的情况栈空的情况 cout”the stack is empty!”0Fact(n)=1 若n=0Fib(n)=0 (n=0)1 (n=1)Fib(n-1)+Fib(n-2) (n1)3.1.3 栈与递归栈与递归243递归算法的

      6、设计方法递归算法的设计方法 在设计递归算法时,应该遵循下面的规则在设计递归算法时,应该遵循下面的规则:(1)定义一个最小规模的问题,并给出其解;定义一个最小规模的问题,并给出其解;(2)把复杂的问题划分为同类型的若干规模较小的子问把复杂的问题划分为同类型的若干规模较小的子问 题,并分别解决子问题;题,并分别解决子问题;(3)把各子问题的解组合起来,即可得到原问题的解。把各子问题的解组合起来,即可得到原问题的解。 3.1.3 栈与递归栈与递归25例例1 1 递归的执行情况分析递归的执行情况分析-n!-n! int fact (int n) if ( n=0) fact= 1; else fact=n* fact ( n-1); void main( ) int f; f=fact(3); coutf; 3.1.3 栈与递归栈与递归26地址地址 ntop递归调用执行情况如下:递归调用执行情况如下:系统栈系统栈 int fact (int n) 1 if ( n=0) 2 fact= 1; 3 else 4 fact=n* fact( n-1);3.1.3 栈与递归栈与递归27 int fa

      7、ct (int n) 1if ( n=0) 2 fact= 1; 3else 4 fact=n* fact( n-1);地址地址 n3n*fact(2); 4 n=3 topn递归调用执行情况如下:递归调用执行情况如下:系统栈系统栈283n*fact(2);n2n*fact(1);4 n=2 4 n=3 topn地址地址 n递归调用执行情况如下:递归调用执行情况如下:系统栈系统栈 int fact (int n) 1if ( n=0) 2 fact= 1; 3else 4fact=n* fact( n-1);291n*fact(0);4 n=1 4 n=2 4 n=3 topn3n*fact(2);n2n*fact(1);n地址 n递归调用执行情况如下:递归调用执行情况如下:系统栈系统栈 int fact (int n) 1if ( n=0) 2 fact= 1; 3else 4fact=n* fact( n-1);301n*fact(n-1);4 n=1 4 n=2 4 n=3 topn3n*fact(2);n2n*fact(1);n0n地址 nfact(0)=1递归调用执行情况如下

      8、:递归调用执行情况如下:系统栈系统栈 int fact (int n) 1if ( n=0) 2 fact= 1; 3else 4fact=n* fact( n-1);313n*fact(n-1);n2n*fact(n-1);n0nfact(0)=11n*fact(n-1);n4 n=2 4 n=3 topfact(1)=1地址 n递归调用执行情况如下:递归调用执行情况如下:系统栈系统栈 int fact (int n) 1if ( n=0) 2 fact= 1; 3else 4fact=n* fact( n-1);323n*fact(n-1);n2n*fact(n-1);n0nfact(0)=11n*fact(n-1);nfact(1)=14 n=3 topfact(2)=2地址 n递归调用执行情况如下:递归调用执行情况如下:系统栈系统栈 int fact (int n) 1if ( n=0) 2 fact= 1; 3else 4fact=n* fact( n-1);333n*fact(n-1);n2n*fact(n-1);n0nfact(0)=11n*fact(n-1);nfact

      9、(1)=1fact(2)=2topfact(3)=6地址 n递归调用执行情况如下:递归调用执行情况如下:系统栈系统栈 int fact (int n) 1if ( n=0) 2 fact= 1; 3else 4fact=n* fact( n-1);34计算斐波那契数列的函数计算斐波那契数列的函数Fib(n)的定义的定义求解斐波那契数列的递归算法求解斐波那契数列的递归算法long Fib ( int n ) if ( n = 0|n=1 ) return n; else return Fib (n-1) + Fib (n-2);2),2() 1(0,1,)(nnFibnFibnnnFib35Fib(5)Fib(4)Fib(3)Fib(1)Fib(2)Fib(0)Fib(3)Fib(2)Fib(1)Fib(1)Fib(0)Fib(1)Fib(2)Fib(1)Fib(0)考虑考虑n=5,建立如下一个调用层次树,建立如下一个调用层次树36非递归实现非递归实现Fibonacci函数如下:函数如下: long Fib(int n) long oneback=0 , twoback=1 , curr

      10、ent; if(n=0|n=1) return n; else for(i=2;itemp) return An-1; else return temp; (2)求数组)求数组A中的最大整数。中的最大整数。39例:例:Tower of Hanoi问题问题问题描述问题描述:有:有A,B,C三个塔座,三个塔座,A上套有上套有n个直径不个直径不同的圆盘,按直径从小到大叠放,形如宝塔同的圆盘,按直径从小到大叠放,形如宝塔,编号编号1,2,3n。要求将要求将n个圆盘从个圆盘从A移到移到C,叠放顺序叠放顺序不变,移动过程中遵循下列原则:不变,移动过程中遵循下列原则:v每次只能移一个圆盘每次只能移一个圆盘v圆盘可在三个塔座上圆盘可在三个塔座上 任意移动任意移动v任何时刻,每个塔座上任何时刻,每个塔座上 不能将大盘压到小盘上不能将大盘压到小盘上40执行情况执行情况递归工作栈保存内容:实参递归工作栈保存内容:实参n,x,y,z和返回地址和返回地址返回地址用行编号表示返回地址用行编号表示汉诺塔解决方法汉诺塔解决方法n1时,先把时,先把A上上的的n-1个圆盘移到个圆盘移到B,然后将然后将n号盘从号盘从A移到

      《内蒙古大学《算法与数据结构》课件第3章栈、队列与广义表》由会员东***分享,可在线阅读,更多相关《内蒙古大学《算法与数据结构》课件第3章栈、队列与广义表》请在金锄头文库上搜索。

      点击阅读更多内容
    TA的资源
    点击查看更多
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.