PHP7以上才能安装和使用数据结构,安装比较简单:

1. 运行命令 pecl install ds

2. 在php.ini中添加 extension=ds.so

3. 重启PHP或重载配置
  •  Collection Interface:包含本库中所有数据结构通用功能的基本interface。 It guarantees that all structures are traversable, countable, and can be converted to json using json_encode().

    Ds\Collection implements Traversable , Countable , JsonSerializable {
    /* 方法 */
    abstract public void clear ( void )
    abstract public Ds\Collection copy ( void )
    abstract public bool isEmpty ( void )
    abstract public array toArray ( void )
    }
  • Hashable Interface:which allows objects to be used as keys.
    Ds\Hashable {
    /* 方法 */
    abstract public bool equals ( object $obj )
    abstract public mixed hash ( void )
    }
  • Sequence Interface:A Sequence 相当于一个一维的数字key数组, with the exception of a few characteristics:
    • Values will always be indexed as [0, 1, 2, …, size - 1].
    • Only allowed to access values by index in the range [0, size - 1].

    Use cases:

    • Wherever you would use an array as a list (not concerned with keys).
    • A more efficient alternative to SplDoublyLinkedList and SplFixedArray.
  • Vector Class:Vector是自动增长和收缩的连续缓冲区中的一系列值。它是最有效的顺序结构,值的索引直接映射到缓冲区中索引,增长因子不绑定到特定的倍数或指数。其具有以下优缺点:

    • Supports array syntax (square brackets).
    • Uses less overall memory than an array for the same number of values.
    • Automatically frees allocated memory when its size drops low enough.
    • Capacity does not have to be a power of 2.
    • get(), set(), push(), pop() are all O(1).
    • 但是 shift(), unshift(), insert() and remove() are all O(n).
    Ds\Vector::allocate — Allocates enough memory for a required capacity.
    Ds\Vector::apply — Updates all values by applying a callback function to each value.
    Ds\Vector::capacity — Returns the current capacity.
    Ds\Vector::clear — Removes all values.
    Ds\Vector::__construct — Creates a new instance.
    Ds\Vector::contains — Determines if the vector contains given values.
    Ds\Vector::copy — Returns a shallow copy of the vector.
    Ds\Vector::count — Returns the number of values in the collection.
    Ds\Vector::filter — Creates a new vector using a callable to determine which values to include.
    Ds\Vector::find — Attempts to find a value's index.
    Ds\Vector::first — Returns the first value in the vector.
    Ds\Vector::get — Returns the value at a given index.
    Ds\Vector::insert — Inserts values at a given index.
    Ds\Vector::isEmpty — Returns whether the vector is empty
    Ds\Vector::join — Joins all values together as a string.
    Ds\Vector::jsonSerialize — Returns a representation that can be converted to JSON.
    Ds\Vector::last — Returns the last value.
    Ds\Vector::map — Returns the result of applying a callback to each value.
    Ds\Vector::merge — Returns the result of adding all given values to the vector.
    Ds\Vector::pop — Removes and returns the last value.
    Ds\Vector::push — Adds values to the end of the vector.
    Ds\Vector::reduce — Reduces the vector to a single value using a callback function.
    Ds\Vector::remove — Removes and returns a value by index.
    Ds\Vector::reverse — Reverses the vector in-place.
    Ds\Vector::reversed — Returns a reversed copy.
    Ds\Vector::rotate — Rotates the vector by a given number of rotations.
    Ds\Vector::set — Updates a value at a given index.
    Ds\Vector::shift — Removes and returns the first value.
    Ds\Vector::slice — Returns a sub-vector of a given range.
    Ds\Vector::sort — Sorts the vector in-place.
    Ds\Vector::sorted — Returns a sorted copy.
    Ds\Vector::sum — Returns the sum of all values in the vector.
    Ds\Vector::toArray — Converts the vector to an array.
    Ds\Vector::unshift — Adds values to the front of the vector.

     

  • Deque Class:“双端队列”的缩写,也用于Ds\Queue中,拥有head、tail两个指针。The pointers can “wrap around” the end of the buffer, which avoids the need to move other values around to make room. This makes shift and unshift very fast —  something a Ds\Vector can’t compete with. 其具有以下优缺点:
    • Supports array syntax (square brackets).
    • Uses less overall memory than an array for the same number of values.
    • Automatically frees allocated memory when its size drops low enough.
    • get(), set(), push(), pop(), shift(), and unshift() are all O(1).
    • 但Capacity must be a power of 2.insert() and remove() are O(n).
  • Map Class:键值对的连续集合,几乎与数组相同。键可以是任何类型,但必须是唯一的。如果使用相同的键添加到map中,则将替换值。其拥有以下优缺点:
    • Keys and values can be any type, including objects.
    • Supports array syntax (square brackets).
    • Insertion order is preserved.
    • Performance and memory efficiency is very similar to an array.
    • Automatically frees allocated memory when its size drops low enough.
    • Can’t be converted to an array when objects are used as keys.
  • Pair Class:A pair is used by Ds\Map to pair keys with values.
    Ds\Pair implements JsonSerializable {
    /* 方法 */
    public __construct ([ mixed $key [, mixed $value ]] )
    }
  • Set Class:唯一值序列。 This implementation uses the same hash table as Ds\Map, where values are used as keys and the mapped value is ignored.其拥有以下优缺点:
    • Values can be any type, including objects.
    • Supports array syntax (square brackets).
    • Insertion order is preserved.
    • Automatically frees allocated memory when its size drops low enough.
    • add(), remove() and contains() are all O(1).
    • 但Doesn’t support push(), pop(), insert(), shift(), or unshift(). get() is O(n) if there are deleted values in the buffer before the accessed index, O(1) otherwise.
  • Stack Class: “last in, first out”集合,只允许在结构顶部进行访问和迭代。
    Ds\Stack implements Ds\Collection {
    /* 方法 */
    public void allocate ( int $capacity )
    public int capacity ( void )
    public void clear ( void )
    public Ds\Stack copy ( void )
    public bool isEmpty ( void )
    public mixed peek ( void )
    public mixed pop ( void )
    public void push ([ mixed $...values ] )
    public array toArray ( void )
    }
  • Queue Class:“first in, first out”集合,只允许在结构前端进行访问和迭代。
    Ds\Queue implements Ds\Collection {
    /* Constants */
    const int MIN_CAPACITY = 8 ;
    /* 方法 */
    public void allocate ( int $capacity )
    public int capacity ( void )
    public void clear ( void )
    public Ds\Queue copy ( void )
    public bool isEmpty ( void )
    public mixed peek ( void )
    public mixed pop ( void )
    public void push ([ mixed $...values ] )
    public array toArray ( void )
    }
  • PriorityQueue Class:优先级队列与队列是非常相似的,但值以指定的优先级被推入队列,优先级最高的值总是位于队列的前面,同优先级元素“先入先出”顺序任然保留。在一个PriorityQueue上递代是具有破坏性的,相当于连续弹出操作直到队列为空。Implemented using a max heap.
    Ds\PriorityQueue implements Ds\Collection {
    /* Constants */
    const int MIN_CAPACITY = 8 ;
    /* 方法 */
    public void allocate ( int $capacity )
    public int capacity ( void )
    public void clear ( void )
    public Ds\PriorityQueue copy ( void )
    public bool isEmpty ( void )
    public mixed peek ( void )
    public mixed pop ( void )
    public void push ( mixed $value , int $priority )
    public array toArray ( void )
    }

