大话数据结构

当前位置:首页 > 计算机网络 > 计算机理论 > 大话数据结构

出版社:清华大学出版社
出版日期:2011-6
ISBN:9787302255659
作者:程杰
页数:440页

作者简介

本书为超级畅销书《大话设计模式》作者程杰潜心三年推出的扛鼎之作!以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。
本书以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇?一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。

书籍目录

第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=”00000000000000000000000000000000000000000000000001”,而要匹配的子串为t=”0000000001”,……在匹配时,每次都得将t中字符循环到最后一位才发现,哦,原来它们是不匹配的。
5.7kmp模式匹配算法 135
很多年前我们的科学家觉得像这种有多个0和1重复字符的字符串,却需要挨个遍历的算法,是非常糟糕的事情。
5.7.1kmp模式匹配算法原理 135
5.7.2next数组值推导 139
5.7.3kmp模式匹配算法实现 141
5.7.4kmp模式匹配算法改进 142
5.7.5nextval数组值推导 144
5.8总结回顾 146
5.9结尾语 146
《璇玑图》共八百四十字,纵横各二十九字,纵、横、斜、交互、正、反读或退一字、迭一字读均可成诗,诗有三、四、五、六、七言不等,目前有人统计可组成七千九百五十八首诗。听清楚哦,是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

编辑推荐

《大话数据结构》为超级畅销书《大话设计模式》作者程杰潜心三年推出的扛鼎之作!以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。

前言

