博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php spl数据结构
阅读量:4660 次
发布时间:2019-06-09

本文共 3651 字,大约阅读时间需要 12 分钟。

1.双链表SplDoublyLinkedList

结构如图:

类定义:

SplDoublyLinkedList  implements Iterator   , ArrayAccess   , Countable   {/* 方法 */public __construct  ( void ) //构造函数public void add  ( mixed  $index  , mixed  $newval  )//在特定位置添加值,原位置的值向后退public mixed bottom  ( void )  //返回链表首值public int count  ( void )  //链表深度public mixed current  ( void )//当前指针节点值public int getIteratorMode  ( void )//获取链表迭代模式,0为链表,IT_MODE_LIFO (Stack style) SplDoublyLinkedList::IT_MODE_FIFO (Queue style)public bool isEmpty  ( void )//判断链表是否为空public mixed key  ( void )//当前节点的键值public void next  ( void )//指针下移public bool offsetExists  ( mixed  $index  )//判断节点是否存在(通过key值))public mixed offsetGet  ( mixed  $index  )//获取节点值public void offsetSet  ( mixed  $index  , mixed  $newval  )//修改节点值public void offsetUnset  ( mixed  $index  ) //销毁指定节点,不影响当前节点public mixed pop  ( void )//删除链尾链尾public void prev  ( void )//指针迁移public void push  ( mixed  $value  )//链尾插入public void rewind  ( void ) //指针初始化public string serialize  ( void ) //序列化链表为字符public void setIteratorMode  ( int $mode  )//设置遍历模式public mixed shift  ( void )删除链首public mixed top  ( void )//链表尾public void unserialize  ( string $serialized  )//反序列化存储public void unshift  ( mixed  $value  ) //链首插值public bool valid  ( void ) //判断链表是否有效}

  测试代码:

$value().PHP_EOL; } }else{ echo "$name is:".$doub->$name().PHP_EOL; } return ;}$echo = array();$doub = new SplDoublyLinkedList();$doub->push(1);$doub->push(2);//从尾节点插入值$doub->unshift(9);//从首节点插入$doub->push(4);$doub->push(5);$doub->push(6);$doub->push(7);$doub->push(8);$doub->push(11);$doub->pop();//删除尾节点$doub->shift();//删除首节点$doub->rewind(); //初始化当前指针print_r($doub);$doub->add(1,10);//在特定位置1插入值print_r($doub);$echo = ['count', 'bottom', 'top', 'getIteratorMode', 'serialize', 'current','next','next','next', 'next','current','prev','current','isEmpty' ];out($echo);$doub->offsetSet(3,'');//$doub->offsetUnset(1);print_r($doub);out(['current', 'valid']);

  

2.栈SplStack

结构:

栈继承了双向链表的所有方法

push("hello");echo 'stack pop is: ' .$stack->pop().PHP_EOL;

3.队列SplQueue

结构图:

继承了双向链表所有方法

另添加了两个方法

mixed dequeue  ( void ) //出队列void enqueue  ( mixed  $value  ) //入队列

 

enqueue("queue");//入队$queue->enqueue("second");echo '出队数据是'.$queue->dequeue();//出队 queue

  

4.堆SplHeap

堆是完全二叉树,且节点值比左右孩子的值大(大顶堆)或者比左右孩子的值小(小顶堆)

大顶堆结构:

类定义:

abstract SplHeap  implements Iterator   , Countable   {/* 方法 */public __construct  ( void )abstract protected int compare  ( mixed  $value1  , mixed  $value2  )//抽象方法,需要在自己的类里实现,通过比较决定是大顶堆还是小顶堆public int count  ( void )public mixed current  ( void )public mixed extract  ( void )public void insert  ( mixed  $value  )public bool isEmpty  ( void )public mixed key  ( void )public void next  ( void )public void recoverFromCorruption  ( void )public void rewind  ( void )public mixed top  ( void )public bool valid  ( void )}

  对堆使用foreach后堆变空(堆内没有数据)

测试代码:

insert( 4 );//向堆中插入数据$obj->insert( 8 );$obj->insert( 1 );$obj->insert( 0 ); echo 'top is:'. $obj->top().PHP_EOL; //8echo 'count is :'.$obj->count().PHP_EOL; //4$obj->insert( 6 );$obj->insert( 7 );print_r($obj);echo 'extract:'.$obj->extract().PHP_EOL;//抽取顶节点同时从堆中删除print_r($obj);$obj->recoverFromCorruption();//从无序堆恢复foreach( $obj as $number ) { echo '=>'. $number.PHP_EOL;}print_r($obj);//打印出的堆没有数据,因为对堆使用了foreach

大顶堆:SplMaxHeap ,小顶堆SplMinHeap 继承SplHeap类,把  compar变成私有方法

insert( 4 );$obj->insert( 8 );$obj->insert( 1 );$obj->insert( 0 );echo '/*****大顶堆*****/'; print_r($obj);$obj = new SplMinHeap();$obj->insert( 4 );$obj->insert( 8 );$obj->insert( 1 );$obj->insert( 0 );echo '/*****小顶堆*****/'; print_r($obj);

  

 

 

除此之外还有优先队列,定长数组,对象存储等结构

 

转载于:https://www.cnblogs.com/scarecrowlxb/p/6539606.html

你可能感兴趣的文章
GPUImage
查看>>
centos7-默认启动方式改变
查看>>
STL学习笔记(七) 程序中使用STL
查看>>
ASP.NET中的几种弹出框提示基本实现方法
查看>>
大话多线程,轻松搞定多线程
查看>>
打印杨辉三角形的前10行。
查看>>
泊松过程(一)
查看>>
NOIP2018提高组模拟题(五)
查看>>
Jmeter中主要管理器功用
查看>>
python之路_rest-framework之版本、解析器、序列化
查看>>
美工没时间给图,简单的图让我们自己写,哭啊! 所以具体研究了一下shape的使用,保存下...
查看>>
js 事件监听,执行某操作
查看>>
最小生成树问题------------Prim算法(TjuOj_1924_Jungle Roads)
查看>>
细说REST API安全之防止重放攻击
查看>>
Spring Shell入门介绍
查看>>
query多选下拉框插件 jquery-multiselect(修改)
查看>>
js图片放大
查看>>
0617 python 基础04
查看>>
0622 python 基础05
查看>>
Diophantus of Alexandria
查看>>