在PHP中,因为数组太强大了,这些数据结构都包含了,所以没必要关注这些数据结构。随着时间的推移,这些概念会逐渐消失。这并不意味着PHP中没有数据。结构。PHP中有一个扩展数据结构。此扩展包括这些通用数据结构。详细可以查看连接数据结构PHP数据结构优先队列PriorityQueue双端队列Deque队列FIFO(先进先出)stackLIFO(先进后出)HashtableHashSetCollectionMapDictionary数据结构介绍优先队列PriorityQueuePriorityQueue是与队列非常相似。值被推入具有指定优先级的队列中,具有最高优先级的值将始终位于队列的前面。请注意,对于具有相同优先级的值,保留“先进先出”顺序。遍历PriorityQueue是破坏性的,相当于连续的弹出操作,直到队列为空。设置容量默认容量为8,可以手动设置容量,这个容量不是指队列的长度,而是存储空间。重新分配容量时确保有足够的内存如果该值小于或等于当前容量,容量将保持不变。$queue=newDs\PriorityQueue();$队列->分配(8);获取容量当前手动设置容量时,如果设置容量大于实际占用容量,则返回设置容量。否则,返回实际容量。$queue=newDs\PriorityQueue();//此时返回默认值8$queue->capacity();设置优先级值,优先级越高$queue=newDs\PriorityQueue();$queue->push('value1',1);$queue->push('value2',2);示例$queue=newDs\PriorityQueue();$queue->push('Drifling',2);$queue->push('唐僧',5);$queue->push('白龙马',1);$queue->push('猪八戒',3);$queue->push('孙悟空',4);$cout=$queue->count();for($i=0;$i<$cout;$i++){echo$queue->pop();echoPHP_EOL;}输出唐僧孙悟空猪八戒沙僧白龙马应用场景:为了加快查询速度,防止索引被用于排序,返回前在服务器代码层面手动执行MySQL查询。其他应用场景...双端队列Deque有两个指向头和尾的指针。可以分别在头部和尾部插入和弹出。Pros支持数组语法(方括号)。对于相同数量的值,比数组占用更少的内存。当其大小下降到足够低时自动释放分配的内存。get()、set()、push()、pop()、shift()和unshift()都是O(1)。advantage设置的capacity值必须是2的幂值,默认值为8。比如2^2insert()和remove()都是O(n)。类方法说明双端队列Deque实例$deque=newDs\Deque();$deque->push(...['唐僧','孙悟空','猪八戒','滴水僧','白龙马']);$clone=$deque->copy();$count=$deque->count();echo'head:'.$deque->first().PHP_EOL;echo'tail:'.$deque->last().PHP_EOL;echo'---从末尾开始队列的----'.PHP_EOL;for($i=0;$i<$count;$i++){echo$deque->pop();echoPHP_EOL;}echo'---从行首开始----'.PHP_EOL;for($i=0;$i<$count;$i++){echo$clone->shift();echoPHP_EOL;}输出头:唐僧尾巴:白龙马---从队尾----白龙马沙僧猪八戒孙悟空唐僧---从队长----唐孙悟空猪八戒沙僧应用场景各种应用场景队列FIFO(FirstInFirstOut)队列是“先进先出”或“FIFO”的集合,只允许访问队列最前面的值。示例$queue=newDs\Queue();$queue->push('唐僧');$queue->push(...['孙悟空','猪八戒']);$queue->push(['沙僧','白龙马']);打印_r($队列);OutputDs\QueueObject([0]=>唐僧[1]=>孙悟空[2]=>猪八戒[3]=>数组([0]=>漂流[1]=>白龙马))StackLIFO(FirstInLastOut)Stack是一种“后进先出”或“LIFO”的集合,只允许访问结构顶部的值。示例$Stack=newDs\Stack();$Stack->push('唐僧');$Stack->push(...['孙悟空','猪八戒']);$Stack->push(...['细雨','白龙马']);$cout=$Stack->count();for($i=0;$i<$cout;$i++){echo$Stack->pop();echoPHP_EOL;}输出白龙玛莎和尚猪八戒孙悟空唐僧地图字典Map是键值对[key=>value]的序列集合,类似于数组。键可以是任何类型,但必须是唯一的。如果使用相同的键将值添加到映射中,则后面添加的内容将替换前面的值。优点键和值可以是任何类型,包括支持数组语法的对象。插入顺序被保留。性能和内存效率类似于数据。当大小降到足够低时自动释放分配的内存。缺点当对象作为键时,不能转换为数组。Set是一系列唯一的值,只有一组键不存储值,键不能重复。功德值可以是任何类型,包括对象。支持数组语法。插入顺序被保留。当大小降到足够低时自动释放分配的内存。add()、remove()和contains()的复杂度为O(1)。缺点不支持push(),pop(),insert(),shift(),unshift()get()是O(n)如果在索引被访问之前buffer中有值被移除,否则O(1).Map和Set的区别在于它们的存储方式不同。Map以[key=>value]的形式存储,Set以[...keys]的形式存储;Map和Set都是使用key来保证顺序的,所以key是不允许修改的。
