当前位置:C++技术网 > 资讯 > 数据结构和算法到底有什么用,开发中能不能用到数据结构和算法

数据结构和算法到底有什么用,开发中能不能用到数据结构和算法

更新时间:2015-12-19 17:17:46浏览次数:1+次

    你写一个从中间弹出的栈,而不是从顶部弹出的栈,这是不是数据结构呢?如果参考书本的就不是吧,因为书中没有这样的。但是又基于书本的标准模型,所以又是。
    数据结构就是一个数据模型,如何组织数据存放,如何被操作的一系列的规则而已。而算法就是实现一个目的来操作这些数据模型的。
    那么到底数据结构和算法到底有什么用呢?开发中到底能不能用到数据结构和算法呢?
    数据结构我们通常理解为书中将的那些模型,实际上,那些是标准模型而已。而在实际的解决问题的过程中,你可以实现变种,也就是规则不完全和标准的一样,而是与你的实现的功能相匹配。
    当然你也可以完全不用这些标准模型的任何数据结构模型,完全可以自己写。比如我们写一个图书管理系统。我们要将书籍按照类别子类别和各种书籍信息来存储。然后可以增删改查。你可以不用数据结构的这些模型,你可以选择数组。是的,一点也没有错。你可以使用数组,这是编程语言最基本的工具。
    要动态增加书籍,所以你要支持动态创建数组,然后要删除原先的数组,将原先数组的数据复制到新数组。
    要支持删除书籍,比如有些老旧的书籍不再有用了,可以当做垃圾处理了,就要从系统中删除。所以可能要删掉一个数组即同一类别的某几本书,所以,你将其中几个元素的删掉,然后将后面的书籍往前挪一下。
    然后你会发现一本书入库的时候,过了几天后发现名字有一个错别字,所以你要修改书名。然后就要去查找这本书,加入一次入库了几千本,然后这本书在中间哪一本,你就要从头到尾的找这本书,书籍越多,越难找。
    找到之后就可以修改书的信息了。修改信息倒还好说。
    从以上几点可以看到,我们还没有说如何表示一本书的很多信息,当然,我们会用结构体数组来存储。然而增删查都特别费劲,效率会很低。而且编写程序起来,特么复杂,很容易留下一个Bug,你再去看这个代码时,你一定会头疼的。
    上面是使用原始的数组来实现的,可以看到,或者你可以想象,实现的过程是多么麻烦。不仅开发效率低,而且整体的运行效率低,那么如何解决呢?自然就是用数据结构来建模,用算法来处理。

    那么图书管理系统,就可以用树结构来实现,这里不是功能实现图,而是书籍分类存放目录示意图。如下图所示:

 图书管理系统书籍分类存放树状实现

    树顶就是图书管理系统根节点,然后子节点就是各个学科,学科的子节点就是各个子类目,子类目下面就是各个书籍的信息。并且用树来表示,分类一目了然,你在实现这个管理过程时也是心中有树操作起来也心中有数。因为这个结构和我们思维最接近,不然用数组都不知道用什么方式表示比较好,还是借鉴数据库的经验,用第一个元素做主键,用一个元素做外键,这样来建立一个层次结构,不过这样其实不直观。而树结构就非常好理解。

    那么你要入库,就根据书籍的分类,使用广度遍历,然后找到对应的分类后继续往下,一直到最后一个分类,然后添加一个树叶即书籍信息。如果要删除,也是如此遍历,然后删除一个。至于修改信息,数组和树都是一样的,都是对内存读写而已。你可以看到,这里没有任何移动元素,复制就信息到新的地方的过程。所有的节点都是通过动态创建生成的,非常的灵活。
    从这里简单列举一个图书管理系统的实现,就可以感受到树模型与原始数组之间的差别,可以看到树的很多优点。用树来编程,你代表你的编程思想水平层次站的比较高,而不是停留在最原始的数组操作上。当然,一些简单的算法,用数组效率是很高的,就不要用数据结构里的各种结构来操作。自己可以权衡效率和利弊,选择最合适的使用。
    当然这里说的数据结构都是标准的结构。我们使用的算法如广度优先遍历算法就是书中讲过的一个算法而已,他用于遍历树的。就和我们用循环遍历数组的一个意思。因为树是动态创建的节点链接起来的,不是连续的内存块,所以不能和数组一样顺序遍历,效率上直接比,肯定不如数组的。但是在各种功能实现上,数组太原始了。
    所以,数据结构是用来提高你的编程水平,可以实现更复杂的需求的。如果一个复杂的算法,或者一个复杂的系统,没有数据结构的这些模型的使用,基本上就是不成熟的。使用数据结构开发也是要在思维里形成的,不是学了就行了。为什么你开发中用不上数据结构,是因为你没有形成用数据结构方式高级编程。
    还有一个问题,就是在开发中,你不需要写这些基本的数据结构模型实现,也不需要你写标准的算法实现,你可以使用STL等算法库,都帮你处理好了。你只需要调用这些算法库函数即可达到目的,然而,如果你不懂的数据结构和算法,你用的溜吗?也正是用这些库让很多人觉得学习数据结构没有用。会用不能说明什么,用的好用的妙才是高手。
    很多开发需求,你无法使用标准的数据结构和算法来完成,也就是说,这些算法库,很多都不能直接使用就能完成要求,所以你要基于标准的结构和算法加以改造,实现更符合业务需求的结构和算法,从而更好的实现功能。而这个就需要你有强大的数据结构和算法基础了。
    如果你只是做简单的码农,使用几个控件,调用几个算法库,调用几个类库,完成了一个功能,你就沾沾自喜,自以为是,那你就在走下坡路了。并且,这样下去,你的水平就永远提不高了。而且类库不断的迭代升级,你就不得不不断的去学各种库的用法,而且每次都学的累死累活的,因为你这些基础不行,跟不上。而如果你基础扎实,只不过是简单熟悉一下罢了,对于人家实现的原理,分分钟就可以掌握。这就是区别,大神和码农的区别。
    那么到此,你知道数据结构的用处了吗?你知道工作中是否需要数据结构,或者说,知道工作中一般如何使用数据结构了吗?当然这里都是粗略的谈论了一下,更加具体的你可以自己体会了。