検索
ホームページバックエンド開発PHPチュートリアルPHPのデータ構造:DS拡張機能の詳細説明
PHPのデータ構造:DS拡張機能の詳細説明Feb 07, 2018 am 09:50 AM
phpデータ構造詳しい説明

この記事では主に、PHP のデータ構造である DS 拡張機能に関するありふれた話をお届けします。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

このデータ構造拡張機能をインストールして使用するには、PHP 7 以降が必要です。インストールは比較的簡単です:

1. PHP に extension=ds.so を追加します。 .ini

3. PHP を再起動するか、設定を再ロードします

コレクション インターフェイス:

このライブラリ内のすべてのデータ構造に共通の関数が含まれる基本インターフェイス。すべての構造が走査可能であり、カウント可能であり、json_encode() を使用して json に変換できることが保証されます。

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 )
}

ハッシュ可能なインターフェイス:

これにより、オブジェクトをキーとして使用できます。インターフェイス: シーケンスは、一次元の数値キー配列。ただし、いくつかの特性を除きます:
値には常に [0, 1, 2, …, size - 1] としてインデックスが付けられます。

インデックスによる値へのアクセスのみが許可されます。 [0, size - 1] の範囲内。

ユースケース:

配列をリストとして使用する場合 (キーには関係ない)。

SplDoublyLinkedList および SplFixedArray のより効率的な代替手段。

Vectorクラス:

ベクトルは、自動的に拡大および縮小する連続バッファ内の値のシーケンスです。これは最も効率的なシーケンシャル構造であり、値のインデックスはバッファ内のインデックスに直接マップされ、成長係数は特定の倍数や指数に束縛されません。これには次の利点と欠点があります:

配列構文 (角括弧) をサポートします。

同じ数の値に対して、割り当てられたメモリを自動的に解放します。

容量。 2の累乗である必要はありません。

get()、set()、push()、pop()はすべてO(1)です。

ただし、shift()、unshift()、insert()およびRemove( ) はすべて O(n) です。

Ds\Hashable {
/* 方法 */
abstract public bool equals ( object $obj )
abstract public mixed hash ( void )
}

Deque クラス:

DsQueue でも使用される「double-ended queue」の略語には、先頭と末尾の 2 つのポインターがあります。ポインタはバッファの末尾を「ラップアラウンド」できるため、スペースを空けるために他の値を移動する必要がなくなり、シフトとシフト解除が非常に高速になります。これには、DsVector には次のような利点があります。欠点:

配列構文 (角かっこ) をサポートします。同じ数の値の配列よりも全体的なメモリの使用量が少なくなります。

サイズが十分に小さくなったら、割り当てられたメモリを自動的に解放します。

get()、set( )、push( )、pop()、shift()、および unshift() はすべて O(1) です。

ただし、Capacity は 2 のべき乗である必要があります。insert() と Remove() は O(n) です。

Map クラス:

配列とほぼ同じ、キーと値のペアの連続したコレクション。キーは任意のタイプにすることができますが、一意である必要があります。同じキーでマップに追加された場合、値は置き換えられます。これには次の利点と欠点があります:

キーと値はオブジェクトを含む任意の型にできます。

配列構文 (角かっこ) をサポートします。

挿入順序は保持されます。

パフォーマンスとメモリ効率は非常に似ています。配列。

サイズが十分に低くなると、割り当てられたメモリを自動的に解放します。

オブジェクトがキーとして使用されている場合は、配列に変換できません。

Pair クラス:

ペアは、DsMap によってペアリングに使用されます。値を持つキー

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.

クラスを設定: 一意の値のシーケンス。この実装は DsMap と同じハッシュ テーブルを使用します。値はキーとして使用され、マップされた値は無視されます。

値はオブジェクトを含む任意の型にすることができます。構文 (角括弧)。挿入順序は保持されます。

サイズが十分に低下すると、割り当てられたメモリが自動的に解放されます。

add()、remove()、contains() はすべて O(1) です。

ただしPush()、pop()、insert()、shift()、または unshift() はサポートされません。アクセスされたインデックスの前にバッファー内に削除された値がある場合、get() は O(n) になります。 1) それ以外の場合:

スタック クラス: 構造の最上部でのみアクセスと反復を許可する「後入れ先出し」コレクション。

Ds\Pair implements JsonSerializable {
/* 方法 */
public __construct ([ mixed $key [, mixed $value ]] )
}

Queue クラス:

「先入れ先出し」コレクション。構造のフロントエンドでのアクセスと反復のみを許可します。

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 )
}

PriorityQueue クラス: 優先キューはキューと非常によく似ていますが、値は指定された優先順位でキューにプッシュされ、最も高い優先順位を持つ値が常にキューの先頭に配置されます。同じ優先順位の要素」 「先入れ先出し」の順序は引き続き維持されます。 PriorityQueue の反復は破壊的であり、キューが空になるまで継続的にポップ操作を行うことと同等です。最大ヒープを使用して実装されます。


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 )
}

