gpt4 book ai didi

老生常谈PHP中的数据结构:DS扩展

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章老生常谈PHP中的数据结构:DS扩展由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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(). 。

?
1
2
3
4
5
6
7
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. 。

?
1
2
3
4
5
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). 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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. 。

?
1
2
3
4
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”集合,只允许在结构顶部进行访问和迭代.

?
1
2
3
4
5
6
7
8
9
10
11
12
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”集合,只允许在结构前端进行访问和迭代.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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. 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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中的数据结构:DS扩展就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

最后此篇关于老生常谈PHP中的数据结构:DS扩展的文章就讲到这里了,如果你想了解更多关于老生常谈PHP中的数据结构:DS扩展的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com