PHP中的数据结构的更多相关文章

  1. java中的数据结构(集合|容器)

    对java中的数据结构做一个小小的个人总结,虽然还没有到研究透彻jdk源码的地步.首先.java中为何需要集合的出现?什么需求导致.我想对于面向对象来说,对象适用于描述任何事物,所以为了方便对于对象的 ...

  2. Python 中的数据结构总结(一)

    Python 中的数据结构 “数据结构”这个词大家肯定都不陌生,高级程序语言有两个核心,一个是算法,另一个就是数据结构.不管是c语言系列中的数组.链表.树和图,还是java中的各种map,随便抽出一个 ...

  3. [转]详细介绍java中的数据结构

    详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...

  4. 详细介绍java中的数据结构

    详细介绍java中的数据结构 http://developer.51cto.com/art/201107/273003.htm 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个 ...

  5. sql点滴42—mysql中的数据结构

    原文:sql点滴42-mysql中的数据结构 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小 ...

  6. Python中的数据结构

    Python中的数据结构 这里总结一下Python中的内置数据结构(Built-in Data Structure):列表list.元组tuple.字典dict.集合set,涵盖的仅有部分重点,详细地 ...

  7. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

  8. PHP中的数据结构:DS扩展

    PHP7以上才能安装和使用该数据结构扩展,安装比较简单: 1. 运行命令 pecl install ds 2. 在php.ini中添加 extension=ds.so 3. 重启PHP或重载配置 在这 ...

  9. JavaScript中的数据结构及实战系列

    本系列主要是讲解JavaScript中的数据结构及在实际项目中遇到的地方 JavaScript中的数据结构及实战系列(1):队列 JavaScript中的数据结构及实战系列(2):栈

