博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中的数据结构:DS扩展
阅读量:4988 次
发布时间:2019-06-12

本文共 6560 字,大约阅读时间需要 21 分钟。

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

1. 运行命令 pecl install ds2. 在php.ini中添加 extension=ds.so3. 重启PHP或重载配置

在这些数据结构类型(Class)对象中,除了Pair、PriorityQueue对象之外,其余各种类型(Class)对象都支持数组语法。

  •  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 Interfacewhich allows objects to be used as keys.
    Ds\Hashable {/* 方法 */abstract public bool equals ( object $obj )abstract public mixed hash ( void )}
  • Sequence InterfaceA 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 emptyDs\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 )}

转载于:https://www.cnblogs.com/XiongMaoMengNan/p/7168446.html

你可能感兴趣的文章
Laravel5.1 模型 --软删除
查看>>
ssh与mysql基础知识
查看>>
PAT 天梯赛练习集 L2-004. 这是二叉搜索树吗?
查看>>
LeetCode : Reverse Bits
查看>>
拓扑排序
查看>>
[Android]语音识别中出现的问题和经验
查看>>
关于设计模式的反思
查看>>
常见模块
查看>>
【总结】 矩阵快速幂
查看>>
关于github
查看>>
七个不可错过的React组件库与开发框架
查看>>
Linux系统学习之Ln(软连接和硬链接)
查看>>
72. Generate Parentheses && Valid Parentheses
查看>>
Cordova开发App使用USB进行真机调试
查看>>
element popover源码
查看>>
10.8
查看>>
多语言切换
查看>>
Heartbeat(注意iptables和selinux的问题)
查看>>
[FZYZOJ 1859] 建桥
查看>>
osgearth+vs2010安装
查看>>