> For the complete documentation index, see [llms.txt](https://phper.shujuwajue.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://phper.shujuwajue.com/shu-zu/phpshu-zu-he-shu-ju-jie-gou.md).

# PHP数组和数据结构

## 数组和数据结构之“链表”

链表能存储多个数据元素，他就像一条线一样，把所有存储的数据元素连在一起，所以也称作是线性的数据结构。

**单链表**

![](/files/-LfnTLPT8X_M26AZ_lob)

**双链表**

![](/files/-LfnTLPWzVMy50xAC9WL)

**循环链表**

![](/files/-LfnTLPYAiF_7OKf9yXv)

## 数组和数据结构之“散列表”

散列表（Hash table，也叫哈希表），是根据关键字（Key value）而直接访问在内存存储位置的一种数据结构。

## 数组和数据结构之“栈”

栈作为一种数据结构，是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据（LIFO, Last In First Out）。

**数组实现“栈”的核心操作**

```php
$stack = array(34, 35, 321, 98, 20);
$item  = array_pop($stack); //出栈
$item  = push($stack, $item); //入栈
```

## 数组和数据结构之“队列”

队列就是是先进先出（FIFO, First-In-First-Out）的线性表。队列只允许在后端（称为rear）进行插入操作，在前端（称为front）进行删除操作。

## PHP数组解决“约瑟夫环”问题

一群猴子排成一圈，按1，2，...，n依次编号。然后从第1只开始数，数到第m只,把它踢出圈，从它后面再开始数，再数到第m只，在把它踢出去...，如此不停的进行下去，直到最后只剩下一只猴子为止，那只猴子就叫做大王。

要求编程模拟此过程，输入m、n, 输出最后那个大王的编号。