随机推荐

  1. OpenGL教程(0)——介绍

    OpenGL介绍 OpenGL,全称Open Graphics Library,是一个用C语言写的图形API.通俗地说,OpenGL用来绘制2D/3D图形.目前OpenGL的运用十分广泛,有许多用Op ...

  2. Hadoop之WordCount详解

    花了好长时间查找资料理解.学习.总结 这应该是一篇比较全面的MapReduce之WordCount文章了 耐心看下去 1,创建本地文件 在hadoop-2.6.0文件夹下创建一个文件夹data,在其中 ...

  3. javaSE_07Java中类和对象-封装特性-思维导图

    思维导图看不清楚时: 1)可以将图片另存为图片,保存在本地来查看 : 2)右击在新标签中打开放大查看 (IE不支持,搜狗,360可以):

  4. 平时常用的一些java方法,请留意

    平时常用的一些java方法,请留意. package com.util; import java.io.BufferedInputStream; import java.io.BufferedWrit ...

  5. oracle 体系结构简介

    1.1.SGA(system global area) SGA是oracle Instance的基本组成部分,在示例启动是分配.是一组包含一个oracle实例的数据和控制信息的共享内存结构.主要用于存 ...

  6. linux定时任务访问url

    这次linux定时任务设置成功,也算是自己学习linux中一个小小的里程碑.:) 撒花撒花--- 以下操作均是在ubuntu 下操作的,亲测有效,其他的linux系统还望亲们自己去查.鞠躬感谢! 1 ...

  7. Mac系统占用空间大、空间不够、查看系统文件大小分布

    最近电脑老提示空间不够,甚是心烦,决定研究下,为啥空间这么快就花完了. 如图,256的空间,就剩下几个G了,其中最大头的系统占用:160G,占比60%多,我勒个擦... 正常情况下:我们可以点击管理, ...

  8. Linux版微信

    一.到github上下载https://github.com/geeeeeeeeek/electronic-wechat/releases下载linux-x64.tar.gz,具体根据操作系统是32位 ...

  9. Facebook开源Zstandard新型压缩算法代替Zlib 简单使用

    简介 Zstandard(缩写为Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法.Zstandard在设计上与DEFLATE(.zip.gzip)算法有着差不多的压缩比 ...

  10. [1] Ninject

    为什么使用这种依赖注入的框架呢?我借鉴两张图做一下说明 传统的接口方式,即 IValueCalculator I=new LinqValueCalculator,虽然用接口做的隔离,但是在调用的时候实 ...