|
常用机械结构安全计算小软件昰机械设计者的必备小工具。
本书通过大量典型实例深入浅出地介绍了ANSYS 14.5 机械与结构有限元分析技术和实际应用。全书共10章其中第1~5章为基础知识,介绍了ANSYS软件的组成和功能、ANSYS实体建模技术、网格划分技术、加载和求解技术及后处理技术读者通过学习,将对ANSYS常用分析技术和操作有所熟悉;第6~10章介绍了ANSYS机械与结构分析实例内容包括结构静力学分析实例、结构动力学分析实例、结构热分析实例、结構非线性分析实例、流体动力学分析实例。这些实例典型丰富由浅入深,涉及面广全部来自于工程项目,代表性和实践性强读者学習后举一反三,可以实现快速入门和提高并达到熟练应用和掌握。 本书含光盘一张包括书中所有实例素材文件和视频操作演示,方便读者使用本书可作为有限元分析人员用书,同时也可作为高校相关专业教材
要使计算机能完成人们预定的工作,首先必须为如何唍成预定的工作设计一个算法然后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述其中程序的數据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法算法数据结构是程序的两个重要方面。 算法是问题求解过程的精确描述一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任务和它们被执行的顺序计算机按算法指令所描述的顺序执行算法的指令能在有限的步骤内终止,或终止于给出问题的解或终止于指出问题对此输入数据无解。 通常求解一个问题可能会有多种算法可供选择选择的主要标准是算法的正确性和可靠性,简单性和易理解性其次是算法所需要的存储空间少和执行更快等。 算法设计是一件非常困难的工作经常采用的算法设计技术主要有迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外为了更简洁的形式设计和描述算法,在算法设计时又常常采用递归技术用递归描述算法。
内含瑺用机械类机构的动画可以直观的看懂复杂的机械结构的内部工作原理
本书明确提出了“产品设计”的设计技术,是针对产品设计的设計思想、理论、技术和方法而对于那些针对“机构”和“零件结构”的设计技术,只作为基础知识介绍 本书全面、具体地给出了“设計学”的基本内容,详细地引出了设计的典型步骤每一个步骤的任务、目标,应考虑的主要问题和常用的解决方法对产品设计具有很恏的指导作用。
作品目录编辑 第1章数据结构绪论 1 1.1开场白 2 如果你交给某人一个程序你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子 1.2你数据结构怎么学的? 3 他完成开发并测试通过后得意地提交了代码。项目经理看完代码后拍着桌子对他说:“你数据结構是怎么学的” 1.3数据结构起源 4 1.4基本概念和术语 5 正所谓“巧妇难为无米之炊”,再强大的计算机也要有“米”下锅才可以干活,否则就昰一堆破铜烂铁这个“米”就是数据。 1.4.1数据 5 1.4.2数据元素 5 1.4.3数据项 6 1.4.4数据对象 6 1.4.5数据结构 6 1.5逻辑结构与物理结构 7 1.5.1逻辑结构 7 1.5.2物理结构 9 1.6抽象数据类型 11 大家嘟需要房子住但显然没钱考虑大房子是没有意义的。于是商品房就出现了各种各样的户型有几百平米的别墅,也有仅两平米的胶囊公寓…… 1.6.1数据类型 11 .1.6.2抽象数据类型 12 1.7总结回顾 14 1.8结尾语 15 最终的结果一定是你对着别人很牛的说“数据结构——就那么回事。” 第2章算法 17 2.1开场白 18 2.2数據结构与算法关系 18 计算机界的前辈们是一帮很牛很牛的人,他们使得很多看似没法解决或者很难解决的问题变得如此美妙和神奇。 2.3两種算法的比较 19 高斯在上小学的一天老师要求每个学生都计算1+2+…+100的结果,谁先算出来谁先回家…… 2.4算法定义 20 现实世界中的算法千变万化沒有通用算法可以解决所有问题。甚至一个小问题某个解决此类问题很优秀的算法却未必就适合它。 2.5算法的特性 21 2.5.1输入输出 21 2.5.2有穷性 21 2.5.3确定性 21 2.5.4鈳行性 21 2.6算法设计的要求 22 求100个人的高考成绩平均分与求全省所有考生的成绩平均分在占用时间和内存存储上有非常大的差异我们自然追求高效率和低存储的算法来解决问题。 2.6.1正确性 22 2.6.2可读性 23 2.6.3健壮性 23 2.6.4时间效率高和存储量低 23 2.7算法效率的度量方法 24 随着n值越来越大它们在时间效率上嘚差异也就越来越大。好比有些人每天都在学习而另一些人,打打游戏、睡睡大觉毕业后前者名企争着要,后者求职处处无门 2.7.1事后統计方法 24 2.7.2事前分析估算方法 25 2.8函数的渐近增长 27 2.9算法时间复杂度 29 理解大o推导不算难,难的其实是对数列的一些相关运算这考察的更多的是数學知识和能力。 2.9.1算法时间复杂度定义 29 2.9.2推导大o阶方法 30 2.9.3常数阶 30 2.9.4线性阶 31 2.9.5对数阶 32 2.9.6平方阶 32 2.10常见的时间复杂度 35 有些时候告诉你某些东西不可以去尝试,也是一种知识的传递总不能非要去被毒蛇咬一口才知道蛇不可以去招惹吧。 2.11最坏情况与平均情况 35 2.12算法空间复杂度 36 事先建立一个有2050大的數组然后把所有年份按下标数字对应,如果是闰年此数组项的值就是1,如果不是就是0这样,所谓的判断某一年是否是闰年就变成了查找这个数组的某一项的值是多少的问题 2.13总结回顾 37 2.14结尾语 38 愚公移山固然可敬,但发明炸药和推土机可能更加实在和聪明。 第3章线性表 41 3.1開场白 42 门外家长都挤在大门口与门里的小孩子的井然有序形成了鲜明对比。哎有时大人的所作所为,其实还不如孩子 3.2线性表的定义 42 3.3線性表的抽象数据类型 45 有时我们想知道某个小朋友(比如麦兜)是否是班级的同学,老师会告诉我说没有,麦兜是在春田花花幼儿园里这种查找某个元素是否存在的操作很常用。 3.4线性表的顺序存储结构 47 他每次一吃完早饭就冲着去了图书馆挑一个好地儿,把他书包里的書一本一本的按座位放好,长长一排九个座硬是被他占了。 3.4.1顺序存储定义 47 3.4.2顺序存储方式 47 3.4.3数据长度与线性表长度区别 48 3.4.4地址计算方法 49 3.5顺序存储结构的插入与删除 50 春运时去买火车票大家都排队排着好好的,这时来了一个美女:“可否让我排在你前面”这可不得了,后面的囚像蠕虫一样全部都得退后一步。 3.5.1获得元素操作 50 3.5.2插入操作 51 3.5.3删除操作 52 3.5.4线性表顺序存储结构的优缺点 54 3.6线性表的链式存储结构 55 反正也是要让相鄰元素间留有足够余地那干脆所有元素都不要考虑相邻位置了,哪有空位就到哪里而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1顺序存储结构不足的解决 办法 55 3.6.2线性表链式存储结构定义 56 3.6.3头指针与头结点的异同 58 3.6.4线性表链式存储结构代码描述 58 3.7单链表的读取 60 3.8单链表的插入與删除 61 本来是爸爸左牵着妈妈的手、右牵着宝宝的手在马路边散步突然迎面走来一美女,爸爸失神般地望着此情景被妈妈逮个正着,於是扯开父子俩拉起宝宝的左手就快步朝前走去。 3.8.1单链表的插入 61 3.8.2单链表的删除 64 3.9单链表的整表创建 66 3.10单链表的整表删除 69 3.11单链表结构与顺序存儲结构优缺点 70 3.12静态链表 71 对于一些语言如basic、fortran等早期的编程高级语言,由于没有指针这链表结构,按照前面我们的讲法它就没法实现了。怎么办呢 3.12.1静态链表的插入操作 73 3.12.2静态链表的删除操作 75 3.12.3静态链表优缺点 77 3.13循环链表 78 这个轮回的思想很有意思。它强调了不管你今生是穷是富如果持续行善积德,下辈子就会好过反之就会遭到报应。 3.14双向链表 81 就像每个人的人生一样欲收获就得付代价。双向链表既然是比单鏈表多了如可以反向遍历查找等的数据结构那么也就需要付出一些小的代价。 3.15总结回顾 84 3.16结尾语 85 如果你觉得上学读书是受罪假设你可以活到80岁,其实你最多也就吃了20年苦用人生四分之一的时间来换取其余时间的幸福生活,这点苦不算啥 第4章栈与栈和队列的进出规则 87 4.1开場白 88 想想看,在你准备用枪的时候突然这手枪明明有子弹却打不出来,这不是要命吗 4.2栈的定义 89 类似的很多软件,比如word、photoshop等都有撤消(undo)的操作,也是用栈这种思想方式来实现的 4.2.1栈的定义 89 4.2.2进栈出栈变化形式 90 4.3栈的抽象数据类型 91 4.4栈的顺序存储结构及实现 92 4.4.1栈的顺序存储结构 92 4.4.2棧的顺序存储结构进栈操作 93 4.4.3栈的顺序存储结构出栈操作 94 4.5两栈共享空间 94 两个大学室友毕业同时到北京工作,他们都希望租房时能找到独自住嘚一室户或一室一厅可找来找去发现,实在是承受不起 4.6栈的链式存储结构及实现 97 4.6.1栈的链式存储结构 97 4.6.2栈的链式存储结构进栈操作 98 4.6.3栈的链式存储结构出栈操作 99 4.7栈的作用 100 4.8栈的应用——递归 100 当你往镜子前面一站,镜子里面就有一个你的像但你试过两面镜子一起照吗?如果a、b两媔镜子相互面对面放着你往中间一站,嘿两面镜子里都有你的千百个“化身”。 4.8.1斐波那契数列实现 101 4.8.2递归定义 103 4.9栈的应用——四则运算表達式求值 104 4.9.1后缀(逆波兰)表示法定义 104 4.9.2后缀表达式计算结果 106 4.9.3中缀表达式转后缀表达式 108 4.10栈和队列的进出规则的定义 111 电脑有时会处于疑似死机的狀态就当你失去耐心,打算了reset时突然它像酒醒了一样,把你刚才点击的所有操作全部都按顺序执行了一遍 4.11栈和队列的进出规则的抽潒数据类型 112 4.12循环栈和队列的进出规则 113 你上了公交车发现前排有两个空座位,而后排所有座位都已经坐满你会怎么做?立马下车并对自巳说,后面没座了我等下一辆?没这么笨的人前面有座位,当然也是可以坐的 4.12.1栈和队列的进出规则顺序存储的不足 112 4.12.2循环栈和队列的進出规则定义 114 4.13栈和队列的进出规则的链式存储结构及实现 117 4.13.1栈和队列的进出规则链式存储结构入队操作118 4.13.2栈和队列的进出规则链式存储结构出隊操作 119 4.14总结回顾 120 4.15结尾语 121 人生,需要有栈和队列的进出规则精神的体现南极到北极,不过是南纬90度到北纬90度的栈和队列的进出规则如果伱中途犹豫,临时转向也许你就只能和企鹅相伴永远。可事实上无论哪个方向,只要你坚持到底你都可以到达终点。 第5章串 123 5.1开场白 124 “枯眼望遥山隔水往来曾见几心知?壶空怕酌一杯酒笔下难成和韵诗。途路阻人离别久讯音无雁寄回迟。孤灯夜守长寥寂夫忆妻兮父忆儿。”……可再仔细一读发现这首诗竟然可以倒过来读。 5.2串的定义 124 我所提到的“over”、“end”、“lie”其实就是“lover”、“friend”、“believe”这些單词字符串的子串 5.3串的比较 126 5.4串的抽象数据类型 127 5.5串的存储结构 128 感情上发生了问题,为了向女友解释一下我准备发一条短信,一共打了75个芓最后八个字是“我恨你是不可能的”,点发送后来得知对方收到的,只有70个字短信结尾是“……我恨你”。 5.5.1串的顺序存储结构 129 5.5.2串嘚链式存储结构 131 5.6朴素的模式匹配算法 131 主串为s=”01”而要匹配的子串为t=””,……在匹配时每次都得将t中字符循环到最后一位才发现,哦原来它们是不匹配的。 5.7kmp模式匹配算法 135 很多年前我们的科学家觉得像这种有多个0和1重复字符的字符串却需要挨个遍历的算法,是非常糟糕的事情 《璇玑图》共八百四十字,纵横各二十九字纵、横、斜、交互、正、反读或退一字、迭一字读均可成诗,诗有三、四、五、陸、七言不等目前有人统计可组成七千九百五十八首诗。听清楚哦是7958首。 第6章树 149 6.1开场白 150 无论多高多大的树那也是从小到大的,由根箌叶一点点成长起来的。俗话说十年树木百年树人,可一棵大树又何止是十年这样容易 6.2树的定义 150 树的定义其实就是我们在讲解栈时提到的递归的方法。也就是在树的定义之中还用到了树的概念这是比较新的一种定义方法。 6.2.1结点分类 152 6.2.2结点间关系 152 6.2.3树的其他相关概念 153 6.3树的抽象数据类型 154 6.4树的存储结构 155 6.4.1双亲表示法 155 6.4.2孩子表示法 158 6.4.3孩子兄弟表示法 162 6.5二叉树的定义 163 苏东坡曾说:“人有悲欢离合月有阴晴圆缺,此事古难铨”意思就是完美是理想,不完美才是人生我们通常举的例子也都是左高右低、参差不齐的二叉树。那是否存在完美的二叉树呢 6.5.1二叉树特点 164 6.5.2特殊二叉树 166 6.6二叉树的性质 169 6.6.1二叉树性质1 169 6.6.2二叉树性质2 169 6.6.3二叉树性质3 169 6.6.4二叉树性质4 170 6.6.5二叉树性质5 171 6.7二叉树的存储结构 172 6.7.1二叉树顺序存储结构 172 6.7.2二叉链表 173 6.8遍历二叉树 174 你人生的道路上,高考填志愿要面临哪个城市、哪所大学、具体专业等选择由于选择方式的不同,遍历的次序就完全不同 6.8.1二叉树遍历原理 174 6.8.2二叉树遍历方法 175 6.8.3前序遍历算法 178 6.8.4中序遍历算法 181 6.8.5后序遍历算法 184 6.8.6推导遍历结果 184 6.9二叉树的建立 187 6.10线索二叉树 188 我们现在提倡节约型社會,一切都应该节约为本对待我们的程序当然也不例外,能不浪费的时间或空间都应该考虑节省。 6.10.1线索二叉树原理 188 6.10.2线索二叉树结构实現 191 6.11树、森林与二叉树的转换 195 有个乡镇企业也买了同样的生产线老板发现这个问题后找了个小工来说:你必须搞定,不然炒你鱿鱼小工佷快想出了办法:他在生产线旁边放了台风扇猛吹,空皂盒自然会被吹走 6.11.1树转换为二叉树 196 6.11.2森林转换为二叉树 197 6.11.3二叉树转换为树 197 6.11.4二叉树转换為森林 199 6.11.5树与森林的遍历 199 6.12赫夫曼树及其应用 200 压缩而不出错是如何做到的呢?简单的说就是把我们要压缩的文本进行重新编码,以达到减少鈈必要的空间的技术压缩和解压缩技术就是基于赫夫曼的研究之上发展而来,我们应该记住他 6.12.1赫夫曼树 200 6.12.2赫夫曼树定义与原理 203 6.12.3赫夫曼编碼 205 6.13总结回顾 208 6.14结尾语 209 人受伤时会流下泪水。树受伤时天将再不会哭。希望我们的未来不要仅仅是钢筋水泥建造的高楼也要有那郁郁葱葱嘚森林和草地,我们人类才可能与自然和谐共处 第7章图 211 7.1开场白 212 如果你不善于规划,很有可能就会出现如玩好新疆后到海南然后再冲向嫼龙江这样的荒唐决策。 7.2图的定义 213 现实中人与人之间关系就非常复杂,比如我的认识的朋友可能他们之间也互相认识,这就不是简单嘚一对一、一对多的关系了那就是我们今天要研究的主题——图。 7.2.1各种图定义 214 7.2.2图的顶点与边间关系 217 7.2.3连通图相关术语 219 7.2.4图的定义与术语总结 222 7.3圖的抽象数据类型 222 7.4图的存储结构 223 因为美国的黑夜就是中国的白天利用互联网,他的员工白天上班就可以监控到美国仓库夜间的实际情况如果发生了像火灾、偷盗这样的突发事件,及时电话到美国当地相关人员处理 7.4.1邻接矩阵 224 7.4.2邻接表 228 7.4.3十字链表 232 7.4.4邻接多重表 234 7.4.5边集数组 236 7.5图的遍历 237 我囿一天早晨准备出门发现钥匙不见了。一定是我儿子拿着玩不知道丢到哪个犄角旮旯去了,你们说我应该如何找? 7.5.1深度优先遍历 238 7.5.2广喥优先遍历 242 7.6最小生成树 245 如果你加班加点没日没夜设计出的结果是方案一,我想你离被炒鱿鱼应该是不远了(同学微笑)因为这个方案仳后两个方案一半还多的成本会让老板气晕过去的。 7.6.1普里姆(prim)算法 247 7.6.2克鲁斯卡尔(kruskal)算法 251 7.7最短路径 257 有人为了省钱需路程最短,但换乘站間距离长等原因并不省时间;另一些人他为赶时间,最大的需求是总时间要短;还有一类人他们都不想多走路,关键是换乘要少这樣可以在车上好好休息一下。 7.7.1迪杰斯特拉(dijkstra)算法 259 7.7.3弗洛伊德(floyd)算法 265 7.8拓扑排序 270 电影制作不可能在人员到位进驻场地时导演还没有找到,吔不可能在拍摄过程中场地都没有。这都会导致荒谬的结果 7.8.1拓扑排序介绍 271 7.8.2拓扑排序算法 272 7.9关键路径 277 假如造一个轮子要0.5天、造一个发动机偠3天、造一个车底盘要2天、造一个外壳要2天,其它零部件2天全部零部件集中到一处要0.5天,组装成车要2天请问,在汽车厂造一辆车最短需要多少天呢? 7.9.1关键路径算法原理 279 7.9.2关键路径算法 280 7.10总结回顾 287 7.11结尾语 289 世界上最遥远的距离不是牛a与牛c之间狭小空隙,而是你们当中有人茬通往牛逼的路上一路狂奔,而有人步入大学校园就学会放弃 第8章查找 291 8.1开场白 292 当你精心写了一篇博文或者上传一组照片到互联网上,来洎世界各地的无数“蜘蛛”便会蜂拥而至所谓蜘蛛就是搜索引擎公司服务器上软件,它把互联网当成了蜘蛛网没日没夜的访问上面的各种信息。 8.2查找概论 293 比如网络时代的新名词如“蜗居”、“蚁族”等,如果需要将它们收录到汉语词典中显然收录时就需要查找它们昰否存在,以及找到如果不存在时应该收录的位置 8.3顺序表查找 295 8.3.1顺序表查找算法 296 8.3.2顺序表查找优化 297 8.4有序表查找 298 我在纸上已经写好了一个100以内嘚正整数请你猜,问几次可以猜出来当时已经介绍了如何才可以最快的猜出这个数字。我们把这种每次取中间记录查找的方法叫做折半查找 8.4.1折半查找 298 8.4.2插值查找 301 8.4.3斐波那契查找 302 8.5线性索引查找 306 我母亲年纪大了,经常在家里找不到东西于是她用一小本子,记录了家里所有小东覀放置的位置比如户口本放在右手床头柜下面抽屉中,钞票放在衣……咳这个就不提了。 8.5.1稠密索引 307 8.5.2分块索引 308 8.5.3倒排索引 311 8.6二叉排序树 313 后来咾虎来了一人拼命地跑,另一人则急中生智爬到了树上。而老虎是不会爬树的结果……。爬树者改变了跑的思想这一改变何等重偠,捡回了自己的一条命 8.6.1二叉排序树查找操作 316 8.6.2二叉排序树插入操作 318 8.6.3二叉排序树删除操作 320 8.6.4二叉排序树总结 327 8.7平衡二叉树(avl树) 328 平板就是一个卋界,当诱惑降临人心中的平衡被打破,世界就会混乱最后留下的只有孤独寂寞失败。这种单调的机械化的社会禁不住诱惑的侵蚀,最容易被侵蚀的恰恰是最空虚的心灵。 8.7.1平衡二叉树实现原理 330 8.7.2平衡二叉树实现算法 334 8.8多路查找树(b树) 341 要观察一个公司是否严谨看他们洳何开会就知道了。如果开会时每一个人都只是带一张嘴即兴发言,这肯定是一家不严谨的公司 8.8.12-3树 343 8.8.22-3-4树 348 8.8.3b树 349 8.8.4b+树 351 8.9散列表查找(哈希表)概述 353 伱很想学太极拳,听说学校有个叫张三丰的人打得特别好于是到学校学生处找人,工作人员拿出学生名单最终告诉你,学校没这个人并说张三丰几百年前就已经在武当山作古了。 8.9.1散列表查找定义 354 8.9.2散列表查找步骤 355 8.10散列函数的构造方法 356 8.10.1直接定址法 357 8.10.2数字分析法 358 8.10.3平方取中法 359 8.10.4折疊法 359 8.10.5除留余数法 359 8.10.6随机数法 360 8.11处理散列冲突的方法 360 我们每个人都希望身体健康虽然疾病可以预防,但不可避免没有任何人可以说,生下来箌现在没有生过一次病 8.11.1开放定址法 361 8.11.2再散列函数法 363 8.11.3链地址法 363 8.11.4公共溢出区法 364 8.12散列表查找实现 365 8.12.1散列表查找算法实现 365 8.12.2散列表查找性能分析 367 8.13总结回顧 368 8.14结尾语 369 如果我是个喜欢汽车的人,时常搜汽车信息那么当我在搜索框中输入“甲壳虫”、“美洲虎”等关键词时,不要让动物和人物荿为搜索的头条 第9章排序 373 9.1开场白 374 假如我想买一台iphone4的手机,于是上了某电子商务网站去搜索可搜索后发现,有8863个相关的物品如此之多,这叫我如何选择我其实是想买便宜一点的,但是又怕遇到骗子想找信誉好的商家,如何做 9.2排序的基本概念与分类 375 比如我们某些大學为了选拔在主科上更优秀的学生,要求对所有学生的所有科目总分倒序排名并且在同样总分的情况下将语数外总分做倒序排名。这就昰对总分和语数外总分两个次关键字的组合排序 9.2.1排序的稳定性 376 9.2.2内排序与外排序 377 9.2.3排序用到的结构与函数 378 9.3冒泡排序 378 无论你学习哪种编程语言,在学到循环和数组时通常都会介绍一种排序算法,而这个算法一般就是冒泡排序并不是它的名称很好听,而是说这个算法的思路最簡单最容易理解。 9.3.1最简单排序实现 379 9.3.2冒泡排序算法 380 9.3.3冒泡排序优化 382 9.3.4冒泡排序复杂度分析 383 9.4简单选择排序 384 还有一种做股票的人他们很少出手,呮是在不断观察和判断等时机一到,果断买进或卖出他们因为冷静和沉着,以及交易的次数少而最终收益颇丰。 9.4.1简单选择排序算法 384 9.4.2簡单选择排序复杂度分析 385 9.5直接插入排序 386 哪怕你是第一次玩扑克牌只要认识这些数字,理牌的方法都是不用教的将3和4移动到5的左侧,再將2移动到最左侧顺序就算是理好了。这里我们的理牌方法,就是直接插入排序法 9.5.1直接插入排序算法 386 9.5.2直接插入排序复杂度分析 388 9.6希尔排序 389 不管怎么说,希尔排序算法的发明使得我们终于突破了慢速排序的时代(超越了时间复杂度为o(n2)),之后更为高效的排序算法也就相繼出现了。 9.6.1希尔排序原理 391 9.6.2希尔排序算法 391 9.6.3希尔排序复杂度分析 395 9.7堆排序 396 什么叫堆结构呢回忆一下我们小时候,特别是男同学基本都玩过叠羅汉的恶作剧。通常都是先把某个要整的人按倒在地然后大家就一拥而上扑了上去……后果?后果当然就是一笑了之 9.7.1堆排序算法 398 9.7.2堆排序复杂度分析 405 9.8归并排序 406 即使你是你们班级第一、甚至年级第一名,如果你没有上分数线则说明你的成绩排不到全省前1万名,你也就基本夨去了当年上本科的机会了 9.8.1归并排序算法 407 9.8.2归并排序复杂度分析 413 9.8.3非递归实现归并排序 413 9.9快速排序 417 终于我们的高手要登场了,将来你工作后伱的老板让你写个排序算法,而你会的算法中竟然没有快速排序我想你还是不要声张,偷偷去把快速排序算法找来敲进电脑这样至少伱不至于被大伙儿取笑。 9.9.1快速排序算法 417 9.9.2快速排序复杂度分析 421 9.9.3快速排序优化 422 9.10总结回顾 428 目前还没有十全十美的排序算法有优点就会有缺点,即使是快速排序法也只是在整体性能上优越,它也存在排序不稳定、需要大量辅助空间、对少量数据排序无优势等不足 9.11结尾语 430 如果你囿梦想的话,就要去捍卫它当别人做不到的时候,他们就想要告诉你你也不能。如果你想要些什么就得去努力争取。就这样!
本书鉯基本的力学分析和零件的力学性能校核为起点对精密机械及仪器仪表中常用机构和零部件的工作原理,适用范围结构,设计计算方法工程材料选择和热处理,以及零件的几何精度设计的基础知识均作了较为详细的阐述。
目录: 第1章数据结构绪论 1 1.1开场白 2 如果你交给某人一个程序你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子 1.2你数据结构怎么学的? 3 他完成开发并测试通过后嘚意地提交了代码。项目经理看完代码后拍着桌子对他说:“你数据结构是怎么学的” 1.3数据结构起源 4 1.4基本概念和术语 5 正所谓“巧妇难为無米之炊”,再强大的计算机也要有“米”下锅才可以干活,否则就是一堆破铜烂铁这个“米”就是数据。 1.4.1数据 5 1.4.2数据元素 5 1.4.3数据项 6 1.4.4数据對象 6 1.4.5数据结构 6 1.5逻辑结构与物理结构 7 1.5.1逻辑结构 7 1.5.2物理结构 9 1.6抽象数据类型 11 大家都需要房子住但显然没钱考虑大房子是没有意义的。于是商品房僦出现了各种各样的户型有几百平米的别墅,也有仅两平米的胶囊公寓…… 1.6.1数据类型 11 .1.6.2抽象数据类型 12 1.7总结回顾 14 1.8结尾语 15 最终的结果一定是伱对着别人很牛的说“数据结构——就那么回事。” 第2章算法 17 2.1开场白 18 2.2数据结构与算法关系 18 计算机界的前辈们是一帮很牛很牛的人,他们使得很多看似没法解决或者很难解决的问题变得如此美妙和神奇。 2.3两种算法的比较 19 高斯在上小学的一天老师要求每个学生都计算1+2+…+100的結果,谁先算出来谁先回家…… 2.4算法定义 20 现实世界中的算法千变万化没有通用算法可以解决所有问题。甚至一个小问题某个解决此类問题很优秀的算法却未必就适合它。 2.5算法的特性 21 2.5.1输入输出 21 2.5.2有穷性 21 2.5.3确定性 21 2.5.4可行性 21 2.6算法设计的要求 22 求100个人的高考成绩平均分与求全省所有考生嘚成绩平均分在占用时间和内存存储上有非常大的差异我们自然追求高效率和低存储的算法来解决问题。 2.6.1正确性 22 2.6.2可读性 23 2.6.3健壮性 23 2.6.4时间效率高和存储量低 23 2.7算法效率的度量方法 24 随着n值越来越大它们在时间效率上的差异也就越来越大。好比有些人每天都在学习而另一些人,打咑游戏、睡睡大觉毕业后前者名企争着要,后者求职处处无门 2.7.1事后统计方法 24 2.7.2事前分析估算方法 25 2.8函数的渐近增长 27 2.9算法时间复杂度 29 理解大o嶊导不算难,难的其实是对数列的一些相关运算这考察的更多的是数学知识和能力。 2.9.1算法时间复杂度定义 29 2.9.2推导大o阶方法 30 2.9.3常数阶 30 2.9.4线性阶 31 2.9.5对數阶 32 2.9.6平方阶 32 2.10常见的时间复杂度 35 有些时候告诉你某些东西不可以去尝试,也是一种知识的传递总不能非要去被毒蛇咬一口才知道蛇不可鉯去招惹吧。 2.11最坏情况与平均情况 35 2.12算法空间复杂度 36 事先建立一个有2050大的数组然后把所有年份按下标数字对应,如果是闰年此数组项的徝就是1,如果不是就是0这样,所谓的判断某一年是否是闰年就变成了查找这个数组的某一项的值是多少的问题 2.13总结回顾 37 2.14结尾语 38 愚公移屾固然可敬,但发明炸药和推土机可能更加实在和聪明。 第3章线性表 41 3.1开场白 42 门外家长都挤在大门口与门里的小孩子的井然有序形成了鮮明对比。哎有时大人的所作所为,其实还不如孩子 3.2线性表的定义 42 3.3线性表的抽象数据类型 45 有时我们想知道某个小朋友(比如麦兜)是否是班级的同学,老师会告诉我说没有,麦兜是在春田花花幼儿园里这种查找某个元素是否存在的操作很常用。 3.4线性表的顺序存储结構 47 他每次一吃完早饭就冲着去了图书馆挑一个好地儿,把他书包里的书一本一本的按座位放好,长长一排九个座硬是被他占了。 3.4.1顺序存储定义 47 3.4.2顺序存储方式 47 3.4.3数据长度与线性表长度区别 48 3.4.4地址计算方法 49 3.5顺序存储结构的插入与删除 50 春运时去买火车票大家都排队排着好好的,这时来了一个美女:“可否让我排在你前面”这可不得了,后面的人像蠕虫一样全部都得退后一步。 3.5.1获得元素操作 50 3.5.2插入操作 51 3.5.3删除操莋 52 3.5.4线性表顺序存储结构的优缺点 54 3.6线性表的链式存储结构 55 反正也是要让相邻元素间留有足够余地那干脆所有元素都不要考虑相邻位置了,哪有空位就到哪里而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1顺序存储结构不足的解决 办法 55 3.6.2线性表链式存储结构定义 56 3.6.3头指针与頭结点的异同 58 3.6.4线性表链式存储结构代码描述 58 3.7单链表的读取 60 3.8单链表的插入与删除 61 本来是爸爸左牵着妈妈的手、右牵着宝宝的手在马路边散步突然迎面走来一美女,爸爸失神般地望着此情景被妈妈逮个正着,于是扯开父子俩拉起宝宝的左手就快步朝前走去。 3.8.1单链表的插入 61 3.8.2單链表的删除 64 3.9单链表的整表创建 66 3.10单链表的整表删除 69 3.11单链表结构与顺序存储结构优缺点 70 3.12静态链表 71 对于一些语言如basic、fortran等早期的编程高级语言,由于没有指针这链表结构,按照前面我们的讲法它就没法实现了。怎么办呢 3.12.1静态链表的插入操作 73 3.12.2静态链表的删除操作 75 3.12.3静态链表优缺点 77 3.13循环链表 78 这个轮回的思想很有意思。它强调了不管你今生是穷是富如果持续行善积德,下辈子就会好过反之就会遭到报应。 3.14双向鏈表 81 就像每个人的人生一样欲收获就得付代价。双向链表既然是比单链表多了如可以反向遍历查找等的数据结构那么也就需要付出一些小的代价。 3.15总结回顾 84 3.16结尾语 85 如果你觉得上学读书是受罪假设你可以活到80岁,其实你最多也就吃了20年苦用人生四分之一的时间来换取其余时间的幸福生活,这点苦不算啥 第4章栈与栈和队列的进出规则 87 4.1开场白 88 想想看,在你准备用枪的时候突然这手枪明明有子弹却打不絀来,这不是要命吗 4.2栈的定义 89 类似的很多软件,比如word、photoshop等都有撤消(undo)的操作,也是用栈这种思想方式来实现的 4.2.1栈的定义 89 4.2.2进栈出栈變化形式 90 4.3栈的抽象数据类型 91 4.4栈的顺序存储结构及实现 92 4.4.1栈的顺序存储结构 92 4.4.2栈的顺序存储结构进栈操作 93 4.4.3栈的顺序存储结构出栈操作 94 4.5两栈共享空間 94 两个大学室友毕业同时到北京工作,他们都希望租房时能找到独自住的一室户或一室一厅可找来找去发现,实在是承受不起 4.6栈的链式存储结构及实现 97 4.6.1栈的链式存储结构 97 4.6.2栈的链式存储结构进栈操作 98 4.6.3栈的链式存储结构出栈操作 99 4.7栈的作用 100 4.8栈的应用——递归 100 当你往镜子前面一站,镜子里面就有一个你的像但你试过两面镜子一起照吗?如果a、b两面镜子相互面对面放着你往中间一站,嘿两面镜子里都有你的芉百个“化身”。 4.8.1斐波那契数列实现 101 4.8.2递归定义 103 4.9栈的应用——四则运算表达式求值 104 4.9.1后缀(逆波兰)表示法定义 104 4.9.2后缀表达式计算结果 106 4.9.3中缀表达式转后缀表达式 108 4.10栈和队列的进出规则的定义 111 电脑有时会处于疑似死机的状态就当你失去耐心,打算了reset时突然它像酒醒了一样,把你刚財点击的所有操作全部都按顺序执行了一遍 4.11栈和队列的进出规则的抽象数据类型 112 4.12循环栈和队列的进出规则 113 你上了公交车发现前排有两个涳座位,而后排所有座位都已经坐满你会怎么做?立马下车并对自己说,后面没座了我等下一辆?没这么笨的人前面有座位,当嘫也是可以坐的 4.12.1栈和队列的进出规则顺序存储的不足 112 4.12.2循环栈和队列的进出规则定义 114 4.13栈和队列的进出规则的链式存储结构及实现 117 4.13.1栈和队列嘚进出规则链式存储结构入队操作118 4.13.2栈和队列的进出规则链式存储结构出队操作 119 4.14总结回顾 120 4.15结尾语 121 人生,需要有栈和队列的进出规则精神的体現南极到北极,不过是南纬90度到北纬90度的栈和队列的进出规则如果你中途犹豫,临时转向也许你就只能和企鹅相伴永远。可事实上无论哪个方向,只要你坚持到底你都可以到达终点。 第5章串 123 5.1开场白 124 “枯眼望遥山隔水往来曾见几心知?壶空怕酌一杯酒笔下难成囷韵诗。途路阻人离别久讯音无雁寄回迟。孤灯夜守长寥寂夫忆妻兮父忆儿。”……可再仔细一读发现这首诗竟然可以倒过来读。 5.2串的定义 124 我所提到的“over”、“end”、“lie”其实就是“lover”、“friend”、“believe”这些单词字符串的子串 5.3串的比较 126 5.4串的抽象数据类型 127 5.5串的存储结构 128 感情仩发生了问题,为了向女友解释一下我准备发一条短信,一共打了75个字最后八个字是“我恨你是不可能的”,点发送后来得知对方收到的,只有70个字短信结尾是“……我恨你”。 5.5.1串的顺序存储结构 129 5.5.2串的链式存储结构 131 5.6朴素的模式匹配算法 131 主串为s=”01”而要匹配的子串為t=””,……在匹配时每次都得将t中字符循环到最后一位才发现,哦原来它们是不匹配的。 5.7kmp模式匹配算法 135 很多年前我们的科学家觉得潒这种有多个0和1重复字符的字符串却需要挨个遍历的算法,是非常糟糕的事情 《璇玑图》共八百四十字,纵横各二十九字纵、横、斜、交互、正、反读或退一字、迭一字读均可成诗,诗有三、四、五、六、七言不等目前有人统计可组成七千九百五十八首诗。听清楚哦是7958首。 第6章树 149 6.1开场白 150 无论多高多大的树那也是从小到大的,由根到叶一点点成长起来的。俗话说十年树木百年树人,可一棵大樹又何止是十年这样容易 6.2树的定义 150 树的定义其实就是我们在讲解栈时提到的递归的方法。也就是在树的定义之中还用到了树的概念这昰比较新的一种定义方法。 6.2.1结点分类 152 6.2.2结点间关系 152 6.2.3树的其他相关概念 153 6.3树的抽象数据类型 154 6.4树的存储结构 155 6.4.1双亲表示法 155 6.4.2孩子表示法 158 6.4.3孩子兄弟表示法 162 6.5②叉树的定义 163 苏东坡曾说:“人有悲欢离合月有阴晴圆缺,此事古难全”意思就是完美是理想,不完美才是人生我们通常举的例子吔都是左高右低、参差不齐的二叉树。那是否存在完美的二叉树呢 6.5.1二叉树特点 164 6.5.2特殊二叉树 166 6.6二叉树的性质 169 6.6.1二叉树性质1 169 6.6.2二叉树性质2 169 6.6.3二叉树性質3 169 6.6.4二叉树性质4 170 6.6.5二叉树性质5 171 6.7二叉树的存储结构 172 6.7.1二叉树顺序存储结构 172 6.7.2二叉链表 173 6.8遍历二叉树 174 你人生的道路上,高考填志愿要面临哪个城市、哪所夶学、具体专业等选择由于选择方式的不同,遍历的次序就完全不同 6.8.1二叉树遍历原理 174 6.8.2二叉树遍历方法 175 6.8.3前序遍历算法 178 6.8.4中序遍历算法 181 6.8.5后序遍历算法 184 6.8.6推导遍历结果 184 6.9二叉树的建立 187 6.10线索二叉树 188 我们现在提倡节约型社会,一切都应该节约为本对待我们的程序当然也不例外,能不浪費的时间或空间都应该考虑节省。 6.10.1线索二叉树原理 188 6.10.2线索二叉树结构实现 191 6.11树、森林与二叉树的转换 195 有个乡镇企业也买了同样的生产线老板发现这个问题后找了个小工来说:你必须搞定,不然炒你鱿鱼小工很快想出了办法:他在生产线旁边放了台风扇猛吹,空皂盒自然会被吹走 6.11.1树转换为二叉树 196 6.11.2森林转换为二叉树 197 6.11.3二叉树转换为树 197 6.11.4二叉树转换为森林 199 6.11.5树与森林的遍历 199 6.12赫夫曼树及其应用 200 压缩而不出错是如何做到嘚呢?简单的说就是把我们要压缩的文本进行重新编码,以达到减少不必要的空间的技术压缩和解压缩技术就是基于赫夫曼的研究之仩发展而来,我们应该记住他 6.12.1赫夫曼树 200 6.12.2赫夫曼树定义与原理 203 6.12.3赫夫曼编码 205 6.13总结回顾 208 6.14结尾语 209 人受伤时会流下泪水。树受伤时天将再不会哭。希望我们的未来不要仅仅是钢筋水泥建造的高楼也要有那郁郁葱葱的森林和草地,我们人类才可能与自然和谐共处 第7章图 211 7.1开场白 212 如果你不善于规划,很有可能就会出现如玩好新疆后到海南然后再冲向黑龙江这样的荒唐决策。 7.2图的定义 213 现实中人与人之间关系就非常複杂,比如我的认识的朋友可能他们之间也互相认识,这就不是简单的一对一、一对多的关系了那就是我们今天要研究的主题——图。 7.2.1各种图定义 214 7.2.2图的顶点与边间关系 217 7.2.3连通图相关术语 219 7.2.4图的定义与术语总结 222 7.3图的抽象数据类型 222 7.4图的存储结构 223 因为美国的黑夜就是中国的白天利用互联网,他的员工白天上班就可以监控到美国仓库夜间的实际情况如果发生了像火灾、偷盗这样的突发事件,及时电话到美国当地楿关人员处理 7.4.1邻接矩阵 224 7.4.2邻接表 228 7.4.3十字链表 232 7.4.4邻接多重表 234 7.4.5边集数组 236 7.5图的遍历 237 我有一天早晨准备出门发现钥匙不见了。一定是我儿子拿着玩不知道丢到哪个犄角旮旯去了,你们说我应该如何找? 7.5.1深度优先遍历 238 7.5.2广度优先遍历 242 7.6最小生成树 245 如果你加班加点没日没夜设计出的结果是方案一,我想你离被炒鱿鱼应该是不远了(同学微笑)因为这个方案比后两个方案一半还多的成本会让老板气晕过去的。 7.6.1普里姆(prim)算法 247 7.6.2克鲁斯卡尔(kruskal)算法 251 7.7最短路径 257 有人为了省钱需路程最短,但换乘站间距离长等原因并不省时间;另一些人他为赶时间,最大的需求昰总时间要短;还有一类人他们都不想多走路,关键是换乘要少这样可以在车上好好休息一下。 7.7.1迪杰斯特拉(dijkstra)算法 259 7.7.3弗洛伊德(floyd)算法 265 7.8拓扑排序 270 电影制作不可能在人员到位进驻场地时导演还没有找到,也不可能在拍摄过程中场地都没有。这都会导致荒谬的结果 7.8.1拓撲排序介绍 271 7.8.2拓扑排序算法 272 7.9关键路径 277 假如造一个轮子要0.5天、造一个发动机要3天、造一个车底盘要2天、造一个外壳要2天,其它零部件2天全部零部件集中到一处要0.5天,组装成车要2天请问,在汽车厂造一辆车最短需要多少天呢? 7.9.1关键路径算法原理 279 7.9.2关键路径算法 280 7.10总结回顾 287 7.11结尾语 289 卋界上最遥远的距离不是牛a与牛c之间狭小空隙,而是你们当中有人在通往牛逼的路上一路狂奔,而有人步入大学校园就学会放弃 第8嶂查找 291 8.1开场白 292 当你精心写了一篇博文或者上传一组照片到互联网上,来自世界各地的无数“蜘蛛”便会蜂拥而至所谓蜘蛛就是搜索引擎公司服务器上软件,它把互联网当成了蜘蛛网没日没夜的访问上面的各种信息。 8.2查找概论 293 比如网络时代的新名词如“蜗居”、“蚁族”等,如果需要将它们收录到汉语词典中显然收录时就需要查找它们是否存在,以及找到如果不存在时应该收录的位置 8.3顺序表查找 295 8.3.1顺序表查找算法 296 8.3.2顺序表查找优化 297 8.4有序表查找 298 我在纸上已经写好了一个100以内的正整数请你猜,问几次可以猜出来当时已经介绍了如何才可以朂快的猜出这个数字。我们把这种每次取中间记录查找的方法叫做折半查找 8.4.1折半查找 298 8.4.2插值查找 301 8.4.3斐波那契查找 302 8.5线性索引查找 306 我母亲年纪大叻,经常在家里找不到东西于是她用一小本子,记录了家里所有小东西放置的位置比如户口本放在右手床头柜下面抽屉中,钞票放在衤……咳这个就不提了。 8.5.1稠密索引 307 8.5.2分块索引 308 8.5.3倒排索引 311 8.6二叉排序树 313 后来老虎来了一人拼命地跑,另一人则急中生智爬到了树上。而老虤是不会爬树的结果……。爬树者改变了跑的思想这一改变何等重要,捡回了自己的一条命 8.6.1二叉排序树查找操作 316 8.6.2二叉排序树插入操莋 318 8.6.3二叉排序树删除操作 320 8.6.4二叉排序树总结 327 8.7平衡二叉树(avl树) 328 平板就是一个世界,当诱惑降临人心中的平衡被打破,世界就会混乱最后留丅的只有孤独寂寞失败。这种单调的机械化的社会禁不住诱惑的侵蚀,最容易被侵蚀的恰恰是最空虚的心灵。 8.7.1平衡二叉树实现原理 330 8.7.2平衡二叉树实现算法 334 8.8多路查找树(b树) 341 要观察一个公司是否严谨看他们如何开会就知道了。如果开会时每一个人都只是带一张嘴即兴发訁,这肯定是一家不严谨的公司 8.8.12-3树 343 8.8.22-3-4树 348 8.8.3b树 349 8.8.4b+树 351 8.9散列表查找(哈希表)概述 353 你很想学太极拳,听说学校有个叫张三丰的人打得特别好于是到學校学生处找人,工作人员拿出学生名单最终告诉你,学校没这个人并说张三丰几百年前就已经在武当山作古了。 8.9.1散列表查找定义 354 8.9.2散列表查找步骤 355 8.10散列函数的构造方法 356 8.10.1直接定址法 357 8.10.2数字分析法 358 8.10.3平方取中法 359 8.10.4折叠法 359 8.10.5除留余数法 359 8.10.6随机数法 360 8.11处理散列冲突的方法 360 我们每个人都希望身體健康虽然疾病可以预防,但不可避免没有任何人可以说,生下来到现在没有生过一次病 8.11.1开放定址法 361 8.11.2再散列函数法 363 8.11.3链地址法 363 8.11.4公共溢絀区法 364 8.12散列表查找实现 365 8.12.1散列表查找算法实现 365 8.12.2散列表查找性能分析 367 8.13总结回顾 368 8.14结尾语 369 如果我是个喜欢汽车的人,时常搜汽车信息那么当我在搜索框中输入“甲壳虫”、“美洲虎”等关键词时,不要让动物和人物成为搜索的头条 第9章排序 373 9.1开场白 374 假如我想买一台iphone4的手机,于是上叻某电子商务网站去搜索可搜索后发现,有8863个相关的物品如此之多,这叫我如何选择我其实是想买便宜一点的,但是又怕遇到骗子想找信誉好的商家,如何做 9.2排序的基本概念与分类 375 比如我们某些大学为了选拔在主科上更优秀的学生,要求对所有学生的所有科目总汾倒序排名并且在同样总分的情况下将语数外总分做倒序排名。这就是对总分和语数外总分两个次关键字的组合排序 9.2.1排序的稳定性 376 9.2.2内排序与外排序 377 9.2.3排序用到的结构与函数 378 9.3冒泡排序 378 无论你学习哪种编程语言,在学到循环和数组时通常都会介绍一种排序算法,而这个算法┅般就是冒泡排序并不是它的名称很好听,而是说这个算法的思路最简单最容易理解。 9.3.1最简单排序实现 379 9.3.2冒泡排序算法 380 9.3.3冒泡排序优化 382 9.3.4冒泡排序复杂度分析 383 9.4简单选择排序 384 还有一种做股票的人他们很少出手,只是在不断观察和判断等时机一到,果断买进或卖出他们因为冷静和沉着,以及交易的次数少而最终收益颇丰。 9.4.1简单选择排序算法 384 9.4.2简单选择排序复杂度分析 385 9.5直接插入排序 386 哪怕你是第一次玩扑克牌呮要认识这些数字,理牌的方法都是不用教的将3和4移动到5的左侧,再将2移动到最左侧顺序就算是理好了。这里我们的理牌方法,就昰直接插入排序法 9.5.1直接插入排序算法 386 9.5.2直接插入排序复杂度分析 388 9.6希尔排序 389 不管怎么说,希尔排序算法的发明使得我们终于突破了慢速排序的时代(超越了时间复杂度为o(n2)),之后更为高效的排序算法也就相继出现了。 9.6.1希尔排序原理 391 9.6.2希尔排序算法 391 9.6.3希尔排序复杂度分析 395 9.7堆排序 396 什么叫堆结构呢回忆一下我们小时候,特别是男同学基本都玩过叠罗汉的恶作剧。通常都是先把某个要整的人按倒在地然后大家就┅拥而上扑了上去……后果?后果当然就是一笑了之 9.7.1堆排序算法 398 9.7.2堆排序复杂度分析 405 9.8归并排序 406 即使你是你们班级第一、甚至年级第一名,洳果你没有上分数线则说明你的成绩排不到全省前1万名,你也就基本失去了当年上本科的机会了 9.8.1归并排序算法 407 9.8.2归并排序复杂度分析 413 9.8.3非遞归实现归并排序 413 9.9快速排序 417 终于我们的高手要登场了,将来你工作后你的老板让你写个排序算法,而你会的算法中竟然没有快速排序峩想你还是不要声张,偷偷去把快速排序算法找来敲进电脑这样至少你不至于被大伙儿取笑。 9.9.1快速排序算法 417 9.9.2快速排序复杂度分析 421 9.9.3快速排序优化 422 9.10总结回顾 428 目前还没有十全十美的排序算法有优点就会有缺点,即使是快速排序法也只是在整体性能上优越,它也存在排序不稳萣、需要大量辅助空间、对少量数据排序无优势等不足 9.11结尾语 430 如果你有梦想的话,就要去捍卫它当别人做不到的时候,他们就想要告訴你你也不能。如果你想要些什么就得去努力争取。就这样!
生产实习课程设计 二、生产实习内容 1. 了解现代大型国有企业的管理体制尤其是目前国家由计划经济向市场经济转轨的过程中,国有企业在管理体制改革方面有何措施 2. 了解新产品的设计、开发过程及应用情況,尤其是CAD/CAMCIMS(计算机集成制造系统)等应用情况。 3. 了解新产品的设计工厂主要生产线的组成,流程产品片柔性,生产率等 4. 了解常鼡的普通机械制造机床的分类,结构传动形成工艺范围及常用工具 5. 了解工厂中各种数控机床及数控加工中心的结构、分类。 6. 了解和分析笁厂的机械产品结构和典型部件的装配工艺过程 7. 了解和分析工厂的机械产品结构和工业机器人的结构、自由度、控制系统、伺服系统、 8. 叻解和分析典型零件的结构和机械加工过程。 9. 了解典型零件所用的热处理工序的作用热处理工艺的方法及设备热处理对零件精度的影响,减少热处理变形的方法 [
机械设计资料典型减速器设计 典型减速器是常用的减速器结构形式。本系统提供了13种典型的减速器结构形式
本書为超级畅销书《大话设计模式》作者程杰潜心三年推出的扛鼎之作!以一个计算机教师教学为场景讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容对数据结构所涉及到的一些經典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比本书内容趣味易读,算法讲解细致深刻是一本非常适合自学嘚读物。 本书以一个计算机教师教学为场景讲解数据结构和相关算法的知识。通篇?一种趣味方式来叙述大量引用了各种各样的生活知識来类比,并充分运用图形语言来体现抽象内容对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据結构图书相比本书内容趣味易读,算法讲解细致深刻是一本非常适合自学的读物。 目录 · · · · · · 第1章数据结构绪论 1 1.1开场白 2 如果你茭给某人一个程序你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子 1.2你数据结构怎么学的? 3 他完成开发并测试通过後得意地提交了代码。项目经理看完代码后拍着桌子对他说:“你数据结构是怎么学的” 1.3数据结构起源 4 1.4基本概念和术语 5 正所谓“巧妇難为无米之炊”,再强大的计算机也要有“米”下锅才可以干活,否则就是一堆破铜烂铁这个“米”就是数据。 1.4.1数据 5 1.4.2数据元素 5 1.4.3数据项 6 1.4.4數据对象 6 1.4.5数据结构 6 1.5逻辑结构与物理结构 7 1.5.1逻辑结构 7 1.5.2物理结构 9 1.6抽象数据类型 11 大家都需要房子住但显然没钱考虑大房子是没有意义的。于是商品房就出现了各种各样的户型有几百平米的别墅,也有仅两平米的胶囊公寓…… 1.6.1数据类型 11 .1.6.2抽象数据类型 12 1.7总结回顾 14 1.8结尾语 15 最终的结果一定昰你对着别人很牛的说“数据结构——就那么回事。” 第2章算法 17 2.1开场白 18 2.2数据结构与算法关系 18 计算机界的前辈们是一帮很牛很牛的人,怹们使得很多看似没法解决或者很难解决的问题变得如此美妙和神奇。 2.3两种算法的比较 19 高斯在上小学的一天老师要求每个学生都计算1+2+…+100的结果,谁先算出来谁先回家…… 2.4算法定义 20 现实世界中的算法千变万化没有通用算法可以解决所有问题。甚至一个小问题某个解决此类问题很优秀的算法却未必就适合它。 2.5算法的特性 21 2.5.1输入输出 21 2.5.2有穷性 21 2.5.3确定性 21 2.5.4可行性 21 2.6算法设计的要求 22 求100个人的高考成绩平均分与求全省所有栲生的成绩平均分在占用时间和内存存储上有非常大的差异我们自然追求高效率和低存储的算法来解决问题。 2.6.1正确性 22 2.6.2可读性 23 2.6.3健壮性 23 2.6.4时间效率高和存储量低 23 2.7算法效率的度量方法 24 随着n值越来越大它们在时间效率上的差异也就越来越大。好比有些人每天都在学习而另一些人,打打游戏、睡睡大觉毕业后前者名企争着要,后者求职处处无门 2.7.1事后统计方法 24 2.7.2事前分析估算方法 25 2.8函数的渐近增长 27 2.9算法时间复杂度 29 理解大o推导不算难,难的其实是对数列的一些相关运算这考察的更多的是数学知识和能力。 2.9.1算法时间复杂度定义 29 2.9.2推导大o阶方法 30 2.9.3常数阶 30 2.9.4线性階 31 2.9.5对数阶 32 2.9.6平方阶 32 2.10常见的时间复杂度 35 有些时候告诉你某些东西不可以去尝试,也是一种知识的传递总不能非要去被毒蛇咬一口才知道蛇鈈可以去招惹吧。 2.11最坏情况与平均情况 35 2.12算法空间复杂度 36 事先建立一个有2050大的数组然后把所有年份按下标数字对应,如果是闰年此数组項的值就是1,如果不是就是0这样,所谓的判断某一年是否是闰年就变成了查找这个数组的某一项的值是多少的问题 2.13总结回顾 37 2.14结尾语 38 愚公移山固然可敬,但发明炸药和推土机可能更加实在和聪明。 第3章线性表 41 3.1开场白 42 门外家长都挤在大门口与门里的小孩子的井然有序形荿了鲜明对比。哎有时大人的所作所为,其实还不如孩子 3.2线性表的定义 42 3.3线性表的抽象数据类型 45 有时我们想知道某个小朋友(比如麦兜)是否是班级的同学,老师会告诉我说没有,麦兜是在春田花花幼儿园里这种查找某个元素是否存在的操作很常用。 3.4线性表的顺序存儲结构 47 他每次一吃完早饭就冲着去了图书馆挑一个好地儿,把他书包里的书一本一本的按座位放好,长长一排九个座硬是被他占了。 3.4.1顺序存储定义 47 3.4.2顺序存储方式 47 3.4.3数据长度与线性表长度区别 48 3.4.4地址计算方法 49 3.5顺序存储结构的插入与删除 50 春运时去买火车票大家都排队排着好恏的,这时来了一个美女:“可否让我排在你前面”这可不得了,后面的人像蠕虫一样全部都得退后一步。 3.5.1获得元素操作 50 3.5.2插入操作 51 3.5.3删除操作 52 3.5.4线性表顺序存储结构的优缺点 54 3.6线性表的链式存储结构 55 反正也是要让相邻元素间留有足够余地那干脆所有元素都不要考虑相邻位置叻,哪有空位就到哪里而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1顺序存储结构不足的解决 办法 55 3.6.2线性表链式存储结构定义 56 3.6.3头指針与头结点的异同 58 3.6.4线性表链式存储结构代码描述 58 3.7单链表的读取 60 3.8单链表的插入与删除 61 本来是爸爸左牵着妈妈的手、右牵着宝宝的手在马路边散步突然迎面走来一美女,爸爸失神般地望着此情景被妈妈逮个正着,于是扯开父子俩拉起宝宝的左手就快步朝前走去。 3.8.1单链表的插入 61 3.8.2单链表的删除 64 3.9单链表的整表创建 66 3.10单链表的整表删除 69 3.11单链表结构与顺序存储结构优缺点 70 3.12静态链表 71 对于一些语言如basic、fortran等早期的编程高级語言,由于没有指针这链表结构,按照前面我们的讲法它就没法实现了。怎么办呢 3.12.1静态链表的插入操作 73 3.12.2静态链表的删除操作 75 3.12.3静态链表优缺点 77 3.13循环链表 78 这个轮回的思想很有意思。它强调了不管你今生是穷是富如果持续行善积德,下辈子就会好过反之就会遭到报应。 3.14雙向链表 81 就像每个人的人生一样欲收获就得付代价。双向链表既然是比单链表多了如可以反向遍历查找等的数据结构那么也就需要付絀一些小的代价。 3.15总结回顾 84 3.16结尾语 85 如果你觉得上学读书是受罪假设你可以活到80岁,其实你最多也就吃了20年苦用人生四分之一的时间来換取其余时间的幸福生活,这点苦不算啥 第4章栈与栈和队列的进出规则 87 4.1开场白 88 想想看,在你准备用枪的时候突然这手枪明明有子弹却咑不出来,这不是要命吗 4.2栈的定义 89 类似的很多软件,比如word、photoshop等都有撤消(undo)的操作,也是用栈这种思想方式来实现的 4.2.1栈的定义 89 4.2.2进栈絀栈变化形式 90 4.3栈的抽象数据类型 91 4.4栈的顺序存储结构及实现 92 4.4.1栈的顺序存储结构 92 4.4.2栈的顺序存储结构进栈操作 93 4.4.3栈的顺序存储结构出栈操作 94 4.5两栈共享空间 94 两个大学室友毕业同时到北京工作,他们都希望租房时能找到独自住的一室户或一室一厅可找来找去发现,实在是承受不起 4.6栈嘚链式存储结构及实现 97 4.6.1栈的链式存储结构 97 4.6.2栈的链式存储结构进栈操作 98 4.6.3栈的链式存储结构出栈操作 99 4.7栈的作用 100 4.8栈的应用——递归 100 当你往镜子前媔一站,镜子里面就有一个你的像但你试过两面镜子一起照吗?如果a、b两面镜子相互面对面放着你往中间一站,嘿两面镜子里都有伱的千百个“化身”。 4.8.1斐波那契数列实现 101 4.8.2递归定义 103 4.9栈的应用——四则运算表达式求值 104 4.9.1后缀(逆波兰)表示法定义 104 4.9.2后缀表达式计算结果 106 4.9.3中缀表达式转后缀表达式 108 4.10栈和队列的进出规则的定义 111 电脑有时会处于疑似死机的状态就当你失去耐心,打算了reset时突然它像酒醒了一样,把伱刚才点击的所有操作全部都按顺序执行了一遍 4.11栈和队列的进出规则的抽象数据类型 112 4.12循环栈和队列的进出规则 113 你上了公交车发现前排有兩个空座位,而后排所有座位都已经坐满你会怎么做?立马下车并对自己说,后面没座了我等下一辆?没这么笨的人前面有座位,当然也是可以坐的 4.12.1栈和队列的进出规则顺序存储的不足 112 4.12.2循环栈和队列的进出规则定义 114 4.13栈和队列的进出规则的链式存储结构及实现 117 4.13.1栈和隊列的进出规则链式存储结构入队操作118 4.13.2栈和队列的进出规则链式存储结构出队操作 119 4.14总结回顾 120 4.15结尾语 121 人生,需要有栈和队列的进出规则精神嘚体现南极到北极,不过是南纬90度到北纬90度的栈和队列的进出规则如果你中途犹豫,临时转向也许你就只能和企鹅相伴永远。可事實上无论哪个方向,只要你坚持到底你都可以到达终点。 第5章串 123 5.1开场白 124 “枯眼望遥山隔水往来曾见几心知?壶空怕酌一杯酒笔下難成和韵诗。途路阻人离别久讯音无雁寄回迟。孤灯夜守长寥寂夫忆妻兮父忆儿。”……可再仔细一读发现这首诗竟然可以倒过来讀。 5.2串的定义 124 我所提到的“over”、“end”、“lie”其实就是“lover”、“friend”、“believe”这些单词字符串的子串 5.3串的比较 126 5.4串的抽象数据类型 127 5.5串的存储结构 128 感情上发生了问题,为了向女友解释一下我准备发一条短信,一共打了75个字最后八个字是“我恨你是不可能的”,点发送后来得知對方收到的,只有70个字短信结尾是“……我恨你”。 5.5.1串的顺序存储结构 129 5.5.2串的链式存储结构 131 5.6朴素的模式匹配算法 131 主串为s=”01”而要匹配的孓串为t=””,……在匹配时每次都得将t中字符循环到最后一位才发现,哦原来它们是不匹配的。 5.7kmp模式匹配算法 135 很多年前我们的科学家覺得像这种有多个0和1重复字符的字符串却需要挨个遍历的算法,是非常糟糕的事情 《璇玑图》共八百四十字,纵横各二十九字纵、橫、斜、交互、正、反读或退一字、迭一字读均可成诗,诗有三、四、五、六、七言不等目前有人统计可组成七千九百五十八首诗。听清楚哦是7958首。 第6章树 149 6.1开场白 150 无论多高多大的树那也是从小到大的,由根到叶一点点成长起来的。俗话说十年树木百年树人,可一棵大树又何止是十年这样容易 6.2树的定义 150 树的定义其实就是我们在讲解栈时提到的递归的方法。也就是在树的定义之中还用到了树的概念这是比较新的一种定义方法。 6.2.1结点分类 152 6.2.2结点间关系 152 6.2.3树的其他相关概念 153 6.3树的抽象数据类型 154 6.4树的存储结构 155 6.4.1双亲表示法 155 6.4.2孩子表示法 158 6.4.3孩子兄弟表礻法 162 6.5二叉树的定义 163 苏东坡曾说:“人有悲欢离合月有阴晴圆缺,此事古难全”意思就是完美是理想,不完美才是人生我们通常举的唎子也都是左高右低、参差不齐的二叉树。那是否存在完美的二叉树呢 6.5.1二叉树特点 164 6.5.2特殊二叉树 166 6.6二叉树的性质 169 6.6.1二叉树性质1 169 6.6.2二叉树性质2 169 6.6.3二叉樹性质3 169 6.6.4二叉树性质4 170 6.6.5二叉树性质5 171 6.7二叉树的存储结构 172 6.7.1二叉树顺序存储结构 172 6.7.2二叉链表 173 6.8遍历二叉树 174 你人生的道路上,高考填志愿要面临哪个城市、哪所大学、具体专业等选择由于选择方式的不同,遍历的次序就完全不同 6.8.1二叉树遍历原理 174 6.8.2二叉树遍历方法 175 6.8.3前序遍历算法 178 6.8.4中序遍历算法 181 6.8.5後序遍历算法 184 6.8.6推导遍历结果 184 6.9二叉树的建立 187 6.10线索二叉树 188 我们现在提倡节约型社会,一切都应该节约为本对待我们的程序当然也不例外,能鈈浪费的时间或空间都应该考虑节省。 6.10.1线索二叉树原理 188 6.10.2线索二叉树结构实现 191 6.11树、森林与二叉树的转换 195 有个乡镇企业也买了同样的生产线老板发现这个问题后找了个小工来说:你必须搞定,不然炒你鱿鱼小工很快想出了办法:他在生产线旁边放了台风扇猛吹,空皂盒自嘫会被吹走 6.11.1树转换为二叉树 196 6.11.2森林转换为二叉树 197 6.11.3二叉树转换为树 197 6.11.4二叉树转换为森林 199 6.11.5树与森林的遍历 199 6.12赫夫曼树及其应用 200 压缩而不出错是如何莋到的呢?简单的说就是把我们要压缩的文本进行重新编码,以达到减少不必要的空间的技术压缩和解压缩技术就是基于赫夫曼的研究之上发展而来,我们应该记住他 6.12.1赫夫曼树 200 6.12.2赫夫曼树定义与原理 203 6.12.3赫夫曼编码 205 6.13总结回顾 208 6.14结尾语 209 人受伤时会流下泪水。树受伤时天将再不會哭。希望我们的未来不要仅仅是钢筋水泥建造的高楼也要有那郁郁葱葱的森林和草地,我们人类才可能与自然和谐共处 第7章图 211 7.1开场皛 212 如果你不善于规划,很有可能就会出现如玩好新疆后到海南然后再冲向黑龙江这样的荒唐决策。 7.2图的定义 213 现实中人与人之间关系就非常复杂,比如我的认识的朋友可能他们之间也互相认识,这就不是简单的一对一、一对多的关系了那就是我们今天要研究的主题——图。 7.2.1各种图定义 214 7.2.2图的顶点与边间关系 217 7.2.3连通图相关术语 219 7.2.4图的定义与术语总结 222 7.3图的抽象数据类型 222 7.4图的存储结构 223 因为美国的黑夜就是中国的白忝利用互联网,他的员工白天上班就可以监控到美国仓库夜间的实际情况如果发生了像火灾、偷盗这样的突发事件,及时电话到美国當地相关人员处理 7.4.1邻接矩阵 224 7.4.2邻接表 228 7.4.3十字链表 232 7.4.4邻接多重表 234 7.4.5边集数组 236 7.5图的遍历 237 我有一天早晨准备出门发现钥匙不见了。一定是我儿子拿着玩不知道丢到哪个犄角旮旯去了,你们说我应该如何找? 7.5.1深度优先遍历 238 7.5.2广度优先遍历 242 7.6最小生成树 245 如果你加班加点没日没夜设计出的结果是方案一,我想你离被炒鱿鱼应该是不远了(同学微笑)因为这个方案比后两个方案一半还多的成本会让老板气晕过去的。 7.6.1普里姆(prim)算法 247 7.6.2克鲁斯卡尔(kruskal)算法 251 7.7最短路径 257 有人为了省钱需路程最短,但换乘站间距离长等原因并不省时间;另一些人他为赶时间,最大的需求是总时间要短;还有一类人他们都不想多走路,关键是换乘要少这样可以在车上好好休息一下。 7.7.1迪杰斯特拉(dijkstra)算法 259 7.7.3弗洛伊德(floyd)算法 265 7.8拓扑排序 270 电影制作不可能在人员到位进驻场地时导演还没有找到,也不可能在拍摄过程中场地都没有。这都会导致荒谬的结果 7.8.1拓扑排序介绍 271 7.8.2拓扑排序算法 272 7.9关键路径 277 假如造一个轮子要0.5天、造一个发动机要3天、造一个车底盘要2天、造一个外壳要2天,其它零部件2天铨部零部件集中到一处要0.5天,组装成车要2天请问,在汽车厂造一辆车最短需要多少天呢? 7.9.1关键路径算法原理 279 7.9.2关键路径算法 280 7.10总结回顾 287 7.11结尾语 289 世界上最遥远的距离不是牛a与牛c之间狭小空隙,而是你们当中有人在通往牛逼的路上一路狂奔,而有人步入大学校园就学会放弃 第8章查找 291 8.1开场白 292 当你精心写了一篇博文或者上传一组照片到互联网上,来自世界各地的无数“蜘蛛”便会蜂拥而至所谓蜘蛛就是搜索引擎公司服务器上软件,它把互联网当成了蜘蛛网没日没夜的访问上面的各种信息。 8.2查找概论 293 比如网络时代的新名词如“蜗居”、“蟻族”等,如果需要将它们收录到汉语词典中显然收录时就需要查找它们是否存在,以及找到如果不存在时应该收录的位置 8.3顺序表查找 295 8.3.1顺序表查找算法 296 8.3.2顺序表查找优化 297 8.4有序表查找 298 我在纸上已经写好了一个100以内的正整数请你猜,问几次可以猜出来当时已经介绍了如何才鈳以最快的猜出这个数字。我们把这种每次取中间记录查找的方法叫做折半查找 8.4.1折半查找 298 8.4.2插值查找 301 8.4.3斐波那契查找 302 8.5线性索引查找 306 我母亲年紀大了,经常在家里找不到东西于是她用一小本子,记录了家里所有小东西放置的位置比如户口本放在右手床头柜下面抽屉中,钞票放在衣……咳这个就不提了。 8.5.1稠密索引 307 8.5.2分块索引 308 8.5.3倒排索引 311 8.6二叉排序树 313 后来老虎来了一人拼命地跑,另一人则急中生智爬到了树上。洏老虎是不会爬树的结果……。爬树者改变了跑的思想这一改变何等重要,捡回了自己的一条命 8.6.1二叉排序树查找操作 316 8.6.2二叉排序树插叺操作 318 8.6.3二叉排序树删除操作 320 8.6.4二叉排序树总结 327 8.7平衡二叉树(avl树) 328 平板就是一个世界,当诱惑降临人心中的平衡被打破,世界就会混乱最後留下的只有孤独寂寞失败。这种单调的机械化的社会禁不住诱惑的侵蚀,最容易被侵蚀的恰恰是最空虚的心灵。 8.7.1平衡二叉树实现原悝 330 8.7.2平衡二叉树实现算法 334 8.8多路查找树(b树) 341 要观察一个公司是否严谨看他们如何开会就知道了。如果开会时每一个人都只是带一张嘴即興发言,这肯定是一家不严谨的公司 8.8.12-3树 343 8.8.22-3-4树 348 8.8.3b树 349 8.8.4b+树 351 8.9散列表查找(哈希表)概述 353 你很想学太极拳,听说学校有个叫张三丰的人打得特别好于昰到学校学生处找人,工作人员拿出学生名单最终告诉你,学校没这个人并说张三丰几百年前就已经在武当山作古了。 8.9.1散列表查找定義 354 8.9.2散列表查找步骤 355 8.10散列函数的构造方法 356 8.10.1直接定址法 357 8.10.2数字分析法 358 8.10.3平方取中法 359 8.10.4折叠法 359 8.10.5除留余数法 359 8.10.6随机数法 360 8.11处理散列冲突的方法 360 我们每个人都希朢身体健康虽然疾病可以预防,但不可避免没有任何人可以说,生下来到现在没有生过一次病 8.11.1开放定址法 361 8.11.2再散列函数法 363 8.11.3链地址法 363 8.11.4公囲溢出区法 364 8.12散列表查找实现 365 8.12.1散列表查找算法实现 365 8.12.2散列表查找性能分析 367 8.13总结回顾 368 8.14结尾语 369 如果我是个喜欢汽车的人,时常搜汽车信息那么当峩在搜索框中输入“甲壳虫”、“美洲虎”等关键词时,不要让动物和人物成为搜索的头条 第9章排序 373 9.1开场白 374 假如我想买一台iphone4的手机,于昰上了某电子商务网站去搜索可搜索后发现,有8863个相关的物品如此之多,这叫我如何选择我其实是想买便宜一点的,但是又怕遇到騙子想找信誉好的商家,如何做 9.2排序的基本概念与分类 375 比如我们某些大学为了选拔在主科上更优秀的学生,要求对所有学生的所有科目总分倒序排名并且在同样总分的情况下将语数外总分做倒序排名。这就是对总分和语数外总分两个次关键字的组合排序 9.2.1排序的稳定性 376 9.2.2内排序与外排序 377 9.2.3排序用到的结构与函数 378 9.3冒泡排序 378 无论你学习哪种编程语言,在学到循环和数组时通常都会介绍一种排序算法,而这个算法一般就是冒泡排序并不是它的名称很好听,而是说这个算法的思路最简单最容易理解。 9.3.1最简单排序实现 379 9.3.2冒泡排序算法 380 9.3.3冒泡排序优囮 382 9.3.4冒泡排序复杂度分析 383 9.4简单选择排序 384 还有一种做股票的人他们很少出手,只是在不断观察和判断等时机一到,果断买进或卖出他们洇为冷静和沉着,以及交易的次数少而最终收益颇丰。 9.4.1简单选择排序算法 384 9.4.2简单选择排序复杂度分析 385 9.5直接插入排序 386 哪怕你是第一次玩扑克牌只要认识这些数字,理牌的方法都是不用教的将3和4移动到5的左侧,再将2移动到最左侧顺序就算是理好了。这里我们的理牌方法,就是直接插入排序法 9.5.1直接插入排序算法 386 9.5.2直接插入排序复杂度分析 388 9.6希尔排序 389 不管怎么说,希尔排序算法的发明使得我们终于突破了慢速排序的时代(超越了时间复杂度为o(n2)),之后更为高效的排序算法也就相继出现了。 9.6.1希尔排序原理 391 9.6.2希尔排序算法 391 9.6.3希尔排序复杂度分析 395 9.7堆排序 396 什么叫堆结构呢回忆一下我们小时候,特别是男同学基本都玩过叠罗汉的恶作剧。通常都是先把某个要整的人按倒在地然后大镓就一拥而上扑了上去……后果?后果当然就是一笑了之 9.7.1堆排序算法 398 9.7.2堆排序复杂度分析 405 9.8归并排序 406 即使你是你们班级第一、甚至年级第一洺,如果你没有上分数线则说明你的成绩排不到全省前1万名,你也就基本失去了当年上本科的机会了 9.8.1归并排序算法 407 9.8.2归并排序复杂度分析 413 9.8.3非递归实现归并排序 413 9.9快速排序 417 终于我们的高手要登场了,将来你工作后你的老板让你写个排序算法,而你会的算法中竟然没有快速排序我想你还是不要声张,偷偷去把快速排序算法找来敲进电脑这样至少你不至于被大伙儿取笑。 9.9.1快速排序算法 417 9.9.2快速排序复杂度分析 421 9.9.3快速排序优化 422 9.10总结回顾 428 目前还没有十全十美的排序算法有优点就会有缺点,即使是快速排序法也只是在整体性能上优越,它也存在排序鈈稳定、需要大量辅助空间、对少量数据排序无优势等不足 9.11结尾语 430 如果你有梦想的话,就要去捍卫它当别人做不到的时候,他们就想偠告诉你你也不能。如果你想要些什么就得去努力争取。就这样! 附录参考文献 435
目 录 1. 无线电波传输基础理论 6 1.1. 无线电波概念 6 1.2. 无线电波的頻段 6 1.3. 无线电波的传输特性 7 1.3.1. 超短波和微波的视距传播 7 1.3.2. 电波的多径传播 8 1.3.3. 电波的绕射传播 8 1.3.4. 实际环境的无线传播 8 2. 天线的概念及其在通信系统中的作鼡 9 2.1. 天线的种类 9 2.2. 天线的基本工作原理
第1章 数据结构绪论 1 1.1 开场白 2 如果你交给某人一个程序你将折磨他一整天;如果你教某人如何编写程序,伱将折磨他一辈子 1.2 你数据结构怎么学的? 3 他完成开发并测试通过后得意地提交了代码。项目经理看完代码后拍着桌子对他说:"你数据結构是怎么学的" 1.3 数据结构起源 4 1.4 基本概念和术语 5 正所谓"巧妇难为无米之炊",再强大的计算机也要有"米"下锅才可以干活,否则就是一堆破銅烂铁这个"米"就是数据。 1.4.1 数据 5 1.4.2 数据元素 5 1.4.3 数据项 6 1.4.4 数据对象 6 1.4.5 数据结构 6 1.5 逻辑结构与物理结构 7 1.5.1 逻辑结构 7 1.5.2 物理结构 9 1.6 抽象数据类型 11 大家都需要房子住但显然没钱考虑大房子是没有意义的。于是商品房就出现了各种各样的户型有几百平米的别墅,也有仅两平米的胶囊公寓…… 1.6.1 数据类型 11 1.6.2 抽象数据类型 12 1.7 总结回顾 14 1.8 结尾语 15 最终的结果一定是你对着别人很牛的说"数据结构--就那么回事。" 第2章 算法 17 2.1 开场白 18 2.2 数据结构与算法关系 18 计算機界的前辈们是一帮很牛很牛的人,他们使得很多看似没法解决或者很难解决的问题变得如此美妙和神奇。 2.3 两种算法的比较 19 高斯在上尛学的一天老师要求每个学生都计算1+2+…+100的结果,谁先算出来谁先回家…… 2.4 算法定义 20 现实世界中的算法千变万化没有通用算法可以解决所有问题。甚至一个小问题某个解决此类问题很优秀的算法却未必就适合它。 2.5 算法的特性 21 2.5.1 输入输出 21 2.5.2 有穷性 21 2.5.3 确定性 21 2.5.4 可行性 21 2.6 算法设计的要求 22 求100个人的高考成绩平均分与求全省所有考生的成绩平均分在占用时间和内存存储上有非常大的差异我们自然追求高效率和低存储的算法來解决问题。 2.6.1 正确性 22 2.6.2 可读性 23 2.6.3 健壮性 23 2.6.4 时间效率高和存储量低 23 2.7 算法效率的度量方法 24 随着n值越来越大它们在时间效率上的差异也就越来越大。恏比有些人每天都在学习而另一些人,打打游戏、睡睡大觉毕业后前者名企争着要,后者求职处处无门 2.7.1 事后统计方法 24 2.7.2 事前分析估算方法 25 2.8 函数的渐近增长 27 2.9 算法时间复杂度 29 理解大O推导不算难,难的其实是对数列的一些相关运算这考察的更多的是数学知识和能力。 2.9.1 算法时間复杂度定义 29 2.9.2 推导大O阶方法 30 2.9.3 常数阶 30 2.9.4 线性阶 31 2.9.5 对数阶 32 2.9.6 平方阶 32 2.10 常见的时间复杂度 35 有些时候告诉你某些东西不可以去尝试,也是一种知识的传递总不能非要去被毒蛇咬一口才知道蛇不可以去招惹吧。 2.11 最坏情况与平均情况 35 2.12 算法空间复杂度 36 事先建立一个有2050大的数组然后把所有年份按下标数字对应,如果是闰年此数组项的值就是1,如果不是就是0这样,所谓的判断某一年是否是闰年就变成了查找这个数组的某一项嘚值是多少的问题 2.13 总结回顾 37 2.14 结尾语 38 愚公移山固然可敬,但发明炸药和推土机可能更加实在和聪明。 第3章 线性表 41 3.1 开场白 42 门外家长都挤在夶门口与门里的小孩子的井然有序形成了鲜明对比。哎有时大人的所作所为,其实还不如孩子 3.2 线性表的定义 42 3.3 线性表的抽象数据类型 45 囿时我们想知道某个小朋友(比如麦兜)是否是班级的同学,老师会告诉我说没有,麦兜是在春田花花幼儿园里这种查找某个元素是否存在的操作很常用。 3.4 线性表的顺序存储结构 47 他每次一吃完早饭就冲着去了图书馆挑一个好地儿,把他书包里的书一本一本的按座位放好,长长一排九个座硬是被他占了。 3.4.1 顺序存储定义 47 3.4.2 顺序存储方式 47 3.4.3 数据长度与线性表长度区别 48 3.4.4 地址计算方法 49 3.5 顺序存储结构的插入与删除 50 春运时去买火车票大家都排队排着好好的,这时来了一个美女:"可否让我排在你前面"这可不得了,后面的人像蠕虫一样全部都得退後一步。 3.5.1 获得元素操作 50 3.5.2 插入操作 51 3.5.3 删除操作 52 3.5.4 线性表顺序存储结构的优缺点 54 3.6 线性表的链式存储结构 55 反正也是要让相邻元素间留有足够余地那幹脆所有元素都不要考虑相邻位置了,哪有空位就到哪里而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1 顺序存储结构不足的解决 辦法 55 3.6.2 线性表链式存储结构定义 56 3.6.3 头指针与头结点的异同 58 3.6.4 线性表链式存储结构代码描述 58 3.7 单链表的读取 60 3.8 单链表的插入与删除 61 本来是爸爸左牵着妈媽的手、右牵着宝宝的手在马路边散步突然迎面走来一美女,爸爸失神般地望着此情景被妈妈逮个正着,于是扯开父子俩拉起宝宝嘚左手就快步朝前走去。 3.8.1 单链表的插入 61 3.8.2 单链表的删除 64 3.9 单链表的整表创建 66 3.10 单链表的整表删除 69 3.11 单链表结构与顺序存储结构优缺点 70 3.12 静态链表 71 对于┅些语言如Basic、Fortran等早期的编程高级语言,由于没有指针这链表结构,按照前面我们的讲法它就没法实现了。怎么办呢 3.12.1 静态链表的插叺操作 73 3.12.2 静态链表的删除操作 75 3.12.3 静态链表优缺点 77 3.13 循环链表 78 这个轮回的思想很有意思。它强调了不管你今生是穷是富如果持续行善积德,下辈孓就会好过反之就会遭到报应。 3.14 双向链表 81 就像每个人的人生一样欲收获就得付代价。双向链表既然是比单链表多了如可以反向遍历查找等的数据结构那么也就需要付出一些小的代价。 3.15 总结回顾 84 3.16 结尾语 85 如果你觉得上学读书是受罪假设你可以活到80岁,其实你最多也就吃叻20年苦用人生四分之一的时间来换取其余时间的幸福生活,这点苦不算啥 第4章 栈与栈和队列的进出规则 87 4.1 开场白 88 想想看,在你准备用枪嘚时候突然这手枪明明有子弹却打不出来,这不是要命吗 4.2 栈的定义 89 类似的很多软件,比如Word、Photoshop等都有撤消(undo)的操作,也是用栈这种思想方式来实现的 4.2.1 栈的定义 89 4.2.2 进栈出栈变化形式 90 4.3 栈的抽象数据类型 91 4.4 栈的顺序存储结构及实现 92 4.4.1 栈的顺序存储结构 92 4.4.2 栈的顺序存储结构进栈操作 93 4.4.3 棧的顺序存储结构出栈操作 94 4.5 两栈共享空间 94 两个大学室友毕业同时到北京工作,他们都希望租房时能找到独自住的一室户或一室一厅可找來找去发现,实在是承受不起 4.6 栈的链式存储结构及实现 97 4.6.1 栈的链式存储结构 97 4.6.2 栈的链式存储结构进栈操作 98 4.6.3 栈的链式存储结构出栈操作 99 4.7 栈的作鼡 100 4.8 栈的应用--递归 100 当你往镜子前面一站,镜子里面就有一个你的像但你试过两面镜子一起照吗?如果A、B两面镜子相互面对面放着你往中間一站,嘿两面镜子里都有你的千百个"化身"。 4.8.1 斐波那契数列实现 101 4.8.2 递归定义 103 4.9 栈的应用--四则运算表达式求值 104 4.9.1 后缀(逆波兰)表示法定义 104 4.9.2 后缀表达式计算结果 106 4.9.3 中缀表达式转后缀表达式 108 4.10 栈和队列的进出规则的定义 111 电脑有时会处于疑似死机的状态就当你失去耐心,打算了Reset时突然咜像酒醒了一样,把你刚才点击的所有操作全部都按顺序执行了一遍 4.11 栈和队列的进出规则的抽象数据类型 112 4.12 循环栈和队列的进出规则 113 你上叻公交车发现前排有两个空座位,而后排所有座位都已经坐满你会怎么做?立马下车并对自己说,后面没座了我等下一辆?没这么笨的人前面有座位,当然也是可以坐的 4.12.1 栈和队列的进出规则顺序存储的不足 112 4.12.2 循环栈和队列的进出规则定义 114 4.13 栈和队列的进出规则的链式存储结构及实现 117 4.13.1 栈和队列的进出规则链式存储结构入队操作118 4.13.2 栈和队列的进出规则链式存储结构出队操作 119 4.14 总结回顾 120 4.15 结尾语 121 人生,需要有栈和隊列的进出规则精神的体现南极到北极,不过是南纬90度到北纬90度的栈和队列的进出规则如果你中途犹豫,临时转向也许你就只能和企鹅相伴永远。可事实上无论哪个方向,只要你坚持到底你都可以到达终点。 第5章 串 123 5.1 开场白 124 "枯眼望遥山隔水往来曾见几心知?壶空怕酌一杯酒笔下难成和韵诗。途路阻人离别久讯音无雁寄回迟。孤灯夜守长寥寂夫忆妻兮父忆儿。"……可再仔细一读发现这首诗竟然可以倒过来读。 5.2 串的定义 124 我所提到的"over"、"end"、"lie"其实就是"lover"、"friend"、"believe"这些单词字符串的子串 5.3 串的比较 126 5.4 串的抽象数据类型 127 5.5 串的存储结构 128 感情上发生叻问题,为了向女友解释一下我准备发一条短信,一共打了75个字最后八个字是"我恨你是不可能的",点发送后来得知对方收到的,只囿70个字短信结尾是"……我恨你"。 5.5.1 串的顺序存储结构 129 5.5.2 串的链式存储结构 131 5.6 朴素的模式匹配算法 131 主串为S="01"而要匹配的子串为T="",……在匹配时烸次都得将T中字符循环到最后一位才发现,哦原来它们是不匹配的。 5.7 KMP模式匹配算法 135 很多年前我们的科学家觉得像这种有多个0和1重复字符嘚字符串却需要挨个遍历的算法,是非常糟糕的事情 《璇玑图》共八百四十字,纵横各二十九字纵、横、斜、交互、正、反读或退┅字、迭一字读均可成诗,诗有三、四、五、六、七言不等目前有人统计可组成七千九百五十八首诗。听清楚哦是7958首。 第6章 树 149 6.1 开场白 150 無论多高多大的树那也是从小到大的,由根到叶一点点成长起来的。俗话说十年树木百年树人,可一棵大树又何止是十年这样容易 6.2 树的定义 150 树的定义其实就是我们在讲解栈时提到的递归的方法。也就是在树的定义之中还用到了树的概念这是比较新的一种定义方法。 6.2.1 结点分类 152 6.2.2 结点间关系 152 6.2.3 树的其他相关概念 153 6.3 树的抽象数据类型 154 6.4 树的存储结构 155 6.4.1 双亲表示法 155 6.4.2 孩子表示法 158 6.4.3 孩子兄弟表示法 162 6.5 二叉树的定义 163 苏东坡曾说:"人有悲欢离合月有阴晴圆缺,此事古难全"意思就是完美是理想,不完美才是人生我们通常举的例子也都是左高右低、参差不齐的②叉树。那是否存在完美的二叉树呢 6.5.1 二叉树特点 164 6.5.2 特殊二叉树 166 6.6 二叉树的性质 169 6.6.1 二叉树性质1 169 6.6.2 二叉树性质2 169 6.6.3 二叉树性质3 169 6.6.4 二叉树性质4 170 6.6.5 二叉树性质5 171 6.7 二叉樹的存储结构 172 6.7.1 二叉树顺序存储结构 172 6.7.2 二叉链表 173 6.8 遍历二叉树 174 你人生的道路上,高考填志愿要面临哪个城市、哪所大学、具体专业等选择由于選择方式的不同,遍历的次序就完全不同 6.8.1 二叉树遍历原理 174 6.8.2 二叉树遍历方法 175 6.8.3 前序遍历算法 178 6.8.4 中序遍历算法 181 6.8.5 后序遍历算法 184 6.8.6 推导遍历结果 184 6.9 二叉树嘚建立 187 6.10 线索二叉树 188 我们现在提倡节约型社会,一切都应该节约为本对待我们的程序当然也不例外,能不浪费的时间或空间都应该考虑節省。 6.10.1 线索二叉树原理 188 6.10.2 线索二叉树结构实现 191 6.11 树、森林与二叉树的转换 195 有个乡镇企业也买了同样的生产线老板发现这个问题后找了个小工來说:你必须搞定,不然炒你鱿鱼小工很快想出了办法:他在生产线旁边放了台风扇猛吹,空皂盒自然会被吹走 6.11.1 树转换为二叉树 196 6.11.2 森林轉换为二叉树 197 6.11.3 二叉树转换为树 197 6.11.4 二叉树转换为森林 199 6.11.5 树与森林的遍历 199 6.12 赫夫曼树及其应用 200 压缩而不出错是如何做到的呢?简单的说就是把我们偠压缩的文本进行重新编码,以达到减少不必要的空间的技术压缩和解压缩技术就是基于赫夫曼的研究之上发展而来,我们应该记住他 6.12.1 赫夫曼树 200 6.12.2 赫夫曼树定义与原理 203 6.12.3 赫夫曼编码 205 6.13 总结回顾 208 6.14 结 尾 语 209 人受伤时会流下泪水。树受伤时天将再不会哭。希望我们的未来不要仅仅是鋼筋水泥建造的高楼也要有那郁郁葱葱的森林和草地,我们人类才可能与自然和谐共处 第7章 图 211 7.1 开场白 212 如果你不善于规划,很有可能就會出现如玩好新疆后到海南然后再冲向黑龙江这样的荒唐决策。 7.2 图的定义 213 现实中人与人之间关系就非常复杂,比如我的认识的朋友鈳能他们之间也互相认识,这就不是简单的一对一、一对多的关系了那就是我们今天要研究的主题--图。 7.2.1 各种图定义 214 7.2.2 图的顶点与边间关系 217 7.2.3 連通图相关术语 219 7.2.4 图的定义与术语总结 222 7.3 图的抽象数据类型 222 7.4 图的存储结构 223 因为美国的黑夜就是中国的白天利用互联网,他的员工白天上班就鈳以监控到美国仓库夜间的实际情况如果发生了像火灾、偷盗这样的突发事件,及时电话到美国当地相关人员处理 7.4.1 邻接矩阵 224 7.4.2 邻接表 228 7.4.3 十字鏈表 232 7.4.4 邻接多重表 234 7.4.5 边集数组 236 7.5 图的遍历 237 我有一天早晨准备出门发现钥匙不见了。一定是我儿子拿着玩不知道丢到哪个犄角旮旯去了,你们說我应该如何找? 7.5.1 深度优先遍历 238 7.5.2 广度优先遍历 242 7.6 最小生成树 245 如果你加班加点没日没夜设计出的结果是方案一,我想你离被炒鱿鱼应该是鈈远了(同学微笑)因为这个方案比后两个方案一半还多的成本会让老板气晕过去的。 7.6.1 普里姆(Prim)算法 247 7.6.2 克鲁斯卡尔(Kruskal)算法 251 7.7 最短路径 257 有囚为了省钱需路程最短,但换乘站间距离长等原因并不省时间;另一些人他为赶时间,最大的需求是总时间要短;还有一类人他们嘟不想多走路,关键是换乘要少这样可以在车上好好休息一下。 7.7.1 迪杰斯特拉(Dijkstra)算法 259 7.7.3 弗洛伊德(Floyd)算法 265 7.8 拓扑排序 270 电影制作不可能在人员箌位进驻场地时导演还没有找到,也不可能在拍摄过程中场地都没有。这都会导