Posted on 2006-03-20 17:08
高山流水 阅读(187)
评论(0) 编辑 收藏 引用 所属分类:
计算机基础知识
Web开发者向桌面应用开发转型之数据结构学习
任何应用程序其实就是对于数据的操作,完成商业逻辑。操作的方法无异于添加、修改、更新、删除、查找、访问等。而操作的过程中需要对数据进行存储,抑或为了加快速度,可能对数据进行二次存储(缓存)。对数据进行存储就设计到数据结构的概念,可以说就是设计一个存储数据的容器,容纳数据且支持对数据的操作。针对不同的需求,数据结构的设计也不同,比如装石头,我们可以用篮子,而装水就不可以。任何一本数据结构的书大概讲的差不多,无论是何种语言,只要支持数据结构的设计都可以实现书本中讲到的结构:数组、列表、栈、队列、树、图、哈西表等。每一种结构都是对显示世界中模型的一种抽象,比如数组可以表示向量、或者集合模型,列表和数组类似,只不过各有优缺点,它删除、插入速度快,而不支持随即访问,树一般是搜索用。开始听海天一线说不明白数据结构怎么用,我觉得很奇怪,细细思考才发现问题。在Web开发中,数据一般都在数据库中,所以对数据的操作都是在数据库里面实现了,而应用开发中很少需要自己关心,所以转向桌面应用开发(具体到C++)就不明白数据结构了,其实就相当于数据库里面的操作。
当然,数据结构各种语言基本都实现了并各自有扩展,我们学习数据结构,学习的抽象问题的思想,而不是会使用数据结构,或者会设计一个具体的容器。STL(SGI公司开发)里面有vector、list、deque、set、map等,且据说这个可以移植,MFC有CArray、CMap、CList等,在Java里面也有Array、HashTable至少(因为我了解很少),Boost里面也有全部实现。所以真正开发中,我们可以根据语言和实际选择已有的实现,除非已有的容器无法满足需求,我们可以对已有容器封装来设计或者完全自己实现。一般新建一个基于控制台的项目设计数据结构,并加入数据检验正确性,当正确后在加入到项目中使用。
建议看一下别人设计的数据结构源码,最好是公认的或者流行的,有模板知识的可以看下STL的实现,对于模板有很强的认识且C++语法掌握很好的建议看看Boost,说句实话,我自己不行,只看了2个结构,一个Any,一个Array,别的没有继续看下去,太难!!
具体到学习数据结构里面的小问题,建议看书,本文只是本人对数据结构的一个浅薄认识,如果学习中遇到问题,可以提出来,尽本人最大努力提供帮助。