编程珠玑高清

所需积分/C币:39 2017-07-31 21:12:16 13.14MB PDF
4
收藏 收藏
举报

编程珠玑
TP311.1 大师鉴名系列 20 Programming Pearls Second Edition 编程珠玑 (第二版) 美] Jon Bentley著 谢君英石朝江译 北方工业大学围书馆 00544579 忄电力出社 www.intopower.com.cn bbs theithome com Programming Pearls 2nd Edition(ISBN 0-201-65788-0 Jon bentley Authorized translation from the English language edition, entitled Programming Pearls, published by Addison Wesley. Copyright c2000 All rights reserved No part of this book may be reproduced or transmited in any form or by any means, electronic or mechanical including photocopying, recording or by any information storage retrieval system, without permission from the Publisher CHINESE SIMPLIFIED language edition published by China Electric Power Press Copyright@2004 本书由美国培生集团授权出版。 北京市版权局著作权合同登记号图字:01-0381号 图书在版编目(CIP)数据 编程珠玑/(美)本特利著;谢君英,石朝江译.北京:中国电力出版社,2003 (大师签名系列) 书名原文: Programming Pe iSBN7-5083-1914-1 1编.Ⅱ①本.②谢.③石。Ⅲ程序设计ⅣIY3.l 中国版本图书馆CIP数据核字(2003)第1537号 丛书名:大师签名系列 书名:编程珠珂 编著:(美〕 Jon bentley 翻译:谢君英石朝江 责任编辑:高军朱恩从 出版发行:中国电力出版社 地址:北京市三里河路6号邮政编码:1004 电话:(010)88515918 传真:(010)8518169 印刷:汇鑫印务有限公司 开本:78×1092116 印张:145 字数:276千宁 版次:2004年4月北京第1版 2004年4月第1次印刷 定价:28.0元 版权所有翻印必究 bbs. theithome com 前言 计算机程序设计涉及诸多方面。 Fred Brocks在《 Mythical Man Month》中描述了一幅 广阔的画卷;他的作品侧重于讲述管理在大型软件项目中所扮演的关键角色。更为具体一 点的是 Steve Mcconnel在《 Code complete》中介绍的优美的程序设计风格。书中涉及的 那些主题对于优秀的软件和程序员来说都是至关重要的。但不幸的是,合理软件工程原则 指导下的精巧的应用程序并非总是可以打动人心—除非软件按时全部完成并运转正常。 关于本书 本书涉及的主题是计算机专业领域中更为迷人的一个方面:这是一些超出了可靠工 程学范畴、位于涧察力和创造力王国中的程序设计珍珠。如同珍珠来自于曾经折磨牡蛎 的沙粒,程序设计的珍珠也来自于曾经折磨程序员的实际问题。书中这些有趣的程序将 会教给您重要的程序设计技巧和基本的设计原则。 书中的内容大多出自发表在《 Communications of the ACM》上的 Programming Pearls 专题,它们被整理、修订,并于1986年作为本书的第一版出版。本书对第一版十三章中 的十二章做了大量的编辑更动,并加入了三个新的主题。 阅读本书的惟一要求是读者有过使用高级语言进行程序设计的经验。一些高级的技 术(比如C+模板)在书中也会偶尔出现,对这些主题不熟悉的读者可以直接跳到于 章节,而不会造成阅读障碍。 尽管书中的每一章都可以自成体系,但在整体上仍然存在逻辑上的分组。第1部分 的第1~5章回顾了程序设计的基础知识:问题定义、算法、数据结构,以及程序验证和 测试。第2部分内容主要围绕效率问题展开,效率间题不仅本身十分重要,而且常常是 进入有趣的程序设计问题的最好跳板。第3部分将会把这些技巧应用到几个关于排序、 查找和字符串处理的基本问题中。 给读者的提示:不要读得太快。请仔细阅读,并尝试解决书中提到的问题一某些 问题看似容易,但可能需要您花费一到两个小时的精力才能解决。然后,请认真解答每 章末尾提出的问题:通过思考并得出解决方案,您从本书学到的大部分知识将得以巩固 如果可能的话在翻看书后给出的提示和解决方案之前最好和朋友或同事讨论您的观点。 每章末尾给出的附加阅读材料并不是代表学术界观点的参考资料列表;我推荐了一些优 bbs. theithome com 秀的参考书目,它们也是我个人书库中重要的组成部分。 本书是为程序员所写。我希望这些问题、提示、解决方案和附加阅读材料将会给程 序员带来帮助。事实上,本书已经在多门课程中发挥了它的作用,其中包括算法、程序 验证和软件工程。附录1中的算法目录是给职业程序员的一个参考,同时说明了如何将 本书应用于算法和数据结构方面的课程。 代码 本书第一版中的伪码程序其实已全部实现了,但只有我一个人可以看到这些真正的代 码。在第二版中,我重新编写了原有的程序并编写了同样数量的新代码。您可以从本书的 网站(www.programmingpearls.com)上获得这些程序。代码中包含了许多用于测试、调试 和对函数计时的基本框架。网站上也提供一些其他相关资料。因为现在程序员可以从网上 获得十分多的软件,所以这一版本的一个新主题就是介绍如何评价和使用软件组件。 本书的程序采用了简洁的代码风格;短变量名、较少的空行、少数或没有错误检查。 在大型软件项目中这是不合适的,但它有利于表达算法的关键思想。答案51给出了关 于这种风格的更详细的背景。 书中包含了一些真正的C和C++程序,但大多数函数都表示成伪码的风格:这样就 可以使用较少的篇幅并避免不优雅的语法。符号fori=[0,)将i从0迭代到a-1。在这 种风格的for循环中,左右圆括号表示开放的范围(其中不包含边界值),而左右方括号 则表示封闭的范囤(其中包含边界值)。表达式 function(i,仍然表示调用一个带有参数 i和j的函数, array, j]也仍然会访问一个数组元素 书中列出了许多程序在“我的机器”上的运行情况,该机器的配置是奔腾400Hz 处理器、128MB内存、 Windows Nt40操作系统。我还记录了程序在其他几台机器上的 运行情况,书中给出了我所观察到的一些根本区别。所有实验都采用了最大程度的编译 器优化。我建议您在自己的机器上进行计时,并打赌您将会找出类似的运行时间比例。 致第一版读者 我希望你翻阅本书的第一反应是“看起来的确与第一版很像。”几分钟之后,我希望 你将会发觉“我从未看过此书。” 这一版与第一版关注的问题相同,但它被置于更大的背景之中。计算机技术已经在关 键领域(如数据库、网络、用户界面)发生了根本的变化,大多数程序员都应该熟悉这些 技术。但在各个领域的中心,编程问题依然是核心。第一版的程序所关注的主题在本书中 仍然得以保留。但与第一版相比,本书像是一个更大池塘中的一条更大的鱼。 bbs. theithome com 原书第4章中关于实现二进制查找的一节现在被放到了介绍测试、调试和计时的第 5章中。原来的第11章得到了扩展并被拆分为新的第12章(关于原来的问题)和第13 章(关于集合表示)。原来的第13章介绍了一种运行在64KB地址空间上的拼写检查; 现在它已经被去掉了,但它的思想仍然存在于第138节中。新的第15章是关于字符串 问题的。许多新节被添加到原来的章中,另外一些节则被删掉了。由于引入了新的问题、 新的解决方案以及四个新的附录,本书比上一版本在长度上增加了25% 许多旧的案例研究在这一版本中没有发生变化,但也有一些老故事根据现在的情况 被重新改写。 第一版致谢 我要感谢许多人对我的支持。在《 Communications of the ACM》上设立专题的想法 最初来自 Peter Denning和 Stuart Lynn Peter勤奋地为ACM工作,他使这个专题成为可 能并录用我从事此项工作。ACM总部的成员,尤其是 Roz Steier和 Nancy Adriance给了 我许多支持,他们计这些专题文章能以原有的形式发表。我尤其要感谢ACM的是:它 鼓励专题以原有的形式发表;同时感谢许多CACM的读者,是你们对专题的热心评论使 这个扩充版本变得必要并有可能完成。 AAho、 Peter Denning Mike Garey、 David Johnson、 Brian Kernighan、 John Linderman、 Doug Mcllroy和 Don stant在百忙中抽出时间仔细阅读了本书的每一个章节。我还要感 谢以下诸位提出的宝贵意见: Henry baird、 Bill Cleveland、 David gries、 Eric Grosse ynn jelinski、 Steve Johnson、 Bob melville、 Bob martin、 Armo Penzias、 Marilyn Roper、 L Chris van Wyk、 Vic Vyssotsky和 Pamela Zave。另外, Al Aho、 Andrew Hume、 brian Kernighan、 Ravi sethi、 Laura singer和 Bjarne Stroustrup在成书过程中提供了巨大的帮 助;西点军校EF485基地的学员测试了本书手稿的倒数第二个草稿。感谢所有人。 第二版致谢 Dan Bentley、 Russ Cox.、 Brian Kernighan、 Mark Kernighan、 John Linderman、Seve McConnel、 Doug Mcllroy、 Rob Pike、 oward Trickey和 Chris Van Wyk仔细阅读了本书 第二版。我还要感谢以下诸位提出的宝贵意见: Paul abrahams、 Glenda Childress Eric Grosse,、 Ann martin、 Peter Mcllroy, Peter meishan、 Sundar narasimhan、 Lisa ricker、 Dennis Ritchie, Ravi Sethi, Carol Smith、 Tom Szymanski和 Kentaro toyama。感谢 Peter Gordon以及他在 Addison- Wesley的同事,他们为这一版的出版提供了许多帮助。 bbs. theithome com 基础的重要性(程序员之路) 学习编程有几年了,感觉走了不少弯路,而不少的学弟学妹又在重蹈我当初的覆辙,不免有些痛心。最近在网 上也看了许多前辈们的经验建议,再结合自己的学习经历在这里谈谈基础的重要性,希望帮助大家少走些弯 路。 什么是基础呢?就是要把我们大学所学的离散数学算法与数据结构,操作系统,计算机体系结构,编译原理 等课程学好对计算机的体系C門υ本身操作系统內核系统平台,面冋对象编程程序的性能等要有深层次的掌握。 初学者可能体会不到这些基础的重要性,学习jsp, donet, mfc,vb的朋友甚至会对这些嗤之以鼻但是开始没学 好基础就去学jsp或 donet会产生很坏的影响而且陷入其中不能自拔。 我上大二的时候还对缩程没什么概念,就上了门C++也不知道能干什么,老师说MFC也不知道是什么东西, 看别的同学在学 asp. net就跟着学了然后就了解到netj2ee,php是什么了,就觉得软件开发就是用这些了,而上 的那些专业课又与我们学的 sqlserver啊css啊可jax啊亳无关系就感慨啊,还不如回家自学去就为一个文凭吗? 还不如去培训浪费这么多钱于是天天基本上没去上什么课天天就在做网站几个学期就做了三个网站。感觉做 这些网站就是学到些技巧,没什么进步这些技巧就好比别人的名字,告诉你你就知道了,网上也都可以搜到。那时 候就觉得把net学好就行了,搞j啁ee的比较难,搞ai编程就别想了,操作系统更是望尘莫及了。后来随着学习 的深入和看了网上许多前辈们的建议才对这些基础的重要性有所体会。 虽然net或java的开发并不直接用到汇编操作系统这些但是不掌握这些基础是有很大问题的,因为你只知 其然不知其所有然,在mf和net里面控件—拖什么都做好了,很方便,但是出了问题可能就解决不了,有些在 网上搜都搜不到。这就是基础没打好不知道它的原理就不知道岀错的原因。在学.net的时候常会讨论那些控件 该不该用别人说尽量别用也不知道为什么?不让用是因为你在高层开发你不知道它的原理出错了你可能解决不 了,但其实是应该用的,不然人家开发它干嘛,但要在了解它的原理后去用就会很方便。 要编写岀优秀的代码同样要扎实的基础,如果数据结构和算法学的不好,怎么对程序的性能进行优化怎样 从类库中选择合适的数据结构。如果不了解操作系统,怎样能了解这些开发工具的原理,它们都是基于操作系统 的。不了解汇编,编译原理,怎么知道程序运行时要多长时间要多少內存,就不能编岀高效的代码。 如果没有学好基础一开始就去学.net,java这些越往后就会觉得越吃力,它们涉及的技术太多了,而且不但 在更新,对于三层啊,mvc,orm这些架构,你只会用也不明白为什么用,就感觉心里虚,感觉没学好。而你把 面向对象,软件工程,设计模式这些基础学好了再去看这些就可以一不变应万变。 大家不要被新名词、新技术所迷惑NET、ⅩM等等技术固然诱人,可是如果自己的基础不扎实,就像是在 云里雾里行走一样,只能看到眼前,不能看到更远的地方。这些新鲜的技术掩盖了许多底层的原理,要想真正 的学习技术还是走下云端,扎扎实实的把基础知识学好,有了这些基础,要掌握那些新技术也就很容易了 开始编程应该先学CC+十,系统api编程,因为它们更接近底层,学习他们更能搞清楚原理。学好了c/C+ 编程和基础,再去学习mηfc,net这些就会比较轻松,而且很踏实。假设学习νB编程需要4个月,学习基础课程和 VC的程序设计需要1年。那么如果你先学VB,再来学习后者,时间不会减少,还是1年,而反过来,如果先学习 后者,再来学VB,也许你只需要1个星期就能学得非常熟练。 bbs. theithome com 编程就好比练功,如果学习. net mfc,vb等貝体的语言和工具是外功(招式),对基础的学习就是內功,只注重 招式而內功不扎实是不可能成为高手的。很多人会认为《射雕英雄传》中马玉道长什么都没有教郭靖,马道长 教的表面看来是马步冲权实则都是内功心法,郭靖拜师洪七之后开始练习降龙十八掌凭借的就是这深厚的内 功,吞食蝮蛇宝血又加上练习了周博通传授的九阴真经和外加功夫双手互博技之后,终于练就行走江湖的武 功,由此可见马玉道长传授给了郭靖的是最基础的,也是最重要的观念编程也好比盖髙楼,根基没打好早晩有 天会挎掉的,而且盖得越高,损失也越惨重。这些底层知识和课本不是没有用也不是高深的不能学,而是我 们必须掌握的基础。 这些是个人的愚见,说的不是很清楚,大家可以看看这些前辈们的经验,相信看完后大家一定会有所体会 的。为了方便大家阅读,我把这些前辈们的建议的文章整理成了pdf大家在下面下载吧!希望对大家有帮助。pdf tttie:http://bbs.theithome.com/read-htm-tid-123.html 说了这么多无非是想告诫大家要打好扎实的基础,不要只顾追求时髦的技术,打好基础再去学那些技术或是 参加些培训,对自身的发展会更好的。 基础这么重要怎样学好它呢?我觉得学好它们应该对照这些基础课程所涉及的方面多看一些经典书籍像算 法导论,编程珠玑代码大全(具体介绍在本论坛每本书的版块里)等这些经典书籍不仅能帮助我们打好基础,而且 对我们的程序人生也能产生莫大的影响,相信认真研究看完这些书籍后,我们的程序之路会十分顺畅。然而这 些书籍并不好读有些甚至相当难读,国内的大学用这些书当教材的也不多这些书又偏向理论自己读起来难免会 有些枯燥无味。于是就想到建一个论坛,大家共同讨论学习这些书籍,就会学的更踏实更牢固更有趣这样就能 为以后的学习打下扎实的基础 本论坛特色 bbs. theithome com 1为计算机初学者或基础不太扎实的朋友指明方向,要注重内功 2.为学习者推荐经典书籍,指明应看哪些书籍,怎样练內功 3为学习者提供一个交流的地方,更容易学好,不会那么枯燥 4对每本书分章分别讨论,更专,会学的更踏实更牢固 5讨论的都是经典书籍,每一本都会让我们受益匪浅对每本书分别讨论是很有意义的。 bbs. theithome com 计算机经典书籍汇总,下载地址http://bbs.theithome.com/read-htm-tid-308.html 1.计算机科学概论 9.编译原理 14.]inux/unix编程基础 计算机科学概论 编译原理(清华第2版) 鸟哥的 Linux私房菜:基础学习篇 2.计算机数学基础 编译原理及实践 鸟哥的Liux私房菜:服务器架设篇 高等数学 编译原理:原则,技术和工具 1inux程序设计 线性代数 现代编译原理一C语言描述 UNIX坏境高级编程 概率论与数埋统计 高级编译器设计与实现 Unix网络编程卷1 离散数学及其应用 10.操作系统原理 UNIX网络编程卷2 离散数学教程(北大版 操作系统概念 UNIX编程艺术 什么是数学 现代操作系统 UNIX Shell范例精解 具体数学:计算机科学基础 链接器和加载器 15. Linux/unix内核源代码和驱动程序 3.C语言 程序员的自我修养链接、裝载与库inux内核设计与实现 谭浩强C程序设计 自己动手写操作系统 LINUX内核源代码情景分析 操作系统设计与实现 C primer plus 深入理解LINX内核 11.计算机网络 The C programming language Linux内核完全注释 C和指针 计算机网络( Computer Networks) Linux设备驱动程序 G专家教程 TCP-IP详解卷1 16.C+语言 C陷阱与缺陷 TCP-IP详解卷2 C+编程思想2 c语言解惑 TCP-TP详解卷3 Essential c+t C标准库 用TCP/P进行树际互联(第一卷) C+t primer C+程序设计语言 你必须知道的495个C语言问题 用TCP/IP进行网际互联第二卷 4.算法与数据结构 用TCP/IP进行网际互联第三卷 C+语言的设计和演化 数据结构(清华版) 12.软件工程和面向对象程序设计 Accelerated C++ 数据结构与算法分析一C语言描述 C++编程思想卷1 Effective ctt 编程珠玑 java编稈思想 More effective c+- 编程珠玑II 软件工程( Software. Engineering) Exceptional C+t 软件工稈:实践者的硏究方法 More exceptional c+t 算法导论 计算机程序设计艺术卷1 深入浅出面向对象分析与设计 C+设计新思维 计算机程序设计艺术卷2 head first设计模式 深度探索C艹对象模型 计算机程序设计艺术卷3 道法自然:面向对象实战指南 C++沉思录 5.电子技术基础 面向对象分析与设计 C++ Templates: The Complete Guide C++⊥AQs 模拟电子技术(童诗白版 敏捷软件开发:原则、模式与实践 数字逻辑与数字集成电路(清华版) 设计模式:可复用面向对象软件的基础17.标准库STL使用 6.汇编语言 测试驱动开发 C+标准程序库 汇编语言(工爽版) 重构一改善既有代码的设计 Effective stl 80X86汇编语言程序设计教程 代码大全 泛型编程与STL Intel汇编语言程序设计 程序设计实践 18.S们源代码 IBM PO汇编语言程序设计(国外版) 程序员修炼之道:从小工到专家 ST源码剖析 高级汇编语言程序设计 卓有成效的程序员 19.java语言 侏护方式下的80386及其编程 代码之美 java编程思想 黑客反汇编揭秘 人月神话 Java编程规范 Windows境下32位汇编语言程序设计计算机程序的构造和解释 7.计算机硬件原理 观止-微软创建MT和未来的夺命狂奔 计算机组成-结构化方法 弋码优化:有效使用内存[美]克里斯·卡巴斯基 微机原理与接口技术(陈光军版) 编程高手箴言(梁肇新) 算机体系结构(张晨曦版) 游戏之旅我的编程感悟(云风) 计算机组成与设计硬件/软件接口 13. windows编程基础 Intel微处理尜结构、编程与接口 Windows操作系统原埋 计算机体系结构(量化研究方汝) Inside Windows 2000 编程卓越之道卷1 深入解析 Windows操作系统 编稈卓越之道卷2 天书夜读:从汇编语言到 Windows内核编程 深入理解计算机系统 windows,程序设计 编码的奧秘 WⅠ NDOWS核心编程 8.数据库系统原理 数据库系统概念 数据库系统导论 数据库系统实现

...展开详情
试读 127P 编程珠玑高清
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
编程珠玑高清 39积分/C币 立即下载
1/127
编程珠玑高清第1页
编程珠玑高清第2页
编程珠玑高清第3页
编程珠玑高清第4页
编程珠玑高清第5页
编程珠玑高清第6页
编程珠玑高清第7页
编程珠玑高清第8页
编程珠玑高清第9页
编程珠玑高清第10页
编程珠玑高清第11页
编程珠玑高清第12页
编程珠玑高清第13页
编程珠玑高清第14页
编程珠玑高清第15页
编程珠玑高清第16页
编程珠玑高清第17页
编程珠玑高清第18页
编程珠玑高清第19页
编程珠玑高清第20页

试读结束, 可继续阅读

39积分/C币 立即下载 >