# PHP数组和数据结构

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

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

**单链表**

![](https://1303647163-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT30woYyQ9bJF96Hh%2F-LfnTB5KYnkOx0V3e4EY%2F-LfnTLPT8X_M26AZ_lob%2Fphp%E6%95%B0%E7%BB%84%E5%92%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-%E5%8D%95%E9%93%BE%E8%A1%A8.png?generation=1558862981881438\&alt=media)

**双链表**

![](https://1303647163-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT30woYyQ9bJF96Hh%2F-LfnTB5KYnkOx0V3e4EY%2F-LfnTLPWzVMy50xAC9WL%2Fphp%E6%95%B0%E7%BB%84%E5%92%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-%E5%8F%8C%E9%93%BE%E8%A1%A8.png?generation=1558862981836562\&alt=media)

**循环链表**

![](https://1303647163-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfnT30woYyQ9bJF96Hh%2F-LfnTB5KYnkOx0V3e4EY%2F-LfnTLPYAiF_7OKf9yXv%2Fphp%E6%95%B0%E7%BB%84%E5%92%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-%E5%BE%AA%E7%8E%AF%E9%93%BE%E8%A1%A8.png?generation=1558862981841175\&alt=media)

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

散列表（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, 输出最后那个大王的编号。