前 言本书起因大家好!我是《大话设计模式》(2008年初出版)的作者,三年来,承蒙广大读者的厚爱,《大话设计模式》取得了较大的成功。仅在当当网,截止本文写作时,就已经有1073次评论,705次5星评价,位居五星图书榜计算机/网络类的累计总榜第二名。此书已经成为国内原创计算机类图书最畅销的书籍之一。对于这样一个自己喜欢做、可以做得好,而且已经得到了市场广泛认可,为很多朋友提供帮助的事情,我没有理由不去继续做下去。这就是我准备再写书的原因。我曾做过调查,数据结构的学习者大多都有这样的感慨:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学得很累。可我更希望传达这样的信息:数据结构非常有趣,很多算法是智慧的结晶,学习它是去感受计算机编程技术的魅力,在理解掌握它的同时,整个过程都是一种愉悦的精神感受,而非枯燥乏味的一门课程。因此我决定写作一本关于数据结构有趣的书。不过现实总比理想来得更“现实”。要想把书写好,谈何容易,我需要突破很多困难……嗐!不管如何,现在您看到了本书,那就说明我已经克服了困难战胜了自己。希望您可以喜欢上这本书。本书定位本书的定位就是一本适合读者自学数据结构的书籍,它有区别于教材,希望给大家另一种阅读体验。通常讲解数据结构的图书都是以教材的方式呈现。在写作前,我购买或在图书馆借阅了十几本非常好的数据结构相关教材用来为写作本书做准备。但经过认真阅读后,我发现,它们大多不是一本好的“自学读物”。我没有轻视这些好书的意思,不过教材和自学读物,所面向的读者是完全不同的。好的教材应该是提纲挈领、重点突出,一定要留出思考的空间,否则就没必要再听老师上课了。很多内容的讲解是由老师在课堂完成,教材中有练习、课后习题、思考题等,这些大多可以通过老师来解答。比如我们中学时的语文、数学课本,很薄的一本书通常要用一学期、甚至一年的时间来学习,这就是因为它们是教材而不是自学读物。如果是小说,可能一两天就读完了。好的自学读物的目标是让初学者“独自”全盘掌握知识,需要强调“独自”一词,这就说明读者在阅读时,是完全依靠自己的力量来向未知发出挑战。因此书中内容,要么不写,写了就应该写透。如果读者在阅读时总是疑惑重重,那么这本书就有很大的问题了。我也就是在基于这样的认识,决心将《大话数据结构》真正写成一本关于数据结构和算法的自学读物来展开写作的。本书特色1.趣味引导大部分的编程类图书,在内容上基本都是直奔主题。但是尼采曾说过:“人们无法理解他没有经历过的事情。”换句话说,我们只接受过去早已理解的事物相关的信息。这是一种比较学习过程,在这个过程中,大脑寻找每条信息之间的联系。所以教育专家普遍认为,吸引学生的注意力,比较好的办法是用他们比较熟知的知识开始。因此在本书中,我会用一个故事、一个趣味题目、一部电影的介绍等形式来作为每一章甚至很多小节的开头,选择的内容也多多少少与要讲的主题内容相关。这并不是多余,而是有意为之。事实上,这样的形式在我的前一本书中已经得到了普遍认可。2.图文并茂西方有句谚语,“A picture is worth a thousand words.(一图值千言)”。用上千个字描述不明白的东西,很可能一张图就能解释清楚。我非常认可这个观点,所以本书虽没有达到每一页都有图,但基本做到了绝大部分讲解都有相关图示,关键算法更是通过多图逐步分解剖析。尽管这带来了写作上的难度,但却可以达到较好的效果。毕竟,读者通过本书开始学习数据结构时,要从一无所知或略知一二到完全理解,甚至掌握应用,是需要一个比较艰苦的过程,用大量的图示可以减少这个过程的长度。3.代码详解我在写作中尽量摒弃了传统数据结构教材的“重理论思想而轻代码讲解”的作法。在准备数据结构写作时我发现,很多教材对数据结构理论和算法设计思想讲得比较好,可一到实际代码时,有的把代码贴出来加少量注释,有的直接用伪代码形式。这对于上课的学生还好,毕竟有老师在课堂中去详解代码编写原理,可是对于初学数据结构和算法的自学者而言,如果书中不去解释代码某些细节为什么那样编写的原因,甚至代码根本不可能在某个编译器中运行通过,其挫折感是很强烈的。比如即使理解了图结构中的最短路径求解原理,也可能无法写出最短路径的算法。我把代码在运行过程中变量的变化融入到整个算法设计思想的讲解中,配合相应的示意图,会帮助大家更加容易理解算法的实质。这种讲解模式在本书的第6、7、8、9章的很多复杂算法中有具体体现,越是复杂的代码越是讲解细致。这算是本书的一个特色,希望对读者有帮助。4.形式新颖我把本书的内容虚构成了一个老师上课的场景,所有内容都通过这位老师表达出来,书中的文字非常口语化,这样做的目的是为了更加直观地让读者感觉,自己是在学习,是在上课。有人可能会说,现在的课堂大都是让人昏昏欲睡,把读者带入上课场景,不是更加让读者犯困吗?我觉得如果你的学习经历中听过一些优秀老师的课,你就不会下这样的结论。好的老师讲课,是可以做到引人入胜的。有人可能会问,我为什么不用《大话设计模式》中的对话形式,而采用讲课形式呢?这是对数据结构这门学问的特点考虑的。设计模式主要都是思想体现,通常会仁者见仁、智者见智,用对话展开比较容易;而数据结构中更多的是定义、术语、经典算法等,这些公认的知识,可讨论的地方并不多,更多的是需要把它讲清楚。让两个人在一起讨论某个设计模式的优缺点,会非常合适,而讨论数据结构定义的好坏,就没有太大意义了,不如让一个老师告诉学生数据结构的定义好在哪里更符合实际。因此用传统的讲课形式会好一些。另外,本书没有习题,有思考的题目也一定会给出某种答案。但本书每个复杂知识点的末尾,都会提供另一本书的进一步阅读建议。这也是基于它是一本自学读物的原则。读者阅读本书可能是任何时间任何地方,如果书中存在没有解答的习题,碰到了困难是没法及时找到老师来帮助的,因此本书尽量避免让读者有这样的困惑存在。如果需要练习的同学,我觉得还是应该考虑再去买本习题集来学习。学习数据结构和算法,做题和上机写代码非常有必要,从这个角度也说明,阅读完本书其实也只是完成入门而已。本书既然是以老师上课的形式来进行,那就免不了要融入一名教师除了授业解惑以外,还要传达一些个人价值观的体现。书中很多细微处,如对某位科学家的尊敬、对某个算法的推崇、对勤奋励志故事的讲述等都在表达着一个老师向学生传递真、善、美的意愿。我始终认为,读者拿到的虽然只是一本没有表情、不会说话的书,但其实也是在隔空与另一个朋友交流。人与人的交流不可能只是就事论事,一定会有情感的沟通,这种情感如果能产生共鸣、达成互信,就会让事情(比如学习数据结构与算法这件事)本身更容易理解和接受。本书内容本书主要是按照教育部关于计算机专业数据结构课程大纲的要求略微增减来组织内容的。主要包括:数据结构介绍,算法推导大O阶的方法,线性表结构的介绍,顺序结构与链式结构差异,栈与队列的应用,串的朴素模式匹配、KMP模式匹配算法,树结构的介绍,二叉树前中后序遍历,线索二叉树,赫夫曼树及应用,图结构的介绍,图的深度、广度遍历,最小生成树两种算法,最短路径两种算法,拓扑排序与关键路径算法,查找应用的相关介绍,折半查找、插值查找、斐波那契查找等静态查找,稠密索引、分块索引、倒排索引等索引技术,二叉排序树、平衡二叉树等动态查找,B树、B+树技术,散列表技术,排序应用的相关介绍,冒泡、选择、插入等简单排序,希尔、堆、归并、快速等改进排序,各位排序算法的对比等。本书读者数据结构是计算机软件相关专业的基础课程,几乎可以说,要想从事编程工作,无论你是否是科班出身,都不可以绕过这部分知识。因此,适合阅读本书的读者非常广泛,包括在读的本专科、中专职高技校等计算机专业学生、想转行做开发的非专业人员、欲考计算机研究生的应届或在职人员,以及工作后需要补学或温习数据结构和算法的程序员等各类读者。本书对读者的技术背影要求比较低,只要是学过一门高级编程语言,例如C、C++、Java、C#、VB等就可以开始阅读本书。不过由于当中涉及到比较复杂的算法知识,需要读者有一定的数学修养和逻辑思维能力,否则可能书籍的后半部分阅读起来会比较吃力。本书研读方法事实上,任何有难度的知识和技巧,都不是那么容易被掌握的。我尽管已经朝着通俗易懂的方向努力,可有些数据结构,特别是经典算法,是几代科学家的智慧结晶,因此要掌握它们还是需要读者的全力投入。美国畅销书《如何阅读一本书》中提到“阅读可以是一件主动的事,阅读越主动,效果越好。拿同样的书给背景相近的两个人阅读,一个人却比另一个人从书中得到了更多,这是因为,首先在于这人的主动,其次,在于他在阅读中的每一种活动都参与了更多的技巧。这两件事是息息相关的。阅读是一个复杂的活动,就跟写作一样,包含了大量不同的活动。要达成良好的阅读,这些活动都是不可或缺的。一个人越能良好运作这些活动,阅读的效果也就越好。”我当然希望读者在阅读本书后收获巨大,但这显然是一厢情愿。要想获得更多,您可能也需要付出类似我写作一样的力气来阅读,例如摘抄文字、眉批心得、稿纸演算、代码输入电脑,以及您自己在编程工作中的运用等。这些相应活动的执行,将会使您得到巨大的收获。作为作者,建议本书的研读方法为:1.复习C语言的基础知识。如果你掌握的是别的语言也不要紧,适当了解一些C语言和你掌握的编程语言的语法差异还是有必要的。甚至将本书代码改造成另一种语言本身就是一种非常好的学习方法。2.阅读第一遍时,建议从头至尾进行。如果你对前面的知识有足够了解,当然可以跳过直接阅读后面的章节。不过若要学习一门完整的知识并形成体系。通读本书,还是最好的学习方法。3.阅读时,摘抄是非常好的习惯。“最淡的墨水也胜于最强的记忆!”有不少读者会认为摘抄了将来也不会再去看,有什么必要,但其实在写字的过程就是大脑学习的过程,写字在减缓你阅读的速度,从而让你更好地消化阅读的内容。相信大家都能理解,“囫囵吞枣”和“慢慢品味”的差异,学习同样如此。4.阅读每一章时,特别是在阅读算法的推导过程时,一定要在电脑中运行代码(本书源码的下载地址可以到http://cj723.cnblogs.com中的《大话数据结构相关主题》中找到),了解代码的运行过程。本书的很多算法都做到了逐行讲解,但单纯阅读可能真的很难达到理解的程度(这是纸质书无法克服的缺陷),需要你通过开发工具调试,并设置断点和逐行执行,并参照书中的讲解,观察变量的变化情况来理解算法的编写原理。5.阅读完每一章时,一定要在理解基础上记忆一些关键东西。最佳的效果就是你可以不看书也做到一点不错地默写出相关算法。6.阅读完每一章时,一定要适当练习。本书没有提供练习题,但市场上相关的数据结构习题集比比皆是,可以选择尝试。另外互联网上也可以获得足够的习题来给你练习。练习的目的是为了检测自己是否真的完全理解了书中的内容。事实上很多时候,阅读中的人们只是自我感觉理解,而并非真正的明白。7.学习不可能一蹴而就,数据结构和算法如果通过一本书就可以掌握,那本身就是笑话。本书附录提供了本书写作时的参考书目,基本都是最优秀的数据结构或相关的中文书籍各有侧重,建议大家可以适当地阅读。8.在之后的编程学习和工作中,尽量把已经学到的数据结构和算法知识运用到现实开发中。遗忘时翻阅本书回顾相关内容,最终达到精通数据结构和相关算法的境界。编程语言说明本书是用C语言编写,基于C90(ISO C)的标准。读者可以选择任何一款基于C90标准的C语言开发工具或更高版本的开发工具来学习本书中的代码。本人一直习惯于用Visual Studio 2008作为开发工具,因此在写作此书时,也是用此工具的Visual C++来编译调试代码,一切都相安无事,但写作完成后,考虑到不同读者应用开发工具的习惯不同,最终在编辑的建议下,决定提供一份可在C90标准的C语言开发环境中编译通过的代码,结果发现错误百出。例如C90标准的注释要求是“/* 注释文字 */”而不允许是“//注释文字”:要求变量声明必须要在函数的最前面,只能是“int i; for(i=0;i

