第八章:第2节 PHP数据结构与算法——单链表

更新于:2017-06-18 22:09:18

数据元素相互之间的关系称为结构。有四类基本结构:集合、线性结构、树形结构、网状或图状结构; 


集合结构:除了同属于一种类型外,别无其它关系。


线性结构:元素之间存在一对一关系,常见类型有: 数组(不是PHP的数组,是C语言里的数组)、链表、队列、栈。它们之间在操作上有所区别,例如:链表可在任意位置插入或删除元素,而队列在队尾插入元素,队头删除元素,栈只能在栈顶进行插入,删除操作。


树形结构:元素之间存在一对多关系,常见类型有:树(有许多特例:二叉树、平衡二叉树、查找树等)。


网状或图状结构:元素之间存在多对多关系,图形结构中每个结点的前驱结点数和后续结点多个数可以任意。


线性结构,我们可以称为线性表,是应用最广泛的一大类数据结构。


线性表是零个或者多个数据元素的有限序列。


特性:


数据元素之间是有顺序的

数据元素个数是有限的

数据元素的类型必须相同


说明下:只有C语言才是真正研究数据结构的语言,“数据元素的类型必须相同”这个是从C语言角度出发看待的,它需要要求数据元素类型必须一致。PHP是用C开发的,它是弱类型语言,楠神用PHP讲解数据结构,只是去模拟C语言里的数据结构是怎么个回事。


一张图让我们了解下线性表是什么样的?


一个大家感兴趣的话题,一年里的星座列表,有顺序,共12个,它们就像一个线性表:


1.png


看这张图,有没有觉得特像一个链子把每个元素一一串联起来,形成一个整体。


这张图很形象地表现了一种最常用的数据结构形式,那就是链表


用PHP我们怎么去模拟这样一种数据结构——链表?想想PHP八大数据类型,是不是也只有对象的类可以实现链表。星座的名称、日期可以是类的两个字符串数据类型属性,指向下一个星座的箭头可以是类的对象数据类型属性。


看代码,定义“星座”类:


1.png


定义一个查找的函数,把数据串联起来:


1.png

虽然没有把“双子座”的对象变量$x3传进函数,但通过链表还是找到“双子座”了。


1.png


一个小小的示例让大家先熟悉下链表是什么,接下来我们会更深地去研究链表的特点、应用和拓展。


C语言虽然是面向过程编程,C++才是面向对象编程,但C语言有种东西叫结构体,其实和类差不多,只有属性没有方法的一种数据结构。C用结构体可以实现链表数据结构。


本节学习代码》》》