传智播客_韩顺平_一周玩转算法PPT

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
堆栈---问题提出
主讲 韩顺平
—高级软件人才实作培训专家!
堆栈---基本概念
主讲 韩顺平
一个先入后出(FILO-First In Last Out)的有序列表。堆栈 (stack)是限制线性表中元素的插入和删除只能在线性表的同一端 进行的一种特殊线性表。允许插入和删除的一端,为变化的一端, 称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据 堆栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在 栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放 入的元素最后删除。
—高级软件人才实作培训专家!
链表---单向环形链表的快速入门
使用单向环形链表实现 –解决约瑟夫问题[丢手帕问题] 主讲 韩顺平
—高级软件人才实作培训专家!
堆栈
0. 提出问题 1. 堆栈的概念 2. 堆栈的实际运用 3. 用数组模拟栈 4. 完成一个自定义优先级的综合计算器 主讲 韩顺平
—高级软件人才实作培训专家!
—高级软件人才实作培训专家!
看几个实际编程中遇到的问题
PHP代码:
<?php
$str="abc,ytkhello,abc,北京"; echo str_replace('abc','传智播客',$str); ?>
主讲 韩顺平
?试写出用单链表表示的字符串类及字符串结点类的定义,并 依次实现它的构造函数、以及计算串长度、串赋值、判断两串 相等、求子串、两串连接、求子串在串中位置等7个成员函数。
1.
主讲 韩顺平
—高级软件人才实作培训专家!
看几个实际编程中遇到的问题 其它常见算法问题:
主讲 韩顺平

邮差问题 最短路径问题 汉诺塔 八皇后问题
—高级软件人才实作培训专家!
看几个实际编程中遇到的问题 其它常见算法问题:

主讲 韩顺平
邮差问题 最短路径问题 汉诺塔 八皇后问题
—高级软件人才实作培训专家!
链表---单链表的快速入门
使用带head头的单向链表实现 –水浒英雄排行榜管理 主讲 韩顺平
—高级软件人才实作培训专家!
链表---双向链表的快速入门
使用带head头的双向链表实现 –水浒英雄排行榜管理 主讲 韩顺平
单向链表的缺点分析:不能自我删除,需要靠辅助节点 , 而双向链表,则可以自我删除,同时在二叉树,广义表中都需要使用 到一个节点执行两个或者多个节点的时间运用!
—高级软件人才实作培训专家!
PHP程序员-一周玩转算法
讲师:韩顺平
hanshunping@tsinghua.org.cn
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家!
介绍
主讲 韩顺平 算法是程序的灵魂,为什么有些网站能够在高并发,和海量吞吐 情况下依然坚如磐石,大家可能会说: 网站使用了服务器群集技术、数 据库读写分离和缓存技术(比如memcahced和redis等),那如果我再深 入的问一句,这些优化技术又是怎样被那些天 才的技术高手设计出来 的呢? 我在上大学的时候就在想,究竟是什么让不同的人写出的代码从 功能看是一样的,但从运行效率上却有天壤之别, 就拿以前在软件公 司工作的实际经历来说吧, 我是做服务器的,环境是UNIX系统,功能 是要支持上千万人同时在线,并保证数据传输的稳定, 在服务器上线 前,做过内测,一切OK,可实际上线后,服务器就支撑不住了, 公司的 CTO(首任sina CTO) 花了3天时间对我的代码进行优化,再次上线, 坚如磐石。那一瞬间,我认识到程序是有灵魂的,就是算法。如果你不 想永远都是一个代码工人,不想当孬种程序员,那就花点时间来研究一 下算法吧! [看看别人怎么说] 本次公开课为六天,着重讲解算法的基石-数据结构。
—高级软件人才实作培训专家!
堆栈---快速入门

主讲 韩顺平
用数组模拟栈的使用(3)
用一个实例来说明堆栈的使用(基础案例)
—高级软件人才实作培训专家!
堆栈---综合计算器

ห้องสมุดไป่ตู้
主讲 韩顺平
使用栈来实现综合计算器-自定义优先级
简化思路: 1. 3+2*6-2 2. 30+2*6-2 3. 7*2*2-5+1-5*3-3
—高级软件人才实作培训专家!
堆栈---快速入门

主讲 韩顺平
用数组模拟栈的使用(1)
由于堆栈是一种有序列表,当然可以使用数组的结构来储存堆栈 的数据内容,堆栈数组的声明如下: $myStack=array(); //声明 $top=-1; //当前操作的那个元素
其中MaxSize是该堆栈的最大容量。后面将会以Maxsize-l 的值MaxTop作为堆栈最大顶端指针。虽然数组结构可直接用下 标来存取数据,但在此将数组视为堆栈,故只能从堆栈的顶端进 行处理。所以需要一个变量来记录目前堆栈顶端的索引值。初始 值设-1表示堆栈为空,top会随着堆栈中数据量的移动改变其指 向顶端的位置。
php的数组,本身提供 array_push() 和 array_pop 和print_r()的方法. => 我们自己来用最基础的方法来实现
—高级软件人才实作培训专家!
堆栈---快速入门

主讲 韩顺平
用数组模拟栈的使用(2)
接下来要说明在堆栈中是如何对数据做存取。将数据输入至堆栈中称为“Push” 压栈,Push的处理主要有两个步骤: (1)栈项指针:top+1 (2)若top小于等于堆栈最大顶端指针MaxTop(表示堆栈未满),则将数据存入top 所指的数组元素中,否则即表示堆栈已满,无法存入数据。 另外,将数据从堆栈中取出称为“pop”出栈。pop的处理也有两个步骤: (1)若堆栈指针数值大于等于0时(堆栈末空),则取出目前栈顶指针top所指的数组 内容。 (2)将栈顶指引:top-1,指向下一个堆栈元素。
—高级软件人才实作培训专家!
链表----最灵活的数据结构
1. 什么是链表 2. 单向链表 3. 双向链表 4. 环形链表 5. 使用环形链表解决约瑟夫问题 主讲 韩顺平
结合一个实际的工作案例
—高级软件人才实作培训专家!
链表----什么是链表
链表是有序的列表,但是它在内存中是分散存储的。 主讲 韩顺平
引入清华课程,对学生要求.
—高级软件人才实作培训专家!
看几个实际编程中遇到的问题
一个五子棋程序:
主讲 韩顺平
?如何判断游戏的输赢,并可以完成存盘退出 和继续上局的功能
—高级软件人才实作培训专家!
看几个实际编程中遇到的问题 约瑟夫问题(丢手帕问题)
Josephu 问题 Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1 开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列, 依次类推,直到所有人出列为止,由此产生一个出队编号的序列。 提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循 环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被 删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。 直接走代码
—高级软件人才实作培训专家!
小结
主讲 韩顺平
—高级软件人才实作培训专家!
堆栈---最佳实践
主讲 韩顺平
1.子程序的调用:在跳往子程序前,会先将下个指令的地址存到 堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序 中。 2.处理递归调用:和子程序的调用类似,只是除了储存下一个指 令的地址外,也将参数、区域变量等数据存入堆栈中。 3.表达式的转换与求值。 4.二叉树的遍历。 5.图形的深度优先(depth一first)搜索法。
相关文档
最新文档