内容概要

一个被读者誉为很适合写IT技术书的家伙。《大话设计模式》作者。此书07年末出版至今已经简体版印刷9次、繁体版印刷6次,取得了较好的成绩,开创了一种适合国人阅读的趣味讲解IT知识的风格模式。其本人参与过政府、证券、游戏、交通等多种行业的软件开发及项目管理工作,也曾做过软件培训的教师。因曾有过两年半高中数学教学的独特经历,使得其书作当中处处以初学者视角考虑和分析问题,他成为了当前很受欢迎的IT技术图书作者之一。
博客:http://cj723.cnblogs.com;
微博:http://weibo.com/cj723;
Email:chengjielong@163.com

名人推荐

超级畅销书《大话设计模式》作者的新作!用户群更为广泛,写作风格一如既往,技术沉淀更加深厚,势必掀起全民数据结构的热潮!

图书封面


 大话数据结构下载 精选章节试读 更多精彩书评



发布书评

 
 


精彩书评 (总计25条)

  •     在我们平常的工作中,并没有多少真正关乎算法设计的地方,很多数据结构平常并不会接触到,但它们实际上就在我们身边,比如红黑树是stl中set和map的数据结构。我们知道stl中有一些不同的数据结构,比如vector,list,set,map,hash,我觉得我们学习算法和数据结构的其中一个作用就是去学习如何正确的使用这些数据结构。只有清楚了他们本质上的区别,我们才知道何时该用,何时不该用。
  •     对于初学数据结构的人来说,这本书很合适。有许多联系实际的例子,尤其是排序那一章,讲得不错。对于已经对数据结构有一定了解,或者想要更加深入的学习的人来说,这本书可能就不太合适了。不过总体来说,作者对基本的数据结构和排序,查找中的基本概念,讲解的很清楚,相关代码示例的讲解也很明白。整体来说还不错。
  •     我不是科班学计算机的,却也在这个行业做了好几年,但是对基本的这些理论知识,懂得很少。之前作者的《大话设计模式》的写作形式,在设计模式方面让我懂了许多,这次又出版了《数据结构》的大话版,看到消息的同时,就在网上下了订单,今天刚刚收到书,就一口气看了40几页,这个系列书最大的好处就是可以让自己能够坚持看下去,相对其他书来说,更能通俗易懂一些。另外对作者的付出表示感谢,作者这样的写作精神很让我感动。 随着内容的不断深入越发感觉,作者的写作风格很合适初学者,或者看不下去书的朋友学习。书中很多语言的表达让人有种豁然的感觉,很多结构用生活中的例子来表述,减小了理解的难度。作者在网上提供的勘误信息,还有及时互动,都将成为这个系列书籍成功不可缺少的一部分。最后希望这本书可以给更多人带来学习《数据结构》信心和学到更多的知识。

