• 数据结构与算法分析:C++描述(第3版)》是数据结构算法分析的经典教材,书中使用主流的程序设计语言C++作为具体的实现语言。书的内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法算法...
  • 数据结构与算法分析C++描述第三版英文版(Mark Allen Weiss)Data Structures And Algorithm Analysis in C++.pdf
  • 初学者,先学习Weiss的《数据结构与算法分析 C语言描述》或者严蔚敏的《数据结构(C语言版)》。对于如何消化掉这本书,我初步给出一个建议: 读上Weiss的《数据结构与算法分析 C语言描述》三遍,能坚持下来,你的...
  • 有的发一个给我..谢谢...

    有的发一个给我..谢谢...

      我的邮箱是154908276@qq.com

    展开全文
  • 数据结构与算法C#语言描述》是在.NET框架下用C#语言实现数据结构算法的第一本全面的参考书。《数据结构与算法C#语言描述》介绍的方法非常实用,采用了时间测试而非大O表示法来分析算法性能。内容涵盖了数据结构...
  • 我将分别介绍纯C、C++以及widows编程、数据结构算法以及图形库等等的教材。市场上这些主题中任意一个的教材都是汗牛充栋,读都读不完。不过很显然,大家都公认的经典,也只是那么寥寥数本而已。下面推荐的都是这样的...

    推荐几本好书么
        当然,FAQ的目的之一就是这个。我将分别介绍纯C、C++以及widows编程、数据结构算法以及图形库等等的教材。市场上这些主题中任意一个的教材都是汗牛充栋,读都读不完。不过很显然,大家都公认的经典,也只是那么寥寥数本而已。下面推荐的都是这样的著作,当然总是有好作品在不断推出,我这里不可能把他们都列举出来,你可以用自己的犀利的目光把他们挑出来。

    首先是纯C的教材
        第一本:H.M.Deitel和P.J.Deitel的《C HOW TO PROGRAM》(C程序设计教程)。
        作者是父子,从事语言教材的编写合计超过40年,本书被美国众多高校选用为教材,既可入门也可翻阅,甚好。本FAQ作者认为如果你只打算看一本的话,那就选他好了。

        第二本:Brian W.Kernighan和Dennis M.Ritchie 的《The C Programming Language 》(C程序设计语言)。
        此书简称K&R,由C语言的创建者撰写,是全球销售最多的C语言教材,其品质不容置疑。不过不适合入门,适于在入门之后巩固提高。实体书有原版和译本购买,电子版英文较多。

        第三本:谭浩强的《C程序设计》。
        优点在于,面向中国学生,语言易于理解,而且全书篇幅小,看过的人多,容易找到人请教。但是各方面的概念不深入,浅尝辄止,实际上还有些小错误,不是很严谨。因此适合第一次入门学习,例题做完基本就可以抛弃了。有实体书和电子版下载。同时配套有习题集和习题解答,适合自学。

        第四本:王大刚先生的《C语言编程宝典》。
        质量不错,与老谭的书一样非常适合中国学生,而且对于TC的图形编程讲解非常透彻。本人没有发现实体书,可能只发布在网络上,在VCgood论坛有转载:
    http://www.vcgood.com/bbs/forum_posts.asp?TID=1560&PN=2
    http://book.chinaz.com/C/C/index.html

        第五本:无名作者的《C语言初学者入门讲座》
        VCgood论坛转载,作者未知,质量同上一本。http://www.vcgood.com/bbs/forum_posts.asp?TID=1294&PN=4

        第六本:Kenneth A.Reek 的《C和指针》
        进阶读物,把指针一章演绎为一本书可见其技术精度。指针是C的灵魂,能领会本书中的理念,才能算是真正明白了C指针的奥妙,才算懂得了C。

        第七本:Andrew Koenig 的 《C陷阱与缺陷》
        进阶读物,在认真读完上面的入门书之前,暂勿阅读。本书畅销14年历久不衰,足证品质。

        最后一本:ISO C89规范/C99规范
        一切关于C语言的疑问,只有一件东西最权威,那就是ISO的规范。但这不是正式出版物,是类似法律文本的技术说明,而且只有英文版。新手阅读,提防吐血而亡。


    然后是C++的教材

     C++比C复杂的多,所以教材也就纷繁芜杂。既有综合性入门性的,也有专项深入的,阅读要循序渐进,以下分阶段介绍(以下文字有部分引用自他人评介)。
      首先是毫无基础的时候,先要初步掌握语法并形成编程的概念
      
       level 0:
        H.M.Deitel和P.J.Deitel的《 C++ How to Program 》(C++大学教程)。
        又是这对父子。有很多号称C++入门的书,但经我的观察,如果要选择能推荐给毫无编程概念的新手用的书,这本算是佼佼者了。此父子的《C程序设计教程》我已推荐了。
      
        仍然是K&R,Brian W.Kernighan和Dennis M.Ritchie 的《The C Programming Language》(C程序设计语言)。
        尽管C++之父亲口说,最好把C++看作一门新语言来学习,但我个人认为,一开始学习C至少有两大好处。相比C++,C还是非常简单的,易于掌握,避免你过早陷入C++的语法泥潭。同时,学C能让你对计算机的底层运行有所认识,建立良好的概念。


        钱能的《C++程序设计教程》
        国内C++教材中较好的一本,作者是教师,总结多年教学实践的经验写成的,比较适合国内学生。
        PS:老谭也有一本C++教材,在此就不太推荐了,它完全是用C的思维来看C++。

        当读者有一定c/c++基础
        推荐的阅读顺序:
        level 1
        从Stanley B.lippman著 侯捷 译的《essential c++》开始,短小精悍,可以对c++能进一步了解其特性。Stanley B.Lippman的职业是提供关于C++和面向对象的训练、咨询、设计和指导。他也是Bjarne Stroustrup领导的Bell实验室Foundation项目的成员之一,负责C++程序设计环境中的对象模型部分。简单说,他是C++的创建者之一。
        以Stanley B.Lippman,Josee LaJoie,Barbara E.Moo的《c++ primer》作字典和课外读物,因为太厚不可能一口气看完,当然你也可以用它作为主力教材。Lippman说过了,Josee LaJoie是C++标准委员会原负责人,Barbara E.Moo 是独立咨询顾问,参与了第一个使用C++编写的商业产品的开发,领导了公司中第一个C++编译器项目。
        C++之父Bjarne Stroustrup的《the c++ programming language》,简称BS的TCPL,全面而深入的书,缺点也是太厚。
        这个阶段也可以延用前阶段Detiel父子的教材。

     

        level 2 这个阶段就要养成好习惯
        然后从Scott Meyers的《effective c++》开始转职,这是圣经,请遵守10诫,要经常看,没事就拿来翻翻
        接着是 Herb Sutter的《exceptional c++》。此人是C++标准委员会的主席,主席说话,谁有异议。
        顺下来就是Scott Meyers的《more effective c++》和Herb Sutter的《more exceptional c++》,请熟读并牢记各条款

     

        level 3 这个阶段 把C++的类搞透
        Stanley B.lippman的《insied the c++ object model》(深度探索C++对象模型)看过后如一缕清风扫去一直以来你对语言的疑惑,你终于能明白compiler到底都背着你做了些什么了,这本书要细细回味,比较难啃,最好反复看几遍,加深印象。
        看完上一本之后,这本Bjarne Stroustrup的《The design and evolution of c++》(C++的设计与演化)会重演一次当年C++他爹在设计整个语言过程中的历程。
        Stephen C. Dewhurst的《C++ Gotchas: Avoiding Common Problems in Coding and Design》(C++程序设计陷阱)会帮你在设计层面避免错误。

     

        level 4 这个阶段深入STL吧
        Nicolai M.Josuttis的《the c++ standard library》(C++标准程序库—自修教程与参考手册)是stl的字典,什么都可以查得到。
        Scott Meyers的《effective stl》,它和圣经一样是你日常行为的规范。发现没有,Scott Meyers先生一直在搞effective系列。
        Matthew H. Austern的《generic programming and the stl》(泛型编程与STL)让你从OO(面向对象)向GP(泛型编程)转变。
        光用不行,我们还有必要了解stl的工作原理,那么侯捷的 《stl源码剖析》会解决你所有的困惑。

        level 5 彻底掌握模版泛型编程
        对于c++无非是OO和GP,想进一步提升OO,Herb Sutter的《exeptional c++ style》是一本主席这么多年的经验之谈,是很长esp的。
        一位stl高手是不能不去了解template的,《c++ template》是一本百科全书,足够你看完后对于GP游刃有余。
        Andrei Alexandrescu的《modern c++ design》是太过聪明的人写给明眼人看的。

     

        level 6
        这个时候,对于C++语法本身,你应该是已经到了随心所欲的境界,你所要练习的大概就是大规模的C++程序的设计以及一些通用的高效库的使用,以及为什么要这样做的理由。
        所以,《C++ 输入输出流及本地化》《C++ Network Programming》《大规模C++程序设计》是你需要的。
        同时,C++教材中的异类:Barbara E.Moo和Andrew Koenig的《Ruminations On C++》(C++ 沉思录)是值得你一看的,他集中反映了C++的关键思想和编程技术,说明了C++是什么样的以及能够做些什么,不仅告诉你如何编程,还告诉你为什么要这样编程。本书曾出现在众多的C++专家推荐书目中。


        和C一样,同样有最后一本书
        ISO+IEC+14882-1998 C++规范。这可不是宝典圣经,这就是C++的法律,一切疑问以此为准到此打住。不过,有个脚注,某些具体情况取决于编译器实现。

     

     

    接下来是Windows编程
        至少在国内来说,Windows环境下的编程还是很有市场的。
        第一本书:Charles Petzold 的 《Programming Windows》(Windows程序设计)。
        如果说,在windows编程领域只能翻阅一本书的话,那就是他了。《Windows程序设计》由微软出版社在1988年首次出版,后来被认为是这方面最好的导论性读本。在1994年5月,Petzold作为仅有的七个人之一(并且是唯一的作家)被《Windows Magezine》和Microsoft公司授予Windows Pioneer奖,以表彰他对Microsoft Windows的成功做出的贡献。这本书经典到这个程度,以至对于Windows程序员来说,“从Chares 的(Window程序设计)一书中寻找答案。”几乎成了一句至理名言。
        你可以在这个地方观看到他的外观,http://www.charlespetzold.com/pw5/,国内书店有售,电子版则需要仔细搜索。

        第二本:Jeffrey Richter 的《ProgrammingApplicationsforMicrosoftWindows》(Windows核心编程)和《Advanced Windows》(Windows 高级编程指南)
        和上面这本书难分伯仲。这么说吧,你读了之后就会后悔,后悔为什么没有早点读他。建议先看高级,再看核心。

        个人认为除非windows发生革命性的变化,否则看完这三本书,足以应付通常的Windows编程。

        上面三本书介绍的是直接使用WindowsAPI实现应用,总的来说那是一种很基础但很繁琐的方式。Windows下有很多的编程库可以使用,VC和BCB都自备了优良的库。
        在VC来说,存在版本的差异,如果是6.0版本,那么你基本只有MFC这一种选择,但对于2002以后的版本,包括新推出的2008,MFC、ATL、.net都不错。
        对于MFC。
        要学会怎么用,可以看一下这几本:
        微软出版社授权的中文版系列书 由David J.Kruglinski,Scot Wingo,George Shepherd写的《Programming Visual C++ 6.0 技术内幕(第5版)》,经典的“Visual C++技术内幕”的第5版。
        清华大学出版社出版杨永国 的《Visual C++ 6.0实用教程(第2版) 》,这本不是那么经典,同类多得很,但好处是便宜,而且能够买到,有些书已经买不到了。
        如果想知道MFC的原理,侯俊杰先生的《深入浅出MFC 》(Dessecting MFC)就值得你仔细阅读。


        对于VC2002--2008中的.net,单独讲授的似乎目前还没有像《Windows程序设计》那样经典的书出现,毕竟.net出现的时间也不长。但把.net MFC ATL等综合在一起讲的,倒还是有一些。
        由H.M.Deitel,P.J.Deitel,J.P.Liperi和C.H.Yaeger共同编写的《Visual C++.NET:How To Program 》(Visual C++.NET大学教程)品质算是上乘。还记得Deitel这对父子作者么,在chinapub上可以看到父子俩合著的教材有47套之多,而且个个畅销,我觉得他们俨然就是美国的谭浩强,只是水平高出不少。
        George Shepherd,David Kruglinski 的 《Visual C++ .NET技术内幕(第6版)》,就是上面那本书的.net升级。
        IVOR HORTON的《VISUAL C++ 2005入门经典》也可一看。


        BCB在版本6以前用的是著名的VCL库,BCBX另起炉灶,用的是wxWidgets库。由于对BC,作者自己涉猎不多,所以这两套库的教材,请大家自行查找。

        就像C++和C的规范文件一样,Windows编程中,也有一件类似万宝全书的神物,那就是Microsoft自己推出的MSDN。
        MSDN是Microsoft Software Developer Network的简称。这是微软的针对开发者的开发计划。你可以在http://msdn.microsoft.com看到有关软件开发的资料。在VisualStudio中包括MSDN Library的光盘,其中包括VisualStudio的帮助文件和许多与开发相关的技术文献。MSDN Library每个季度更新一次,可以向微软订阅更新光盘,不过价格不便宜。
        MSDN就是微软的技术大全,所有微软的软件系统的开发的已公开资料,都在上面。如果在那里也无法找到答案,那你只能想办法咨询微软的内部工程师求得隐藏秘籍。不要妄想能够完全阅读它,3G容量的文档(大部分是文本,不是图片和视频),实在太过巨大了。

     

     

    Unix/Linux/BSD系统

    相对于Windows,在UNIX下编程获得相关文档要方便很多。由于历史原因,能够看到的教材基本上都经受了考验,几乎个个都是经典,不象Win下有鱼龙混杂泥沙俱下的现象。
    三本可以替换的入门书,任选其一即可:
    Bruce Molay的《Understanding Unix/Linux Programming A Guide to Theory and Practice》(Unix/Linux编程实践教程)应该是你的第一本书。一句话,大家都说好。
    Kay A.Robbins(美), Steve Robbin(美)的《UNIX Systems Programming》(UNIX系统编程)。他是一本介绍UNIX系统的工作原理以及学习UNIX系统程序编写方法的经典教材,一本程序员不可多得的案头必备参考书。
    Neil Matthew(英),Richard Stones的《Beginning Linux Programming》(Linux程序设计)。本书是Linux程序设计领域的经典名著,以筒单易懂、内容全面和示例丰富而受到广泛好评。


    随后,以下几本书排名不分先后,分属不同方面,想深入的伙计建议都看:
    W.Richard Stevens, Stephen A.Rago的《Advanced Programming in the UNIX Environment》(UNIX环境高级编程)
    W.Richard Stevens,Bill Fenner, Andrew M. Rudoff,Richard W.Stevens的《Unix Network Programming》(UNIX网络编程),注意这套书是三卷本。
    宋宝华的《Linux设备驱动开发详解》。一本介绍Linux设备驱动开发理论、框架与实例的书,是作者多年Linux设备驱动开发从业经验的总结。能够在众多海外强手的教材阵中脱颖而出,足见作者的实力。
    Robert Love 的《Linux Kernel Development》(Linux内核设计与实现)。内核相关概念及如何使用内核介绍的非常到位,全书偏应用,主要强调如何用,以及为了用而需要了解的内核实现。
    Daniel P. Bovet和Marco Cesati 的《Understanding the Linux Kernel》(深入理解Linux内核),分析内核代码几乎无出其右者。
    John Lions(澳)的《Lion'Cornmentary on UNIX 6th Edition With Source Code》(莱昂氏UNIX源代码分析)。本书由上下两篇组成。上篇为UNIX版本6的源代码,下篇是莱昂先生对UNIX操作系统版本6源代码的详细分析。本书语言简洁透彻,曾作为未公开出版物在黑客界广泛流传了二十多年。现在MIT的操作系统的研究生课程里面依然采用的是这本书,unixV6的代码量小,门槛比动辄数百万行的linux更适合初学者。绝对是神作,很难买到这本书,所以如果遇上要毫不犹豫弄到手。


    和MSDN类似,Unix/Linux/BSD下也有一个文档大全似的东西,而且只要一个命令就能打开他。他就是所有Unix系统都会自带的man page,完整安装的情况下,他已经存在系统中,更重要的是,他是免费的,相对照的MSDN宇宙版至少需要几百美元。
    最后,在UNIX下无论如何都必须翻阅的教材是由公认的Unix编程大师、开源运动领袖人物之一Eric S. Raymond亲自撰写的《The Art of Unix Programming 》(UNIX 编程艺术),这本书著名到他有个专用缩写: TAOUP。他不是在技术层面讨论问题,而是从哲学角度来讨论UNIX编程,从而把编程上升到了艺术的高度。

     


    数据结构和算法

    数据结构就是在机器里组织数据的方法,而算法就是解决某个问题的总思路。数据结构和算法有两个层次,一开始的时候,它是语言相关的,尤其是对于数据结构来说,因此C和C++的教材要分开。后来在算法的层面,他就只是一种思想,也就和语言无关了。
    清华教授严蔚敏和广东工业大学教授吴伟民的《数据结构(C语言版)》,这是清华计算机系的标准教材,还有什么要补充的么。

    清华教授殷人昆的《数据结构(用面向对象方法与C++描述)》,也是清华的教材。
    Mark Allen Weiss的《Data Structures and Algorithm Analysis in C》(数据结构与算法分析--C语言描述)和《Data Structures and Algorithm Analysis in C++》(数据结构与算法分析--C++语言描述)。数据结构和算法分析的经典教材。

     

    之后就可以看深入一点的东西了:

    王晓东的《算法设计与分析》。国内本科教材,书写得不错。
    M.H.Alsuwaiyel(沙特)的 《Algorithms Design Techniques and Analysis》(算法设计技巧与分析)。本书结构简明,内容丰富,适合于作为计算机学科以及相关学科算法课程的教材和参考书,尤其适宜于学过数据结构和离散数学课程之后的算法课教材。同时也可作为从事算法研究的一本好的入门书。
    Thomas H.Cormen, Charles E.Leiserson的《Introduction to Algorithms》(算法导论)。这是麻省理工学院计算机系的算法教材,已经成为世界范围内广泛使用的大学教材和专业人员的标准参考书。

    经典中的经典,每一个想要掌握算法精髓的人都必须看的书,算法书中的圣经,他就是:
    大师中的大师 Donald E.Knuth的《Art of Computer Programming》(计算机程序设计艺术)。
    Donald E. Knuth(唐纳德 E. 克努特,中文名高德纳)是算法和程序设计技术的先驱者、计算机排版系统TEX和METAFONT的发明者,他因这些成就以及大量富于创造力和具有深远影响的著作(19部书,160篇论文)而誉满全球。这么说吧,目前你所能听说过或者还活着的那些计算机软件大牛,没有哪个不直接或间接的受过Knuth的教导。他强悍的程度只用一件小事就可以说明,在撰写这套《计算机程序设计艺术》的过程中,由于感到原有排版系统的不足,他特地重新制作了一套新的计算机排版系统,这套称为TEX的东西目前已经是出版界的标准系统。

    《计算机程序设计艺术》这套关于算法分析的多卷论著已经长期被公认为经典计算机科学的定义性描述。迄今已出版的完整的三卷已经组成了程序设计理论和实践的惟一的珍贵资源,无数读者都赞扬Knuth的著作对个人的深远影响,科学家们为他的分析的美丽和优雅所惊叹,而从事实践的程序员已经成功地将他的“菜谱式”的解应用到日常问题上,所有人都由于Knuth在书中表现出的博学、清晰、精确和高度幽默而对他无比敬仰。微软的盖茨曾经说:如果你能完成他书中50%的习题,请尽管给他寄简历。(事实上,用盖茨来衬托Knuth简直是对Knuth先生的侮辱)

     

    此书原定计划为七卷。目前已出版四卷,作者还在撰写后续部分。已出版的分别为:

    第1卷 基本算法 Volume 1: Fundamental Algorithms
    第2卷 半数值算法 Volume 2: Seminumerical Algorithms
    第3卷 排序与查找 Volume 3: Sorting and Searching
    第4卷 组合算法 包括:
    第4卷 第0册 组合数学和布尔函数 Introduction to Combinatorial Algorithms and Boolean Functions
    第4卷 第1册 尚未出版
    第4卷 第2册 生成所有元组和排列 Volume 4, Fascicle 2: Generating All Tuples and Permutations
    第4卷 第3册 生成所有组合和分划 Volume 4, Fascicle 3: Generating All Combinations and Partitions
    第4卷.第4册 生成所有树 Volume 4,Fascicle 4: Generating All Trees History of Combinatorial Generation


    各种图形以及其它库
    图形库,著名的有两个:OpenGL和DirectX。
    OpenGL(“Open Graphics Library”)是一个性能卓越的三维图形标准,是图形硬件的软件接口。他是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准,具有使用简便、效率高、便于移植、性能卓越等特点,独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植。目前包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软ARC/INFO等等。包括迪斯尼梦工厂等好莱坞厂商的大批电脑特效程序都是使用的OpenGL库。

     

    OpenGL有两大经典教材:
    OpenGL体系结构审核委员会,Dave Shreiner, Mason Woo, Jackie Neider, Tom Davis 联合撰写的《OpenGL Programming Guide: The Official Guide to Learning OpenGL》(OpenGL编程指南),此书因封面为红色,被大家爱称为“红宝书”。
    Richard S Wright和Benjamin Lipchak的《OpenGL SuperBible》(OpenGL超级宝典),是另一本合适的入门教材。
    OpenGL结构评审委员会的《OpenGL Reference Manual》(OpenGL 参考手册),就和他的名字一样,它是一本文档大全,和“红宝书”相对应,他被称为“蓝宝书” 。

    按照前辈的经验,有红蓝两宝书足矣。不过,OpenGL社区的实力雄厚的很,好为人师的大牛也不少。有一位昵称NeHe的大牛,他在自己的网站上放了一整套完整的OpenGl教程,实例教学讲解清晰,而且会跟随OpenGL的发展在随时更新,更重要的是,除了C/C++的标准例程之外,他的例程还几乎涵盖世界上的所有语言,如果想用自己喜欢的独特语言,可以参考页面最下方的联接。NeHe的教程在http://nehe.gamedev.net/。同时,Nate Robin的例子对你理解OpenGL很有帮助。http://www.gamedev.net/reference/articles/article839.asp
    OpenGL最权威的资料在他的官方网站 http://www.OpenGL.org的Documentation中,可以下载到官方教程和例子程序。

     

    DirectX是微软提供的一种应用程序接口(Application Interface)。简单的说它是一个提高系统性能的辅助加速软件。"Direct"的意思是"直接的",而"X"则意味着"无限"。事实上它是一个.dll(动态连接库Dynamic link library)的文件集合。通过这些动态连接库文件,开发者们可以在不考虑设备差异的情况下访问硬件最底层。这项特性使程序员从无尽的硬件驱动程序中解脱了出来。DirectX同时封装了一些COM(Component Object Model)对象,这些 COM 对象为访问系统硬件提供了一个主要的接口。DirectX是一种游戏开发利器,Windows下的大量游戏在制作时都用到了它。DirectX包括很多组件,他们按功能划分为:DirectDraw,Direct3D,DirectMusic,DirectSound,DirectShow,DirectPlay,DirectInput,DirectSetup and AutoPlay等等。

    在DirectX中最重要并且最具有代表性的是Direct3D和DirectDraw(在DirectX7.0之后被合并进了Direct3D),它的主要功能就是3D图形。Direct3D和OpenGL处于竞争关系,很难评论他们孰优孰劣。OpenGL专攻图形,而且适用众多平台。而DirectX可以在Win平台下获得多样的服务,而不止是图形。
    如果你想学习如何使用DirectX,那么必须得掌握BASIC或Delphi或C++/C#等语言中的一种,纯C是不行的。同时,掌握Win32编程技术以及一些其他相关的知识也是必需的。
    Frank D.Luna的《DirectX 9.0 3D游戏开发编程基础》可以作为你的入门书。DierctX合适的入门书其实很多,重点是要注意版本要跟上最新的DircetX才行。
    微软的东西,最标准的教材就是MSDN。想深入学习DirectX,就去翻阅MSDN好了。而且,那里也有不错的入门资料。

     
    OpenGL和DirectX的最新进展往往是由显卡厂商作出的,经常去Nvidia和ATI的主页上去关注最新技术是个好选择。

    其他库,比如用于构建窗口程序框架的GTK、QT、wxWidgets等,用于科学计算的Blitz、CGAL,网络通讯的ACE,加解密用的Crypto++,测试用的CppUnit,XML用的xml4c、XMLBooster、Xerces c++,当然也少不了即将加入标准库的Boost,这些库由于在不断的发展进化中,实体出版物相对较少,但他们自带的电子文档和相关主站上的资料通常足以满足需求。请记住,既然这些库的作者把他们发布给大家用,他当然要给齐资料让我们知道怎么用才行。

     

     

    软件工程思想

    当软件膨胀到一定程度,它就不是一个人能搞定的了。这个时候,就要像建筑上对待一个大型工程项目一样,通过有效的组织管理来进行软件生产。这种思想就叫软件工程。而实际上,即使是个人开发者,在初窥编程门径之后,也建议学习软件工程,从而培养起好的编程习惯便于将来的集体合作。所谓好习惯的养成是很难的而改掉坏习惯就更难,所以千万不要养成坏习惯。
    林锐、韩永泉的《高质量程序设计指南--C++/C语言》会让你大吃一惊,原来你原先的编程习惯就有这么多的漏洞。

    Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides的《Design Patterns:Elements of Reusable Object-Oriented software》(设计模式:可复用面向对象软件的基础),这是软件复用的权威教材,不过似乎要有很久编程经验之后才能领会。
    Andrei Alexandrescu 著 侯捷 译的 《Modern C++ Design Generic Programming and Design Patterns Applied 》(C++设计新思维——泛型编程与设计模式之应用)是从实例上演示设计模式的。

    Martin Fowler著 侯捷 译的 《Refactoring: Improving the Design of Existing Code》(重构:改善既有代码的设计),与巨著《设计模式》并称"软工双雄",全美销量超过100000册,亚马逊书店五星书。
    Ian Sommerville的《Software Engineering》(软件工程)直接以软件工程为名的书,猜猜也知道有多强,此书已经再版8次。
    Frederick P.Brooks的《The Mythical Man-Month: The Essays on Software Engineering》(人月神话)。出版于1975年的《人月神话》是软件开发方面的经典作品。在软件领域,很少能有像《人月神话》一样具有深远影响力并且畅销不衰的著作。Brooks博士为人们管理复杂项目提供了最具洞察力的见解,既有很多发人深省的观点,又有大量软件工程的实践。32年后的今天,他的思想仍然引领我们。他是和《计算机程序设计艺术》一样经典的著作。


    找书的诀窍

        可能有一天你会踏入一个别的编程领域,比如人工智能、加解密和密码学、网络与通讯、嵌入式等等,我并没有在这里列出书单,又或者你打算自己找些书。有什么能快速找到好书的技巧么,除了在线上论坛新闻组等地方寻找别人的推荐评价,在老师和前辈师兄师姐那里咨询之外,还有一个极为简洁的方法,那就是去找著名大学的计算机教材。声名在外的麻省理工、加州伯克利和清华,他们的教授们的眼光绝对是你可以信任的。买书时参看出版社也是个好办法,国内的清华大学出版社、机械工业出版社、电子工业出版社、人民邮电出版社四家出好书的机会很高,不过有时翻译质量是个问题。国外的O'Reilly可以说是最专业的计算机图书出版商,他出的没有不是经典的。此外Addison Wesley、Microsoft Press、 Pearson几家也尽是出猛书的地方。这个经验可不止是适用于编程哦。

     

    光看书似乎不解决问题,难道要做题
        当然要做题,而且做题也要循序渐进。
        首先是教材正文中的示例,然后是书后的练习题。
        第二步可以做国家等级考试二级三级的C语言题。在线上可以找到,大量二级题库。三级题推荐南开的三级100题。此外VCgood群的共享文件中也有一些这一难度的题目。
        正如前面讲过,当第二步的题目都做完后,语法已经不是问题,应该开始学习数据结构和算法。这个方面的练习题可以去各大OJ。OJ是什么,请看下一节。


    OJ是什么
        OJ是OnlineJudge的缩写。OnlineJudge是一种在线裁判系统。她可以对程序原代码进行编译和执行,并通过预先设计的测试数据来检验程序原代码的正确性。
        首先,他是一个在线的题库,有很多习题,你可以任选其中之一来解答。然后,系统的编译器能够编译执行你所提交的代码。如果编译通过,针对每个题目,系统将使用自带的多组测试数据检验你的程序,如果程序都能得到正确的输出,那么你顺利地解决了这个问题。最后,系统还能对所有参与答题的用户进行统计和排名。

    OJ的题目大部分是关于算法的。题目的输入输出通常是命令行方式,而非图形界面。也就是说,要关注的不是平台的兼容性、文件的格式抑或窗口的布置这种无关紧要的细节,而是问题本身的逻辑实现。一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被Online Judge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。最后系统返回给用户一个状态,通过、错误、超时、溢出或是无法编译。
        Online Judge系统来自ACM和IOI大赛。由美国计算机协会(ACM Association for Computing Machinery)发起和组织的ACM国际大学生程序设计竞赛(简称ACM/ICPC)是目前世界上规模最大的计算机学科赛事。IOI则是国际信息学奥林匹克竞赛,和数学奥林匹克竞赛一样著名。Online Judge系统是IOI或ACM的训练题库,同时也是ACM和IOI的评分系统。

     

    哪里有可用的OJ
        以下几个OJ都很不错,请随意进入。也可以自行搜索,国内很多学校的OJ正在热火朝天的建设中,有的甚至直接作为了考试用系统。
            Vijos http://www.vijos.cn/
      内容丰富、分类清晰明了的中文在线评测题库。题量适中(目前大约400题左右),难度面向初学者和中学生,尤为重要的是,界面和题目都是中文的。
    xiao  U
    SACO http://ace.delos.com/usacogate/
        全美计算机奥林匹克竞赛(USACO)的训练网站,特点是做完一关才能继续往下做,与通常的OJ不同的是测试数据可以看到,并且做对后可以看标准解答(包括分析),所以如果大家刚开始的时候在上面那些OJ上总WA却找不到原因的话,可以试着来这里做做,看看测试数据一般是从什么地方阴你的。此外,虽然都是英文题目,但在国内有人做了翻译,有全部题目的中文译本,搜索即可。
        这两个强烈推荐新手前往。

        浙江大学的Online Judge http://acm.zju.edu.cn/
        国内最早也是最有名气的OJ,有很多高手在上面做题。特点是数据比较刁钻,经常会有你想不到的边界数据,很能考验思维的全面性。

        北京大学的Online Judge http://acm.pku.edu.cn/
        建立较ZOJ晚一些,但题目加得很快,现在题数和ZOJ不相上下,特点是举行在线比赛比较多,有报告称数据比ZOJ上的要弱,有时候同样的题同样的程序,在ZOJ上WA(wrong answer),在POJ上就能AC(accomplished)
        这两个可以说是国内顶级水平了。

    展开全文
  • 数据结构与算法分析英文原版第四版 Data Structures and Algorithm Analysis in C++ DSAlgoWeissMark
  • 数据结构与算法书目

    2019-01-10 09:32:08
    数据结构与算法分析 C++语言描述 4th 这本书内容不错...但是这个翻译水平是我见过最烂的...看原版吧这本。 算法导论 数学推导比较多,伪代码实现, 感觉应该在阅读其他书籍入门后再来看 大话数据结构 C语言...

    要补基础了,大概浏览了以下四本书:

    数据结构与算法分析 C++语言描述  4th  这本书内容不错...但是这个翻译水平是我见过最烂的...看原版吧这本。

    算法导论  数学推导比较多,伪代码实现, 感觉应该在阅读其他书籍入门后再来看

    大话数据结构   C语言描述,代码质量不行...  厕所读物 可看可不看

    邓俊辉  数据结构 (C++语言版) 比较了上面几本书之后,发现这本是真不错,配合习题集  ,内容丰富,代码规范。

    展开全文
  • 基础知识 stdio= standard Input output , h= head stdio.h =一个包含了输入输出的头文件, #include<stdio.h> × #include< cstdio> √ #include<math.h>...#include&...

    基础知识
    stdio= standard Input output , h= head
    stdio.h =一个包含了输入输出的头文件,
    #include<stdio.h> × #include< cstdio> √
    #include<math.h> × #include< cmath> √
    #include<string.h> × #include< cstring> √

    四种基本数据类型
    (一)int-32bit longlong-64bit
    *如果long long型赋大于2^31-1的初值,则需要在后面加LL
    如 long long bignum=123456798012345LL;
    (二)float-32bit (有效精度只有6-7位) double-64bit(有效精度15-16位)
    *碰到浮点型数据都用double来储存

    int main()
    {
    char c1='z',c2='j',c3=117;
    printf("%c%c%c",c1,c2,c3);
    printf("\n%c%c%d,c1,c2,c3);
    return 0;
    }
    

    输出结果:
    zju
    zj117
    (三)char
    char c; *字符变量,c可以被赋值
    char c=’e’; *’e’字符常量,单引号标注,可以被赋值给字符变量;
    *字符串常量,用双引号标记的字符集,不能赋值给字符变量;
    *转义字符:\n换行 \0空字符null
    (四)BOOL
    *整型常量在赋值给布尔型变量时会自动转换为true/false。如-1会转换成1;

    强制类型转换
    形式:(新类型名)变量
    观察例子里面强制类型转换并不是四舍五入,而是直接去掉尾数。
    被除数和除数都是整型时,也是直接去掉尾数。

    int main()
    {
    	double r = 12.56;
    	printf("%d", (int)r);
    	return 0;
    }
    

    输出结果:
    12

    int main()
    {
    	int a = 3, b = 5;
    	printf("%.2f", a / b);
    	printf("\n%.2f", (double)a / (double)b);
    	return 0;
    }
    

    输出结果:
    0.00
    0.60

    符号常量和const常量
    *符号常量=宏定义=宏替换,末尾不加分号 格式:#define 标识符 常量
    *const常量,末尾加分号 格式: const 数据类型 变量名=常量;
    符号常量× const常量√

    条件运算符
    条件运算符是C语言中唯一的三目运算符,格式为(A?B:C)
    即若A为真,执行B并返回结果,否则执行C并返回结果。

    位运算符
    算数优先级: 位运算符<算数运算符
    a<<x a左移x位
    a&b a与b按位与
    a|b a与b按位或
    a^b a与b按位异或
    ~a a按位取反

    使用scanf / printf 输入/输出
    cin / cout × scanf / printf √
    同一个程序中使用cout和printf ×
    scanf(“格式控制”,变量地址);
    pringf(“格式控制”,变量名称);
    longlong %lld scanf(“%lld”,&n);
    double %lf scanf(“%lf”,&db); %f printf("%f",db);*注意double特殊性
    char %c scanf(“%c”,&c); *并不以什么(空格或换行)为结束标志
    字符串string %s scanf(“%s”,str); *注意字符串无取值符并且以换行为结束标志
    *除了char / string,scanf都以空格为结束标志
    *如果想要输出’%’’’,需要在前面再加一个%或\,如

    printf("%%");
    printf("\\");
    

    *有几种比较常用的输出格式:
    %md: 不足m位以m位进行右对齐输出,空格补齐;超过m位保持原样;
    %0md: 同上,但用0补齐;
    %.mf:浮点数“四舍六入五成双”规则保留m位小数,“四舍五入”为round函数。

    • 遇到问题1
    int main()
    {
    	int a;
    	double b;
    	char c;
    	scanf("%d,%lf,%c", &a, &b, &c);
    	printf("a=%d,b=%lf,c=%c", a, b, c);
    	return 0;
    }
    

    错误:C4996 ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

    查找资料 :

    这里是引用
    ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存泄露。所以VS中提供了scanf_s()
    在最新的VS2017中也提供了scanf_s()在调用时,必须提供一个数字以表明最多读取多少位字符。
    如果想继续使用scanf这个不安全的函数可以使用宏命令来阻止错误的产生
    #define _CRT_SECURE_NO_DEPRECATE
    请把宏命令放在最前面
    或者编译选项中加/D_CRT_SECURE_NO_DEPRECATE
    或者在所有.c/.cpp文件前面添加#pragma warning(disable:4996)
    scanf()函数是标准C中提供的标准输入函数,用以用户输入数据
    scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,VS系统提供了scanf_s()。在调用该函数时,必须提供一个数字以表明最多读取多少位字符。
    scanf()在读取数据时不检查边界,所以可能会造成内存访问越界:
    //例如:分配了5字节的空间但是用户输入了10字节,就会导致scanf()读到10个字节
    char buf[5]={’\0’};
    scanf("%s", buf);
    //如果输入1234567890,则5以后的部分会被写到别的变量所在的空间上去,从而可能会导致程序运行异常。
    以上代码如果用scanf_s()则可避免此问题:
    char buf[5]={’\0’};
    scanf_s("%s",buf,5); //最多读取4个字符,因为buf[4]要放’\0’
    //如果输入1234567890,则buf只会接受前4个字符
    注: scanf_s最后一个参数n是接收缓冲区的大小(即buf的容量),表示最多读取n-1个字符.
    PS: 很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系统。


    版权声明:本文为CSDN博主「子沐」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_41953685/article/details/80708100

    以上查找资料部分为转载,通过上面的知识,使用了如下的解决办法:
    1、将scanf函数直接改成scanf_s函数,问题解决;(最推荐)
    2、在文件顶部加入宏命令:#define _CRT_SECURE_NO_WARNINGS
    3、或者编译选项中加/D_CRT_SECURE_NO_DEPRECATE(这个方法还不会。。)
    4、更改”属性"-“c/c++”-"SDL 检查"选择“否”即可。(推荐)

    解决完这个问题后,发现也可以解决同时遇到的另一个问题了

    • 遇到问题2
      《算法笔记》书中为了详细讨论 scanf的%c格式是可以读入空格与换行的,举了下面的例子:
    int main()
    {
    	int a;
    	char c, str[10];
    	scanf("%d%c%s", &a, &c,str);
    	printf("a=%d,c=%c,str=%s", a, c, str);
    	return 0;
    }
    

    在未解决上述问题时,程序出错退出。
    采用方法4可以很快速地解决问题,但这个方法显然不够优雅,下面思考如何采用方法1,也就是使用scanf_s函数解决这个问题
    首先来开看MSDN上对scanf_s的一段代码示例节选

    int i, result;
    float fp; char c, s[81];
    wchar_t wc, ws[81];
    result = scanf_s( “%d %f %c %C %s %S”, &i, &fp, &c, 1, &wc, 1, s, 81, ws, 81 );

    要注意,对于%d和%f是不用设置传入参数大小值的
    对于《算法笔记》中的例子,使用scanf_s函数时,注意对str[10]的数组,
    当输入为 “1 abcdeabcde” 时
    设置长度若为11

    int main()
    {
    	int a;
    	char c, str[10];
    	scanf_s("%d%c%s", &a, &c,1,str,11);
    	printf("a=%d,c=%c,str=%s", a, c,str);
    	return 0;
    }
    

    buf=11
    程序出现错误,其实这个错误很蠢,数组只有10位,怎么能写11呢,重要的是下面一个实验

    	scanf_s("%d%c%s", &a, &c,1,str,10);
    

    buf改成10,当输入仍为“1 abcdeabcde”的时候,str的输出出错
    在这里插入图片描述
    因为其实str中只能放9位字符,这里边界检查出错
    如果将输入改成“1 abcdeabcd”则输出符合期待为
    在这里插入图片描述
    getchar / putchar 输入/输出字符

    int main()
    {
    	char a, b, c;
    	a = getchar();
    	getchar();
    	b = getchar();
    	c = getchar();
    	putchar(a);
    	putchar(b);
    	putchar(c);
    }
    

    输入“abc"将会输出
    a

    c
    因为getchar可以识别换行符。

    typedef
    typedef能给一个复杂的数据类型起一个别名,如

    typedef long long LL;//给long long起别名为LL
    

    常用math函数
    *fabs(double x) 取绝对值;
    *floor(double x) / cell(double x) 向下取整/向上取整,返回double!型;
    *pow(double r,double p) 返回r的p次方;
    *sqrt(double x) 返回double型变量的算数平方根;
    *asin(double x)/acos(double x)/atan(double x)
    注意以上参数都是double型!

    有一个很有意思的规定scanf_s/scanf只有在读入< Enter>时才能换行的办法:

    	scanf("%[^\n]", str, 50);
    

    练习:
    例题1-1-1:按要求输出信息(1)

    编写一个C程序,要求在屏幕上输出一下一行信息。
    This is my first c program!
    输入

    输出
    This is my first c program!

    #include <cstdio>
    #include<cstring>
    
    int main()
    {
    	printf("This is my first c program!");
    	return 0;
    }
    

    例题1-1-2 按要求输出信息(2)

    题目描述
    编写一个C语言程序,输出以下信息:
    ********************.
    Very Good!
    ********************.
    输入

    输出
    ********************.
    Very Good!
    ********************.

    #include <cstdio>
    #include<cstring>
    
    int main()
    {
    	printf("********************\nVery Good!\n********************");
    	return 0;
    }
    

    例题1-2-1 求两个整数之和(1)

    题目描述
    设置3个变量a, b, sum,其中a, b用来存放两个整数,sum用来存放a, b两个数的和,通过赋值(即采用赋值运算符"=")的方式将a初始化为123,b初始化为456,并把两个变量相加的结果赋值给sum。
    输入
    无,变量在程序中以赋值的方式给定初值。
    输出
    sum = 结果

    #include <cstdio>
    #include<cstring>
    
    int main()
    {
    	int a=123, b=456, sum;
    	sum = a + b;
    	printf("sum=%d", sum);
    	return 0;
    }
    

    例题1-2-2 求两整数数之和(2)

    题目描述
    从键盘上输入两个整数,并输出这两个数的和,即你的任务是计算a + b。
    输入
    输入空格分隔的两个整数
    输出
    对于用空格分隔的两个整数,求其和。

    #include <cstdio>
    
    int main()
    {
    	int a, b, sum;
    	scanf("%d %d", &a, &b);
    	sum = a + b;
    	printf("%d", sum);
    	return 0;
    }
    

    例题3-5 求一元二次方程的根

    题目描述
    求一元二次方程ax2 + bx + c = 0的根,三个系数a, b, c由键盘输入,且a不能为0,且保证b2 - 4ac>0。
    程序中所涉及的变量均为double类型。
    输入
    以空格分隔的一元二次方程的三个系数,双精度double类型
    输出
    分行输出两个根如下(注意末尾的换行):
    r1 = 第一个根
    r2 = 第二个根
    结果输出时,宽度占7位,其中小数部分2位。

    #include <cstdio>
    #include<cmath>
    
    int main()
    {
    	double a, b, c, p;
    	scanf("%lf %lf %lf", &a, &b, &c);
    	p = b*b - 4*a*c;
    	if (a != 0 &&p >= 0)
    	{
    		printf("r1=%7.2f\nr2=%7.2f", (-b + sqrt(p)) / (2 * a), (-b - sqrt(p)) / (2 * a));
    	}
    	return 0;
    }
    

    例题3-9 字符输入输出

    题目描述
    从键盘输入三个字符BOY,然后把他们输出到屏幕上
    输入
    BOY三个字符,中间无分隔符
    输出
    BOY,注意末尾的换行

    #include <cstdio>
    #include<cmath>
    
    int main()
    {
    	char str[5];
    	scanf("%s",str);
    	printf("%s", str);
    	return 0;
    }
    
    展开全文
  • 数据结构算法与应用——C++语言描述,Sahni著,原版英文版第二版,2/2,网上也找不到的资料 扫描版的,目前只有这个版本的了!
  • 英文原版教材的习题解答,很好很强大~ 作者是 Clifford A.Shaffer
  • 数据结构与算法分析 C++ 描述 第三版》题和答案 英文原版,英文描述
  • 欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 ...

    原文地址:数据结构和算法经典书籍作者:夏之吻
    数据结构和算法是程序员必练内功,不会随着时代发展而淘汰,学好数据结构,受益终身,一定要看。
    ●《数据结构算法与应用——C++语言描述》(Data Structures, Algorithms and Applications in C++)第一版,Sartaj Sahni著,国防科技大学汪诗林、孙晓东等译,王广芳审校,机械工业出版社,2005。Sartaj Sahni(萨尔塔?萨尼)在Cronell大学获得硕士和博士学位。曾任教于明尼苏达大学。目前是佛罗里达大学计算机与信息科学工程系主任。Sahni教授在数据结构与算法领域的研究和教学方面享有世界声誉,因此当选为IEEE和ACM两会会士以及欧洲科学院院士,并获得IEEE计算机学会的Taylor L.Booth教育奖和W.Wallace-MCDowell奖,2003年更荣获计算机教育最高荣誉ACM Karl V.Karlstrom杰出教育家奖。本书以数据结构为主,算法为辅,与应用结合比较紧密,编程实例很多,数学公式少。书中代码及输出结果和习题可从网站下载,代码简洁精练,质量极高,完全可以直接使用。中文版翻译质量还可以。本书是山东大学考博指定教材。
    本书高清晰带目录中文版PDF电子书下载地址:http://download.csdn.net/source/2996697
    本书所有源代码习题下载地址:http://download.csdn.net/source/2996697
    本书英文原版PDF电子书下载地址:http://download.csdn.net/source/2997061
    http://download.csdn.net/source/2997079

    ●《计算机算法(C++版)》(Computer Algorithms C++),Ellis Horowitz, Sartaj Sahni, Sanguthevar Rajasekaran著,西安交通大学冯博琴、叶茂、高海昌等译,机械工业出版社,2006。本书主页http://www.cise.ufl.edu/~sahni/cac++/,代码可以从http://www.cise.ufl.edu/~sahni/cac++/plist.htm下载。本书获得亚马逊书店2006年畅销书奖,以算法为主,数据结构为辅,对每种算法的原理都做了详细的解释,适合初学者。书中代码质量不错。翻译质量不错。Ellis Horowitz(霍罗威茨)是南加州大学教授,这三个作者还写了《数据结构(C语言版)》。
    本书源代码下载地址:http://download.csdn.net/source/3008993

    ●《Java数据结构和算法》(Data Structures and Algorithms in Java)第二版,Robert Lafore著,计晓云等译,中国电力出版社,2004。Lafore(拉弗)的书浅显易懂,同样是一部极好的数据结构入门教材。书中描述了很多个经典算法问题。代码和演示程序可以从www.samspublishing.com下载,输入英文书名搜索。
    中文版PDF电子书下载地址:http://download.csdn.net/source/2988954
    http://download.csdn.net/source/2988966

    ●《算法设计方法》,吴哲辉、崔焕庆、马炳先、吴振寰著,机械工业出版社,2008。从方法入手进行内容组织,每章集中讲述一种典型的算法能够解决哪些问题,而不是从问题入手。内容精练扼要,公式很少,适合自学。
    与其它算法书的比较:1、《算法设计与分析》郑宗汉、郑晓明著,清华大学出版社,集中讲述算法,对数据结构描述较少,代码都是C++,可直接使用。2、王晓东的《计算机算法分析与设计》公式太多,C++代码也有,更适合做考研资料。3、Alsuwaiyel著,吴伟昶等译的《算法设计技巧与分析》也不错,书中只有Pascal的伪代码,可以自行编程验证书中的算法。4、《计算机算法与实践教程》,有很多经典算法例子,有Java代码,适合做题。
    ●《数据结构与问题求解——Java语言描述》(Data Structures and Problem Solving using Java)第三版,Mark Allen Weiss著,翁惠玉、严骏译,机械工业出版社,2006。此书比《数据结构与算法分析》简单一些,偏重应用。
    ●《数据结构与算法分析——C语言描述》(Data Structures and Algorithms Analysis in C)第二版,Mark Allen Weiss著,天津师范大学冯舜玺译,机械工业出版社。Weiss教授的数据结构经典教材三部曲之一,其中的C语言描述版本,也就是本书,被称为20世纪最重要的30本计算机教材之一。Mark Allen Weiss(马克?爱伦?韦斯),1987年在普林斯顿大学获得计算机科学博士学位,师从著名算法大师Robert Sedgewick,现任美国佛罗里达国际大学计算与信息科学学院教授。他曾经担任全美AP(Advanced Placement)考试计算机学科委员会的主席(2000-2004)。他的主要研究方向是数据结构,算法和教育学。中文版翻译质量很好。数学公式太多。网上可以下载书中代码,但是没有输出结果,也没有习题答案。
    ●《数据结构与算法分析——C++描述》(Data Structures and Algorithms Analysis in C++)第三版,Mark Allen Weiss著,张怀勇等译,机械工业出版社。Weiss教授的数据结构经典教材三部曲之一。
    ●《数据结构与算法分析——Java语言描述》(Data Structures and Algorithms Analysis in Java)第二版,Mark Allen Weiss著,天津师范大学冯舜玺译,机械工业出版社。Weiss教授的数据结构经典教材三部曲之一。
    ●《数据结构(C语言版)》,严蔚敏、吴伟民著,清华大学出版社。国内久负盛名的经典教材。数据结构的原理,全是伪代码,内容深奥枯燥。
    ●《数据结构(用面向对象方法和C++描述)》,殷人昆、陶永雷、谢若阳、盛绚华著,清华大学出版社。也是国内经典教材,但是书中代码错误比较多。
    ●《数据结构——C++语言描述》(Data Structures with C++),William Ford, William Topp著,刘卫东、沈官林译,严蔚敏审,清华大学出版社,1998。本书作者福特、托普是美国太平洋大学计算机教授,由国内数据结构权威严蔚敏教授主审,翻译质量有保证。但是书的内容组织一般,只适合学习基础知识。网上可以下载书中代码,但是没有输出结果,也没有习题答案。
    ●《C++数据结构原理与经典问题求解》,左飞著,飞思科技产品研发中心监制,电子工业出版社,2008。通俗易懂,内容生动,问题丰富,形象有趣。

    理工科大学在读学生学习建议:
    算法和数据结构的内容,用最简单的C语言描述会比较清楚,没有必要使用C++和Java的面向对象描述。面向对象编程在这里没啥用处,反而冲淡了学习主题。
    初学者,先学习Weiss的《数据结构与算法分析 C语言描述》或者严蔚敏的《数据结构(C语言版)》。对于如何消化掉这本书,我初步给出一个建议:
    精读Weiss的《数据结构与算法分析 C语言描述》三遍,能坚持下来,你的收获会很大:
    第一遍,通读本书,不要丢掉任何细节,这一遍下来至少不能对书中涉及到的内容存在疑问(如果适当结合课后的习题还是不错的,不过习题不是第一遍的重点);
    第二遍,照样通读本书,重点在于解决课后习题,我发现本书的课后习题绝对能让你学会思考并解决问题,提高你的问题解决能力与算法设计能力;
    第三遍,复习巩固,注重你的算法设计能力,不能给你一个问题,你去设计十天半个月,训练你的思维力与敏捷力。
    然后,再速读C++和Java版的数据结构。

    在职软件工程师学习建议:
    Weiss(韦斯)的《数据结构与算法分析——C语言描述》和严蔚敏的《数据结构(C语言版)》,数学公式太多,学习难度大,而且作者给出的代码较少,要花费太多时间。在职软件工程师建议学习Sahni(萨尼)的《数据结构算法与应用 C++语言描述》,算法部分可以参考Horowitz(霍罗威茨)的《计算机算法(C++版)》。
    本书没那么多公式,与实际应用结合紧密,作者给出了所有的代码,特别是还给出了所有运行输出结果,读者可以先看代码,自行思考运行结果是什么,再与作者的结果对照,无需编译运行,极大节约了学习时间。
    书中的代码简洁精练,质量极高,完全可以直接拷贝后使用。
    Lafore(拉弗)的《Java数据结构和算法》也不错,对算法的描述浅显易懂,例子很多,缺点是代码不够简练,明显与Sahni的代码有差距。
    博客来源:http://topic.csdn.net/u/20110131/09/90376388-1cf0-4661-b7fb-9ce08148b68d.html

    展开全文
  • 2018.8.10 《剑指Offer》从零单刷个人笔记整理(66题全)目录传送门​​​​...每次反转前front记录下一结点位置,templater进行反转(此时tempfront之间的指针会断开),然后later前移至temp位置,temp前移至f...
  • 这道题原版是不要求调整后的元素相对顺序原序列一致的,那其实就可以用首尾对称调换的方法做。后面C++的代码是按原题做的标准答案。现在要求调整后的元素相对顺序原序列一致,也不难。 思路一:奇偶两个flag ...
  • 1. 解释为什么程序1-7的交换函数没有把形参x和y所对应的实参的值交换。如何修改代码,使实参的值得到交换? 程序1-7 交换两个整数的不正确的代码 void swap(int x, int y) { //交换整数x和y ...io...
  • 数据结构PDF下载

    2019-03-04 09:55:20
    数据结构 算法实现及解析 C语言[第二版] 高一凡 pdf文字版http://qunying.jb51.net:81/201303/books/sjjg_sfszjjx_jb51net.rar 大话数据结构 中文 PDF清晰扫描版 完整版 [36M]...
  • 1.2.1 传值参数 设计一个函数用来计算表达式a+b*c,其中a,b和C是整数,结果也是整数。 程序1-1,计算一个整型表达式 #include <iostream> using namespace std; int abc(int a, int b, int c) ...{...
  • ⑴根据实际问题的具体情况,结合数据结构与算法课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理的选择相应的存储结构,并能设计出解决问题的有效算法。 ⑵提高程序设计和调试能力。测试员通过...
1 2 3 4 5 ... 20
收藏数 3,865
精华内容 1,546