PHP中的数据结构
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中的数据结构的更多相关文章
- java中的数据结构(集合|容器)
对java中的数据结构做一个小小的个人总结,虽然还没有到研究透彻jdk源码的地步.首先.java中为何需要集合的出现?什么需求导致.我想对于面向对象来说,对象适用于描述任何事物,所以为了方便对于对象的 ...
- Python 中的数据结构总结(一)
Python 中的数据结构 “数据结构”这个词大家肯定都不陌生,高级程序语言有两个核心,一个是算法,另一个就是数据结构.不管是c语言系列中的数组.链表.树和图,还是java中的各种map,随便抽出一个 ...
- [转]详细介绍java中的数据结构
详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...
- 详细介绍java中的数据结构
详细介绍java中的数据结构 http://developer.51cto.com/art/201107/273003.htm 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个 ...
- sql点滴42—mysql中的数据结构
原文:sql点滴42-mysql中的数据结构 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小 ...
- Python中的数据结构
Python中的数据结构 这里总结一下Python中的内置数据结构(Built-in Data Structure):列表list.元组tuple.字典dict.集合set,涵盖的仅有部分重点,详细地 ...
- 在Object-C中学习数据结构与算法之排序算法
笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...
- PHP中的数据结构:DS扩展
PHP7以上才能安装和使用该数据结构扩展,安装比较简单: 1. 运行命令 pecl install ds 2. 在php.ini中添加 extension=ds.so 3. 重启PHP或重载配置 在这 ...
- JavaScript中的数据结构及实战系列
本系列主要是讲解JavaScript中的数据结构及在实际项目中遇到的地方 JavaScript中的数据结构及实战系列(1):队列 JavaScript中的数据结构及实战系列(2):栈
随机推荐
- GitBook 使用
介绍 GitBook是一个基于Node.js的命令行工具,可使用 Github/Git和Markdown来制作精美的电子书,GitBook 并非关 Git的教程. 导出格式有PDF.HTML等,需要添 ...
- 动手写个数字输入框1:input[type=number]的遗憾
前言 最近在用Polymer封装纯数字的输入框,开发过程中发现不少坑,也有很多值得研究的地方.本系列打算分4篇来叙述这段可歌可泣的踩坑经历: <动手写个数字输入框1:input[type=nu ...
- markdown 基础语法
markdown 基础 你好,我是markdown文档 介绍 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 说的简单一点,mar ...
- MySql的学习笔记
良好的理解sql语句: 列:理解可以运算的成变量 where: 理解成表达式,放在行中看是否成立 查出来的结果可以当成一张表理解,select 套用select综合查询: 五种查询 where g ...
- DNS分析之 dnsdict6 使用方法
基本用法就是: dnsdict6 -d46 -t 10 baidu.com
- PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结
前 言 OOP 学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1 PHP中的抽象 ...
- Navicat连接报错:cannot load OCI DLL,126
32位系统下报错:cannot load OCI DLL,126 解决方法:navicat 菜单中 -工具->选项->OCI 选择oracle安装目录下bin里面的oci.dll 在win ...
- 用CSS美化checkbox复选按钮和raido单选按钮-适用于移动端
最终效果: 实现方法 index.html: <!DOCTYPE html> <html> <head> <title></title> & ...
- PHPCMS V9表单向导调用及分页
参考资料如下:v9_form_tlj为你的表单数据表,`flqh`,`title`,`sj`,`username`,`datetime` 为你表单内的字段,page="$_GET" ...
- 【转载】Sublime Text 3065 Keygen and Patcher
原始日期:2014-10-01 18:25 差不多时隔一年了,Sublime Text 终于更新啦!相信很多友友都已经升级到3065版本了,所以我也特地抽空为大家做了个新版补丁.该补丁仅作为 ...