精彩短评 (总计101条)

  •     适合跨专业的同学当做入门读物。。
  •     设计的挺有意思,但是比较基础的感觉
  •     算法描述的还算详尽 国产计算机书籍良心之作
  •     到货后,一口气看了三章,真的很享受!太适合程序员和开发人员了。大话设计模式,我看了很多遍了,工作中很有帮助;大话数据结构,相信收获也很多。程老师作品,必属精品!您真是一个适合写IT技术书的家伙。
  •     前段时间看完了《大话设计模式》,从书的一开头就引入一个菜鸟和大虾的故事,直至贯穿全书。生动、形象,很喜欢这种小说式的技术书。由于上次我看的是电子版,因此,有好多重要的知识点没有做好笔记。也正因为如此,这次下定决心买了本《大话数据结构》,正好补充了我这方面的不足。支持程杰,加油!
  •     我曾在网上看过数据结构相关的教程,都觉得没意思很枯燥
    大话数据结构却不同,不但有趣而且能真正学习数据结构,绝非简单介绍
  •     还挺好的
  •     真是太棒了,以前学数据结构老犯晕,概念抽象,刚开始还带着挑战的精神去阅读,坚持一段时间兴趣尽失,再也不想翻了。 后来工作了,发现数据结构非常有用,当年的那本数据结构也不复存在,就买了这本书,书中的描述太形象了,读起来趣味十足,时不时还会呵呵一笑。
  •     感觉代码很不友好⋯⋯ 本以为还是很不错的书呢 确实书厚却实际内容少 隔段时间看就觉得很难再捡起来⋯⋯ 代码真的很不友好不知道是不是自己的问题
  •     数据结构简单入门,前端用到的不多,不过还是比较容易理解的,
  •     后面就是各种知识点堆砌了。。
  •     大一上过数据结构这门课,但是三年过去忘得差不多了,买了这本《大话数据结构》打算自学一遍,从头再来!书写的很不错,和适合自学,读起来轻松加愉快。
  •     后面要理解起来就有些困难了,但是总的来说,把数据结构体讲的有趣了些。建议一读。
  •     大话数据结构是一本很好的书,讲得简单明了,喜欢
  •     在看这本《大话数据结构》之前,我看过两本数据结构的书,比较来说,还是这本比较适合入门,讲的比较全面了,如果有省略的部分作者也在备注中说明了详细的算法出处,对读者很负责任。推荐想了解数据结构,考研、找工作等情况的人阅读或者作为参考书。
  •     作者写得很不错了。但是部分算法解释得并算不上非常好。
  •     很有意思的方式讲述数据结构,比教科书死板的好多了,他的大话设计模式也不错的。
  •     以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物
  •     故作幽默……
  •     不想大话设计模式那样讲得特生动,也许数据结构本来就有趣不起来吧。非老鸟级别的都推荐参考参考。
  •     很喜欢大话设计模式,现在再重温一下数据结构~
  •     如果只想粗略的了解,可以买来看一看。看完也许就忘了。
  •     数据结构这门课本身比较难,但是这本大话数据结构讲的很浅显易懂,很适合入门,很喜欢!
  •     初学者获益匪浅
  •     不错!原来看过大话设计模式,慕名而来看的这个,果然没有辜负大家的期望。个人认为合适想学习编程的人员自学,或者作为大学数据结构的辅助用书,里面很多讲解比较趣味,也推荐给老师看,可以草考教学哦。
  •     大话数据结构——超级畅销书《大..”
    挺好的
  •     即将开数值分析课前读完此书,可能因为水平问题并没发现大家所说一写代码的问题。整个阅读过程中不懂的部分极少,是一本很好的入门书,以简易的图示展示了数据结构基本知识。
  •     我是听了郝斌的C语言和数据结构之后才知道了数据结构的重要性,知道了原来学习也可以变得这么简单和快乐,知道了这世上还有这么好的老师,也由此喜欢上了编程.我觉得无论学什么东西入门是最难的,而学不学的好兴趣则很重要,这本大话数据结构确实是一本符合我的标准的好书,他能带你轻松的入门,让你在学习的过程中保持学习的兴趣,让你有学下去的动力,而不像一些专业的书一样,让你觉得学习就是一种折磨,
    当你学完这本书以后,再回过头去看严蔚敏的数据结构就不会那么难了,我觉得这才是科学的学习方法!很感谢作者为我们创造了这么好的书,希望再接再厉,也为大学伪老师太多而深恶痛绝!
  •     看了大话设计模式,这本书写的也蛮好,图文并茂,很生动的把大学学的数据结构重新梳理了一遍~
  •     一翻开此书就有种想一下子看完的感觉,跟大话设计模式一样,作者以讲故事的方式来讲解数据结构的知识,容易理解还非常有趣
  •     这本书挺不错的,看到树这一章了,后面的等要用到的时候再补吧。
  •     小错误有点多 但总体来说是入门的好书
  •     后半部分也是无语。二话不说就把没有参数说明、缺乏注释的垃圾代码摆出来,说真的,这代码真是烂。另外,如果把扯些文不对题的话也叫“大话”的话,建议重学小学写作
  •     算是2017年读的第一本书 尽管是借着数据结构期末考的契机 但在拼命吸收的这几天真的看到了程序不一样的吸引人的地方 包括各种生活里常出现的小细节 还有比较神奇的璇玑图 以及作者常常提到的人生本身 各种通俗易懂 和严奶奶的书比起来真真真太有趣了 难得喜欢这么一本和专业相关的书
  •     一般般。
  •     要有C/C++语言基础,如果对一些算法描述感到困惑,需要参考其它书或博客。
  •     作为算法的入门还是不错的,当然看了这一本还是远远不够精通数据结构和算法的
  •     数据结构讲得还可以,不过没有大话设计模式来得好了~
  •     数据结构一直是自己的硬伤,真正要开始研究算法和数据结构了,这对做大型项目有很大帮助,不能再停留肤浅层面了
  •     其实一直想好好学习数据结构,但是始终有一种敬畏感,所以一直没学好,教材也换了无数本,感觉就是不太明白,这本书刚收到,真的很好,感觉是一个耐心的老师孜孜不倦的教诲,语言平易近人,不会像其他的教材似的,一上来就堆一堆的专业名词。感觉很好,我会努力看下去,谢谢作者这么好的书,造福于广大学生,希望您继续出大话系列丛书,例如操作系统呀,组成原理呀!!向作者致敬!!!!!
  •     牛逼但是感觉难
  •     不错,写的挺细
  •     不错,讲的是人话
  •     看了大话设计模式,让我觉得很不错了,开发过程中也有用到当着的设计模式了。用了设计模式,我再也不那么需求变更了。数据结构,可是说是软件设计的重中之重。大学的时候有学过一点了,不过学得是云里雾里的,很是不明白了。对这边书很是期待啊!博客园中看了几篇了,还不错啊!
  •     学习数据结构的好书,大话系统都挺好的。
  •     把前面以及后面排序部分全部看完,我自己用java重新实现过,语言非常好,代码也简短,可见读者精心设计过。感觉非常适合入门,有些基础点讲得很细致,数学不好的同学可以获益了。但是在一些难的地方,往往就简短跳过了,或者叫读者直接去参考算法导论(我汗...),不过对于入门级的书来说,算是写得非常好了,如果想更加深入,请有基础了再去看算法导论,总体上来说给个五星不过分
  •     我是伍迷. 从大话设计模式到大话数据结, 这二本书都是将抽象的原理转化为通俗易懂的生活所事. 感谢他的创作.请继续努力.......
  •     如果不想看《数据结构与算法分析》,那么这本书就非常适合想学习数据结构的新手。与《大话设计模式》风格一样,场景式的内容是本书的一大特色,虽然讲的很基础,但也算将数据结构的基本内容覆盖到了,还是值得一看的。
  •     比起国内的其他传统教材,这个真是诙谐至极。花三小时重温了一遍以前学过的知识,清晰。
  •     讲得还是不错的
  •     看完大话设计模式,我毫不犹豫地买了大话数据结构,真心很不错,给大家推荐
  •     前段时间找工作,之前自己没有系统地学习数据结构,急需一本数据结构的入门书籍。而且很喜欢程杰老师幽默生动的讲解方式,于是就立刻下单,并且一口气看完了。觉得自己收获颇多,不仅温习了链表、栈、队列的相关知识,还对先前不了解的树和图的知识有了深刻的认识。
    这本书非常非常适合入门,但是缺点也是明显的:对比较深入的内容更多的是介绍,而不是深入分析和代码讲解。所以说,想要更深入的学习数据结构和算法,我觉得还要读一读更深层次一点的书籍(算法导论等等)。
    不过真的非常喜欢这本书,给个5分!!!
  •     适合跳槽前翻翻或者平时用到常用算法忘记时参考
  •     这次一共买了四本书,都是关于《数据结构与算法》方面,而阅读首本书就是《大话数据结构》,通读全篇后,又让我用新的眼光去理解数据结构原理与应用场所;近一步学习了一种研读的方法。
  •     算是我的数据结构入门书了,只是大致理解了算法的思路,并没有动手敲代码去实现它,图部分还没有理解,排序部分没有阅读。
  •     我对数据结构很无奈!之前我有清华,严的那本书,但他都是伪算法,不懂实际编程,这本书通俗易懂里面的图片解释的也很直观。支持!!!
  •     数据结构是要钻进去学才会有意思的东西,大部分人会觉得很枯燥然后睡着,然后在自己再次有激情的时候继续学。不过至少这本书会让你不那么想睡,数据结构一旦在自己脑海里面建立了模型,剩下的都是算法实现的问题。能够让读者不那么想睡的数据结构的书是非常成功的。
  •     我怀着负责的态度来评价这本书(仅一个学生的观点):
    首先,我是一个本科大二计算机科班学生,已经学过了数据结构课程。然而,我学会的只是一个个极其抽象的concept,在我的课程设计和实践项目中却无法判断和很好的使用这些很好的数据结构和算法,这些很好的东西并没有成为我得心应手的工具,而是一些无法消化的词典。我想放弃,因为在程老师的博客里看到了这本书的介绍我就开始关注了,前天终于到手了。我仔细地看着,完成快一半了。感受如下:
    (因为本人不是牛人,不能发现程老师这本书的不好的地方,望大家指出,谢谢。)
    1、书很精美,排版舒适,让我不再有教科书里的那种小字的折磨;
    2、字里行间就像口述一样,没有晦涩难懂的话,读起来很轻松;
    3、内容方面主次分明,很简洁,并不是以代码为主,而是以图片为主(哈哈哈,还有超级玛丽游戏图片),至少让我感觉影响深刻。
    4、从质量上讲,没的说,因为我语言设计基础比较好,配合这本书,相信一定会让我收获颇丰,至少让我有信心去设计我需要的东西,虽然我还很稚嫩,还需继续学习。
  •     大话数据结构。刚收到很赞,不断学习
  •     凭借此书,得以入门
  •     讲得很好,但没讲多深
  •     我是看了大话设计模式,然后来买这本的,非常不错的书,昨天收到的,已经看了70页了,讲解的比较生动,还是很容易理解的。当当的送货还是比较快的,周五下的单,周一就到了。纸张的质量不错,估计不是盗版。
  •     你想重温数据结构吗?您还在对算法担心吗?有了大话数据结构,您可以吃嘛嘛香,再也无需为数据结构所烦恼
  •     书的质量很好,内容比较通熟易懂,个人认为比较适合像我这样的对数据结构和算法了解不深的初学者
  •     这是一本初学数据结构的人看的书,语言风格幽默,秉承了《大话》系列一贯的风格,并且通过形象的比喻、举例,将初学者难懂难理解的地方讲得很是透彻,比起其他的教科书式的内容,这本书可以说是令人耳目一新。
  •     一本非常值得拥有的书,程杰的大话设计模式我买了,感觉非常好,所以这本书我也毫不犹豫地下了单,简单看了一下知道就是我所要的东西,从来没有过这种想看专业书的冲动,现在工作忙抽时间慢慢学习。。。
  •     这本书是经过朋友推荐来读的。优点是适合入门,树之前的章节都是轻松愉快的,讲解数据结构的同时,还用小故事来帮助理解。但是到树之后的章节,变得和流水账一样,感觉作者只是简单照搬清华大学严蔚敏的那本数据结构,比较生硬地把知识堆在那里。
  •     之前看过大话设计模式,写得比较好。拿到大话数据结构,大概看了一些,写得还是通俗呢,通过大量的图表来解释算法,适合自学。
  •     本书内容很好,纸质量也非常好。没有古板的教科书式的说教,每个算法举相应的例子,并写出这个例子的运行的每一个步骤,来解读数据结构结合算法在运行中的奥秘,非常适合读者进行自学。我非常喜欢这种学习数据结构的方法
  •     百度过作者的《大话设计模式》,非常喜欢作者的写作风格,由浅入深,深入浅出
    这本书还没开始看,但是肯定质量也是上乘
  •     书讲的很不错,

    但是的确不适合大众人群看

    需要一定的C语言基础,和一点点计算机基础才能看懂

    即使有基础还是很难学习,需要对不懂的词组和含义去百度一下。

    如果学完肯定受益匪浅。

    不建议没有计算机基础和C语言基础的同学
    只是因为兴趣购买本书,内容多而难,
    起码得先去网上学教程把C语言基础入个门

    起码得知道main是什么
    printf是什么(输入语句)
    scanf是什么(输入语句)

    3种结构是什么(顺序结构,选择结构循环结构,就像写作文 顺叙,倒叙 插叙 )

    if else while for switch 等等等等。。。


    给一点计算机系同学建议:
    IT方面学习网站有
    21视频,
    我要自学网,

    3家培训机构是,传智播客,华清远见,魔乐科技
    不是叫你们去培训,你们去电驴搜索,这些培训机构有非常多的免费课程观看

    和去培训机构唯一的区别就是没有同学,没有周围特定的环境和老师一对一的指导
    其他完全没差别。


    还有给广大热爱学习但还不知道这个消息的人说一下:

    人人影视,还有其他几家牛B的字幕组合力翻译了非常非常多的
    国外公开课的课程,非常有益,字幕都是中英双字幕的
    哈佛,MIT,剑桥………………等等

    具体的直接去搜索网易公开课。。网易把他们的课程经过字幕组同意都放在哪里了,是个大集合


  •     了解入门概念
  •     浅显而不易懂。
  •     通俗易懂
  •     作者详细描述了各种经典数据结构和算法原理以及实现,运用大量的图例,生动讲解,只是有错误之处,希望再版时能改进,总体还是很满意的
  •     我不是科班学计算机的,却也在这个行业做了好几年,但是对基本的这些理论知识,懂得很少。之前作者的《大话设计模式》的写作形式,在设计模式方面让我懂了许多,这次又出版了《数据结构》的大话版,看到消息的同时,就在网上下了订单,今天刚刚收到书,就一口气看了40几页,这个系列书最大的好处就是可以让自己能够坚持看下去,相对其他书来说,更能通俗易懂一些。另外对作者的付出表示感谢,作者这样的写作精神很让我感动。
    作者在网上提供的勘误信息,还有及时互动,都将成为这个系列书籍成功不可缺少的一部分。最后希望这本书可以给更多人带来学习《数据结构》信心和学到更多的知识。
  •     前面读起来还是可以的,到后面的图以及往后就讲的有点不明所以了
  •     辅助严老师。
  •     很喜欢期待的一本书,因为觉得作者很不错,当年在学校图书馆偶然看到作者的《大话设计模式》,语言轻松愉快,不像教条一般的教科书只是催眠,能够让人愉快的读下去,很不错。推荐计算机相关专业还在学校的童鞋们一定要读。
  •     解释的过于详细了,适合结合教科书或视频来看,在遇到困难时会是个好讲师
  •     考研时数据结构的入门书,还算通俗吧,把这么难的数据结构说成这样,也是不错了。
  •     真的不行
  •     还不错~
  •     看过的最差的数据结构的书,明明很简单的道理,啰里啰嗦讲半天,还讲不明白,非常不建议买!
  •     伪代码高屋建瓴,第一本数据结构的书,适合初学者入门,语言也挺幽默风趣,比喻形象好记
  •     还没有开始看,是看过三遍大话设计模式才再来买这本书的,希望这本书像大话设计模式一样精彩。
  •     刚买,读过大话设计模式,不得不说让人看了没有那种干涉的感觉。
    这次买数据结构,虽然这版还有很多勘误,不过还是急着下单了,一是喜欢作者的风格,二是为了能重新温故一下数据结构。
    不过作者说勘误10分钟就能搞定,坑爹啊!搞了我将近25分钟,累啊!
  •     很好的入门,其实也没有通篇都很有趣之类,也没有易读,有的地方还是得参考别的教材..
  •     前面看着还好,越往后体验越差,不知道是我的原因还是书的原因
  •     囫囵吞枣的看了一遍,有很多不理解。很好的入门书。
  •     作者以上课的方式来引导我们学习数据结构,而且举了很多有趣的例子,书中也插入了很多图片更适合我们理解,对一些比较重要的算法采用一步一步的方式教我们去理解,以这本书作为学习数据结构的入门书籍是非常不错的选择,书上的代码是用C写的,学习的时候需要结合作者提供的代码多想多练
  •     之前看过大话设计模式,简单易懂,这次买了数据结构,还是很容易看懂,而且之前觉得数据结构比较难,比较枯燥,看了这本书完全不一样
  •     书的内容确实浅显易懂,图的遍历之前的部分讲的还是不错的,让我这个数据结构盲慢慢看懂了不少。而且相比严蔚敏的书来说,他把抽象的算法部分实现出来,因而更好理解了。不过,图之后,是比较难的部分,作者反而草草一笔带过,原理,思想通通不讲,直接贴了代码,一脸懵逼。
  •     讲得很仔细,然而我要全部掌握还要重复阅读实践啊
  •     书还没到,但是很期待,当初感觉大话设计模式写的非常的好,才考虑买这本书的
  •     看了一点.....怎么这么多口水无谓的话?
  •     把复杂的东西讲简单,是一种功力。希望我们国家多一些这样的书。
  •     之前就喜欢程杰所著的《大话设计模式》,真正搞学问的人,是擅长将晦涩的道理阐述得简单明了,诙谐幽默的,而“大话”系列就是这样的书,强烈推荐,五星级。
  •     一本很好的大话数据结构
  •     以前看过作者的“大话设计模式”,很有收获,这一本同样也不错,值得一读!
  •     你数据结构怎么学的?
 

农业基础科学,时尚,美术/书法,绘画,软件工程/开发项目管理,研究生/本专科,爱情/情感,动漫学堂PDF下载,。 PDF下载网 

PDF下载网 @ 2024