php标准库spl之链表,堆栈,队列
双向链表类:SplDoublyLinkedList
1. 增删节点的方法
push:向链表的尾部插入一个节点
pop:获取链表中的尾部节点,并且从链表中删除这个节点;操作不改变当前指针的位置
unshift:向链表的头部插入一个节点
shift:删除一个链表头部节点
2. 指针操作方法
rewind:使链表的当前指针指向链表的头部(即bottom)
current:获得链表当前节点指针指向的元素,必须在调用之前先调用rewind。当指向的节点被删除之后,会指向一个空节点
next:让链表当前的指针指向下一个节点,curent的返回值随之改变
bottom:获得链表头部元素,当前指针位置不变
top:获得链表尾部元素,当前指针位置不变
3.其他方法(用法见堆栈类)
valid:检查链表中是否还存在节点,循环输出时,可以用作判断
count:统计链表中节点的个数
key:返回当前节点的键值
offsetSet :设置指定键的值,注意:如键为0,在链表中0指向头部即bottom,在堆栈中指向栈顶。
offunset:注销指定键的值
<code><span></span>php <span>/** * Created by 马廷广 * User: 马廷广 * Date: 2015/8/5 * Time: 10:52 */</span><span>$obj</span><span>=</span><span>new</span> SplDoublyLinkedList(); <span>$obj</span><span>-></span>push(<span>'b'</span>); <span>$obj</span><span>-></span>push(<span>'c'</span>); <span>$obj</span><span>-></span>unshift(<span>'a'</span>); var_dump(<span>$obj</span>); <span>/* array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } ) */</span><span>$obj</span><span>-></span>rewind(); var_dump(<span>$obj</span><span>-></span>current());<span>//string(1) "a"</span><span>$obj</span><span>-></span>next(); var_dump(<span>$obj</span><span>-></span>current());<span>//string(1) "a"</span> var_dump(<span>$obj</span><span>-></span>bottom());<span>//string(1) "a"</span> var_dump(<span>$obj</span><span>-></span>top());<span>//string(1) "c"</span> var_dump(<span>$obj</span><span>-></span>pop());<span>//string(1) "c"</span> var_dump(<span>$obj</span>); <span>/* * array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } */</span> var_dump(<span>$obj</span><span>-></span>shift());<span>//string(1) "a"</span> var_dump(<span>$obj</span>); <span>/* * array(1) { [0]=> string(1) "b" } */</span></code>
堆栈类:继承自SplDoublyLinkedList类的SplStack类
原理:堆栈类的底层是由栈实现的,栈是一种先进后出的数据结构,所以SplStack类的一些继承自SplDoublyLinkedList类的方法有一些理解上的不同,如rewind方法,spl使用rewind方法后指针将指向图中的栈顶,push和pop操作的是栈顶元素,unshift和shift操作的是栈底元素
<code><span></span>php <span>/** * Created by 马廷广 * User: 马廷广 * Date: 2015/8/5 * Time: 11:47 */</span><span>$stack</span><span>=</span><span>new</span> SplStack(); <span>$stack</span><span>-></span>push(<span>'a'</span>); <span>$stack</span><span>-></span>push(<span>'b'</span>); <span>$stack</span><span>-></span>push(<span>'c'</span>); echo <span>$stack</span><span>-></span>count();<span>//3</span><span>$stack</span><span>-></span>rewind(); echo <span>$stack</span><span>-></span>current();<span>//c</span><span>$stack</span><span>-></span>offsetSet(<span>0</span>,<span>'d'</span>);<span>//offsetSet中0指向的是图中的栈顶,由栈顶向下递增1,2,3,4</span><span>while</span>(<span>$stack</span><span>-></span>valid()){ echo <span>$stack</span><span>-></span>key()<span>.</span><span>"->"</span><span>.</span><span>$stack</span><span>-></span>current(); <span>$stack</span><span>-></span>next(); } <span>/*2->d 1->b 0->a */</span></code>
队列类:继承自SplDoublyLinkedList类的SplQueue类
enqueue:进入队列
dequeue:退出队列
队列类的rewind,offsetSet等方法类似于链表
<code><?php /** * Created <span>by 马廷广 * <span>User</span>: 马廷广 * <span>Date</span>: <span>2015</span>/<span>8</span>/<span>5</span> * <span>Time</span>: <span>12</span>:<span>36</span> */ $obj = <span>new</span> SplQueue(); $obj->enqueue(<span>'a'</span>); $obj->enqueue(<span>'b'</span>); $obj->enqueue(<span>'c'</span>); var_dump($obj); /* [<span>0</span>]<span>=></span> string(<span>1</span>) <span>"a"</span> [<span>1</span>]<span>=></span> string(<span>1</span>) <span>"b"</span> [<span>2</span>]<span>=></span> string(<span>1</span>) <span>"c"</span> } */ $obj->unshift(<span>"d"</span>); $obj->push(<span>'e'</span>); var_dump($obj); /* * array(<span>5</span>) { [<span>0</span>]<span>=></span> string(<span>1</span>) <span>"d"</span> [<span>1</span>]<span>=></span> string(<span>1</span>) <span>"a"</span> [<span>2</span>]<span>=></span> string(<span>1</span>) <span>"b"</span> [<span>3</span>]<span>=></span> string(<span>1</span>) <span>"c"</span> [<span>4</span>]<span>=></span> string(<span>1</span>) <span>"e"</span> } */ $obj->rewind(); echo $obj->current();<span>//</span>d $obj->offsetSet(<span>0</span>,<span>'h'</span>); var_dump($obj); /* * array(<span>5</span>) { [<span>0</span>]<span>=></span> string(<span>1</span>) <span>"h"</span> [<span>1</span>]<span>=></span> string(<span>1</span>) <span>"a"</span> [<span>2</span>]<span>=></span> string(<span>1</span>) <span>"b"</span> [<span>3</span>]<span>=></span> string(<span>1</span>) <span>"c"</span> [<span>4</span>]<span>=></span> string(<span>1</span>) <span>"e"</span> } */</code>
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了php标准库spl之链表,堆栈,队列,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Ramai pengguna akan memilih jenama Huawei apabila memilih jam tangan pintar Antaranya, Huawei GT3pro dan GT4 adalah pilihan yang sangat popular. Apakah perbezaan antara Huawei GT3pro dan GT4? 1. Rupa GT4: 46mm dan 41mm, bahan cermin kaca + badan keluli tahan karat + cangkang belakang gentian resolusi tinggi. GT3pro: 46.6mm dan 42.9mm, bahannya ialah kaca nilam + badan titanium/badan seramik + cangkerang belakang seramik 2. GT4 yang sihat: Menggunakan algoritma Huawei Truseen5.5+ terkini, hasilnya akan lebih tepat. GT3pro: Penambahan elektrokardiogram ECG dan saluran darah serta keselamatan

Tukar jenis data asas kepada rentetan menggunakan fungsi String.valueOf() Java Dalam pembangunan Java, apabila kita perlu menukar jenis data asas kepada rentetan, kaedah biasa ialah menggunakan fungsi valueOf() kelas String. Fungsi ini boleh menerima parameter jenis data asas dan mengembalikan perwakilan rentetan yang sepadan. Dalam artikel ini, kami akan meneroka cara menggunakan fungsi String.valueOf() untuk penukaran jenis data asas dan menyediakan beberapa contoh kod untuk

Kaedah menukar tatasusunan char kepada rentetan: Ia boleh dicapai dengan penugasan Gunakan sintaks {char a[]=" abc d\0efg ";string s=a;} untuk membenarkan tatasusunan char terus memberikan nilai kepada rentetan, dan laksanakan. kod untuk melengkapkan penukaran.

Fail dump biasanya merujuk kepada fail binari, juga dikenali sebagai fail dump atau fail dump teras. Fail jenis ini dijana oleh sistem komputer apabila ia menghadapi ralat yang serius atau situasi tidak normal Ia digunakan untuk menyimpan status, tindanan, daftar, imej memori, log dan maklumat lain sistem atau aplikasi.

Mengapa Alat Snipping Tidak Berfungsi pada Windows 11 Memahami punca masalah boleh membantu mencari penyelesaian yang betul. Berikut ialah sebab utama Alat Snipping mungkin tidak berfungsi dengan betul: Focus Assistant dihidupkan: Ini menghalang Snipping Tool daripada dibuka. Aplikasi rosak: Jika alat snipping ranap semasa pelancaran, ia mungkin rosak. Pemacu grafik lapuk: Pemacu yang tidak serasi mungkin mengganggu alat snipping. Gangguan daripada aplikasi lain: Aplikasi lain yang sedang berjalan mungkin bercanggah dengan Alat Snipping. Sijil telah tamat tempoh: Ralat semasa proses naik taraf boleh menyebabkan penyelesaian mudah ini sesuai untuk kebanyakan pengguna dan tidak memerlukan sebarang pengetahuan teknikal khusus. 1. Kemas kini apl Windows dan Microsoft Store

Gantikan aksara (rentetan) dalam rentetan menggunakan fungsi String.replace() Java Dalam Java, rentetan ialah objek tidak boleh ubah, yang bermaksud apabila objek rentetan dicipta, nilainya tidak boleh diubah suai. Walau bagaimanapun, anda mungkin menghadapi situasi di mana anda perlu menggantikan aksara atau rentetan tertentu dalam rentetan. Pada masa ini, kita boleh menggunakan kaedah replace() dalam kelas String Java untuk melaksanakan penggantian rentetan. Kaedah replace() kelas String mempunyai dua jenis:

Salam semua, hari ini saya akan berkongsi dengan anda pengetahuan asas Java: String. Tidak perlu diperkatakan kepentingan kelas String, ia boleh dikatakan sebagai kelas yang paling banyak digunakan dalam pembangunan back-end kami, jadi adalah perlu untuk membincangkannya.

OPStack ialah rangka kerja blockchain sumber terbuka yang dikeluarkan oleh Optimism Collective, kumpulan pembangunan di sebalik Optimism Network. Ia adalah alat penting untuk kedua-dua komuniti Ethereum dan Optimisme. Matlamat utama OPStack adalah untuk mengukuhkan Rangkaian Optimisme, menyediakan alatan perisian utama kepada Optimisme Mainnet, serta Optimisme Superchain yang akan datang dan model tadbir urusnya. Dengan menyediakan persekitaran berorientasikan pembangun, idea teras OPStack adalah untuk menggalakkan pertumbuhan dan inovasi dalam ruang Ethereum. Ia membuka jalan untuk pembangunan termaju dan menjadikan penciptaan blockchain lebih mudah. OPStac
