数据结构我们总共讲了链表、哈希表、栈、队列,链表、栈、队列都属于线性表(栈、队列属于受限线性表,哈希表里的数组也属于线性表),用的多也是比较好理解的。
当然还有其他类型的数据结构,比如树形结构,包括很多:二叉树、红黑树、B树。树表家族的各种数据结构是比较难理解的,数据不像线性表一样直接添加进去就OK了,而是添加数据的时候就要对数据按照一定的规律排序。
比较复杂,我们没有必要深学下去了,推荐一篇网络文章,介绍树的《数据结构中各种树》。
各种数据的结构特点:
线性表:元素之间的位置关系是确定的,操作比较简单,容易实现,有两种存储形式:顺序存储和链式存储,顺序存储可以方便的进行随机存取,链式存储可以方便的进行插入和删除操作。
树:元素之间的关系相对于线性表来说要更复杂,操作要更复杂。是对存储的灵活性和检索的灵活性的一种折中。
哈希表:元素之间的位置关系是随机的,没有任何规律可言,hash表的优点是将读取的效率做到极致。
SPL标准库:
数据结构和算法对于我们很多PHP程序员来说,似乎是一个可有可无的东西,因为在PHP中,已经有数字索引数组、关联数组、对象等等,并且还封装了很强大的函数来处理数组和对象,所以因为封装的原因,导致很多PHP程序员从来没有感觉到数据结构和算法的存在。如果我们需要用PHP来实现双链表、队列、堆、栈等等数据结构和算法,就算我们对这些数据结构不了解,其实也可以实现的。
PHP就是这么好,官方给PHP程序员提供了一套类库,直接拿来使用就可以实现各种数据结构的应用。
SPL已经帮我们实现了这些常见的数据结构,并且提供了针对这些数据结构的各种常见算法。
用PHP实现双链表
我们从PHP的官方手册里面,找到了双链表的类,即SplDoubleLinkedList,这个类就是关于双链表的类,从手册里面,我们看到了,它提供了创建双链表、获得链表里面的元素个数、插入元素到链表里面、获取目前的元素、获取下一个元素等等,总而言之,你打开手册能够看到每个方法的说明,并且这些方法都不难,同样,我们能够使用其他SPL库来完成关于队列、堆、栈的实现。
注:堆是一种完全二叉树或者近似完全二叉树。
最后来个大总结:
只做PHP用不用研究数据结构与算法?
PHP只是个脚本语言,只适合写业务逻辑代码,实际开发中根本不会用PHP写数据结构与算法。只做PHP,了解既可以,平时用不到,没必要深研究。只有做C/C++、java这些编译语言开发,才会用到数据结构与算法。
引用别人的见解:
要往高级走的话算法和数据结构是必会的,但不是用PHP去实现,因为PHP的运行效率太低了,用来完成算法级别的东西一般都需要大量的循环,所以数学问题及算法的实现在PHP中标准的做法应该是做成C扩展,就是说算法都要用C去实现,楼主学算法之前请先学好C,并且学会PHP的C扩展开发
重新发一下我在某贴里写的地图炮:
所有想用PHP本身解决数学问题和算法的,全是对PHP理解不深的渣渣