DS 扩展包路径:[DS扩展包路径]: https://pecl.php.net/package/dsCentOS7 中 DS 扩展安装(使用 phpize)
> phpize
> ./configure --with-php-config=/php/bin/php-config
> make && make install
DS 扩展函数介绍
简介:DS 扩展是 PHP7 高效的数据结构,可以作为 array 的替代.
堆栈:堆栈是后进先出(last in, first out)或后进先出(LIFO)集合,它只允许访问结构顶部的值,并按该顺序进行迭代。
allocate(16);
//查看堆栈
print_r($stack);
/*
输出内容
Ds\Stack Object (
[0] => 13
[1] => 12
[2] => 11
)
*/
//获取当前容量大小,如果入栈数据大小实际容量大于 allocate() 设置容量将返回实际容量;如果实际容量小于 allocate() 设置的容量将返回设置的容量;上面设置16将返回16;如果不设置则返回8
print_r($stack->capacity());
//清空堆栈
print_r($stack->clear());
/*
输出内容
Ds\Stack Object ()
*/
//堆栈转数组
print_r($stack->toArray());
/*
输出数组:
Array (
[0] => 13
[1] => 12
[2] => 11
)
*/
//push 方法参数格式
$stack->push(14);
$stack->push(14,15);
$stack->push([14,15]);
$list = [11,12,13];
$stack = new \Ds\Stack($list);
print_r($stack->count());
//获取堆栈总数 输出:3
堆栈复制并修改堆栈变化对比
13
[1] => 12
[2] => 11
)
*/
$stack_copy = $stack->copy();
print_r($stack_copy);
/*
复制副本输出内容:
Ds\Stack Object (
[0] => 13
[1] => 12
[2] => 11
)
*/
//原堆栈入栈数据
$stack->push(14);
/*
原堆栈输出数据:
Ds\Stack Object (
[0] => 14
[1] => 13
[2] => 12
[3] => 11
)
复制副本堆栈输出数据:
Ds\Stack Object (
[0] => 13
[1] => 12
[2] => 11
)
*/
//复制副本堆栈入栈数据
$stack->push(15);
/*
原堆栈输出数据:
Ds\Stack Object (
[0] => 14
[1] => 13
[2] => 12
[3] => 11
)
复制副本堆栈输出数据:
Ds\Stack Object (
[0] => 15
[1] => 13
[2] => 12
[3] => 11
)
*/
堆栈是否为空对比
isEmpty());
//输出:bool(false)
var_dump($stack1->isEmpty());
//输出:bool(true)
//清空 stack
$stack->clear();
//入栈 stack1
$stack1->push(14);
var_dump($stack->isEmpty());
//输出:bool(true)
var_dump($stack1->isEmpty());
//输出:bool(false)
数据出栈对比
13
[1] => 12
[2] => 11
)
*/
//方法 peek 只返回栈顶数据,不出栈
print_r($stack->peek());
//输出:13
print_r($stack);
/*
调用 peek 后输出数据:
Ds\Stack Object (
[0] => 13
[1] => 12
[2] => 11
)
*/
//方法 pop 返回栈顶数据并出栈
print_r($stack->pop());
//输出:13
print_r($stack);
/*
调用 pop 后输出数据:
Ds\Stack Object (
[0] => 12
[1] => 11
)
*/
队列:队列是一个先入先出或FIFO集合,它只允许访问队列前面的值,并按该顺序进行迭代。
capacity();
//返回当前容量:8
//设置队列内存大小
$queue->allocate(31);
$queue->capacity();
//返回设置后的当前容量:32
//设置队列内存大小
$queue->allocate(33);
$queue->capacity();
//返回设置后的当前容量:64
//capacity 容量总是四舍五入到最接近的2次方。print_r($queue->count());
//获取队列长度 输出:3
队列清空、判断空对比
isEmpty());
//输出:bool(false)
var_dump($queue1->isEmpty());
//输出:bool(true)
$queue->clear();
$queue1->push(14);
var_dump($queue->isEmpty());
//输出:bool(true)
var_dump($queue1->isEmpty());
//输出:bool(false)
队列复制并修改堆栈变化对比
copy();
print_r($queue);
/*
初始化输出队列:
Ds\Queue Object (
[0] => 11
[1] => 12
[2] => 13
)
*/
print_r($queue_copy);
/*
复制副本输出队列:
Ds\Queue Object (
[0] => 11
[1] => 12
[2] => 13
)
*/
//原队列入队数据
$queue->push(14);
/*
原队列输出队列:
Ds\Queue Object (
[0] => 11
[1] => 12
[2] => 13
[3] => 14
)
复制副本输出队列:
Ds\Queue Object (
[0] => 11
[1] => 12
[2] => 13
)
*/
//复制副本队列入队数据
$queue_copy->push(15);
/*
原队列输出队列:
Ds\Queue Object (
[0] => 11
[1] => 12
[2] => 13
)
复制副本输出队列:
Ds\Queue Object (
[0] => 11
[1] => 12
[2] => 13
[3] => 15
)
*/
队列出队数据对比
peek());
//输出:11
print_r($queue);
/*
原队列输出队列:
Ds\Queue Object (
[0] => 11
[1] => 12
[2] => 13
)
*/
//方法 pop 只返回队头数据,并出队列
print_r($queue->pop());
//输出:11
print_r($queue);
/*
原队列输出队列:
Ds\Queue Object (
[0] => 12
[1] => 13
)
*/
队列和堆栈入队数据对比
push(11);
$queue->push(12,13);
$queue->push([14,15]);
print_r($queue);
$stack = new \Ds\Stack();
$stack->push(11);
$stack->push(12,13);
$stack->push([14,15]);
print_r($stack);
//输出数据
//队列数据:
Ds\Queue Object (
[0] => 11
[1] => 12
[2] => 13
[3] => Array (
[a] => 14
[b] => 15
)
[4] => Array (
[0] => 16
[1] => 17
)
)
//堆栈数据:
Ds\Stack Object (
[0] => Array (
[0] => 16
[1] => 17
)
[1] => Array (
[a] => 14
[b] => 15
)
[2] => 13
[3] => 12
[4] => 11
)
/*
结果:
1.队列先入队的在队头,出队先入先出
2.堆栈先入栈的在栈尾,出队先入后出
*/
推荐阅读
- 对GO切片的理解
- 小程序商城网站开发秒杀模块篇
- 盲盒购物网站系统开发建设 第三篇
- Netty核心概念之ChannelHandler&Pipeline&ChannelHandlerContext
- 简单的线程池实现多线程对大文件的读取
- SSH 端口转发与 SOCKS 代理
- Ubuntu16.04/Scala2.11.8安装教程
- 学习PHP中的高精度计时器HRTime扩展
- 使用OpenResty+Lua实现灰度测试(金丝雀)
- 使用源码编译安装PHP扩展