関連推奨事項:

PHP はスタック データ構造とブラケット マッチングを実装します

PHPスタックデータ構造とブラケットマッチングアルゴリズムを例付きで説明

PHPデータ構造の逐次リンクリストと連鎖線形表現の例

以上がPHPのデータ構造:DS拡張機能の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Java中的二叉树结构详解Java中的二叉树结构详解Jun 16, 2023 am 08:58 AM

二叉树是计算机科学中常见的数据结构,也是Java编程中常用的一种数据结构。本文将详细介绍Java中的二叉树结构。一、什么是二叉树?在计算机科学中,二叉树是一种树形结构,每个节点最多有两个子节点。其中,左侧子节点比父节点小,右侧子节点则比父节点大。在Java编程中,常用二叉树表示排序,搜索以及提高对数据的查询效率。二、Java中的二叉树实现在Java中,二叉树

Python 实现栈的几种方式及其优劣Python 实现栈的几种方式及其优劣May 19, 2023 am 09:37 AM

​​想了解更多关于开源的内容,请访问:​​​​51CTO开源基础软件社区​​​​https://ost.51cto.com​​一、栈的概念栈由一系列对象对象组织的一个集合,这些对象的增加和删除操作都遵循一个“后进先出”(LastInFirstOut,LIFO)的原则。在任何时刻只能向栈中插入一个对象,但只能取得或者删除只能在栈顶进行。比如由书构成的栈,唯一露出封面的书就是顶部的那本,为了拿到其他的书,只能移除压在上面的书,如图:栈的实际应用实际上很多应用程序都会用到栈,比如:网络浏览器将最近浏览

PHP8中会支持的数据结构,将为你的代码提供更大空间PHP8中会支持的数据结构,将为你的代码提供更大空间Jun 21, 2023 am 08:13 AM

PHP是一种广泛使用的脚本语言,被广泛用于Web开发,服务器端编程以及命令行编程等。随着PHP不断更新和发展,它也日益成为一个更强大的编程工具,为用户提供了更多的功能和更多的工具来开发高质量的应用程序。其中,数据结构是一个非常重要的领域,一种有效的数据结构可以大大提高程序的性能和可读性。在这篇文章中,我们将讨论PHP8中支持的新数据结构,这些新的数据结构将让

如何解决Java中遇到的代码性能优化问题如何解决Java中遇到的代码性能优化问题Jun 29, 2023 am 10:13 AM

如何解决Java中遇到的代码性能优化问题随着现代软件应用的复杂性和数据量的增加,对于代码性能的需求也变得越来越高。在Java开发中,我们经常会遇到一些性能瓶颈,如何解决这些问题成为了开发者们关注的焦点。本文将介绍一些常见的Java代码性能优化问题,并提供一些解决方案。一、避免过多的对象创建和销毁在Java中,对象的创建和销毁是需要耗费资源的。因此,当一个方法

Java语言中的数据结构与算法介绍Java语言中的数据结构与算法介绍Jun 10, 2023 pm 01:37 PM

随着计算机科学的不断发展,数据结构与算法成为了计算机科学领域中最为基础、重要的模块。数据结构是一种组织和存储数据的方式,它是解决问题的基础。算法则是计算机科学的核心,它是指在计算机程序中解决问题的方法和技术。Java作为一种广泛应用的编程语言,其自带的数据结构和算法库是非常强大的,赋予了开发人员更多的力量。一、数据结构Java中提供了多种数据结构,包括数组

go语言有哪些数据结构go语言有哪些数据结构Dec 16, 2022 pm 02:00 PM

go语言数据结构有四大类:1、基础类型,包括整型(有符号和无符号整数)、浮点数、复数、字符串(由不可变的字节序列构成)、布尔值(只有true和false两个值);2、聚合类型,包括数组、结构体(是由任意个任意类型的变量组合在一起的数据类型);3、引用类型,包括指针、slice(是一个拥有相同元素的可变长度序列)、map、function、channel;4、接口类型。

c语言中数据结构是什么?常见数据结构有哪些?c语言中数据结构是什么?常见数据结构有哪些?Nov 03, 2020 am 11:38 AM

c语言中,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它是计算机存储、组织数据的方式;常见数据结构有:线性数据结构(数组、链表、栈、队列和线性表)、树形结构(二叉树、完全二叉树、二叉查找树、堆)、图形结构(有向图和无向图)。

Java语言常见算法实现方法Java语言常见算法实现方法Jun 11, 2023 pm 05:51 PM

Java语言是目前应用最广泛的编程语言之一,在计算机领域中应用广泛。在Java中,算法是一种非常重要的概念,从最初的排序算法到数据结构和算法的实现,都涉及到了Java语言的一些常用方法。本文将重点讲解Java语言中常见的算法实现方法,包括排序算法、搜索算法、字符串匹配算法以及树形结构的处理方法等,以便初学者更好的掌握Java语言的算法实现。一、排序算法排序算

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター