javascript
JavaScript学习笔记之 数组方法一 堆栈 和队列
數(shù)組的方法 以及 堆棧的操作的方法
JavaScript是一種弱類型語言,不像其它程序語言需要嚴(yán)格定義數(shù)據(jù)類型。在JavaScript中數(shù)組可以任意修改變動,這樣也就出現(xiàn)了一個問題,如果邊遍歷數(shù)組邊操作數(shù)組(比如刪除當(dāng)前項,則所有之后的數(shù)組元素下標(biāo)都將向前移動)是一件很危險的事情。
JavaScript的數(shù)組是一個擁有堆棧和隊列自身優(yōu)點的global對象。也就是說JavaScript數(shù)組可以表現(xiàn)的像棧(LIFO)和隊列(FIFO)一樣操作。這也是JavaScript數(shù)組強(qiáng)大的可操作性的體現(xiàn)。今天來學(xué)習(xí)JavaScript數(shù)組的棧和隊列的操作方法。?
堆棧和隊列
要了解JavaScript數(shù)組的堆棧和隊列方法的操作,需要先對堆棧和隊列基礎(chǔ)知識有所了解。在繼續(xù)后面的內(nèi)容之前,我們先簡單的了解一下堆棧和隊列的概念。
棧和隊列都是動態(tài)的集合,在棧中,可以去掉的元素是最近插入的那一個。棧實現(xiàn)了后進(jìn)先出。在隊列中,可以去掉的元素總是在集合中存在的時間最長的那一個。隊列實現(xiàn)了先進(jìn)先出的策略。
棧是一種LIFO(Last-In-First-Out,后進(jìn)先出)的數(shù)據(jù)結(jié)構(gòu),也就是最新添加的項最早被移除。而棧中項的插入(叫做推入)和移除(叫做彈出),只發(fā)生在一個位置——棧的頂部。
最開始棧中不含有任何數(shù)據(jù),叫做空棧,此時棧頂就是棧底。然后數(shù)據(jù)從棧頂進(jìn)入,棧頂棧底分離,整個棧的當(dāng)前容量變大。數(shù)據(jù)出棧時從棧頂彈出,棧頂下移,整個棧的當(dāng)前容量變小。
比如說,我們在一個箱子中放了很多本書,如果你要拿出第二書,那么你要先把第一本書拿出來,才能拿第二本書出來;拿出第二本書之后,再把第一本書放進(jìn)去。
ECMAScript為數(shù)組專門提供了?push()?和?pop()?方法,以便實現(xiàn)類似棧的行為。?push()?方法可以接收任意數(shù)量的參數(shù),把它們逐個添加到數(shù)組末尾,并返回修改后數(shù)組的長度。而?pop()?方法則從數(shù)組末尾移除最后一項,減少數(shù)組的length值,然后返回移除的項。
?
隊列的基本概念
棧數(shù)據(jù)結(jié)構(gòu)的訪問規(guī)則是LIFO(后進(jìn)先出),而隊列數(shù)據(jù)結(jié)構(gòu)的訪問規(guī)則是FIFO(Fist-In-First-Out,先進(jìn)先出)。隊列在列表的末端添加項,從列表的前端移除項。
入隊列操作其實就是在隊尾追加一個元素,不需要任何移動,時間復(fù)雜度為O(1)。出隊列則不同,因為我們已經(jīng)架設(shè)下標(biāo)為0的位置是隊列的隊頭,因此每次出隊列操作所有元素都要向前移動
ECMAScript為數(shù)組專門提供了?shift()?和?unshift()?方法,以便實現(xiàn)類似隊列的行為。由于?push()?是向數(shù)組末端添加數(shù)組項的方法,因此要模擬隊列只需一個從數(shù)組前端取得數(shù)組項的方法。實現(xiàn)這一操作的數(shù)組方法就是?shift()?,它能夠移除數(shù)組中的第一個項并返回該項,同時將數(shù)組長度減1。
顧名思義,?unshift()?與?shift()?的用途相反:它能在數(shù)組前端添加任意個數(shù)組項并返回新數(shù)組的長度。因此,同時使用unshift()?和?pop()?方法,可以從相反的方向來模擬隊列,即在數(shù)組的前端添加數(shù)組項,從數(shù)組末端移除數(shù)組項。
?
ES3 添加的方法
ES3 子數(shù)組的方法 數(shù)組排序 數(shù)組轉(zhuǎn)換
ES5的方法
轉(zhuǎn)載于:https://www.cnblogs.com/syomm/p/5630068.html
總結(jié)
以上是生活随笔為你收集整理的JavaScript学习笔记之 数组方法一 堆栈 和队列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyQt5学习笔记13----pyqt线
- 下一篇: gradle idea java ssm