棧(stack)的三種含義 ?
含義一:數(shù)據(jù)結(jié)構(gòu)?stack的第一種含義是一組數(shù)據(jù)的存放方式,特點(diǎn)為L(zhǎng)IFO,即后進(jìn)先出(Last in, first out)。
含義二:代碼運(yùn)行方式 ?stack的第二種含義是"調(diào)用棧"(call stack),表示函數(shù)或子例程像堆積木一樣存放,以實(shí)現(xiàn)層層調(diào)用。
含義三:內(nèi)存區(qū)域 ?stack的第三種含義是存放數(shù)據(jù)的一種內(nèi)存區(qū)域。程序運(yùn)行的時(shí)候,需要內(nèi)存空間存放數(shù)據(jù)。一般來(lái)說(shuō),系統(tǒng)會(huì)劃分出兩種不同的內(nèi)存空間:一種叫做stack(棧),另一種叫做heap(堆)。
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式 ,
棧和隊(duì)列的實(shí)現(xiàn)可以用順序存儲(chǔ)結(jié)構(gòu)或鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu).
順序存儲(chǔ)結(jié)構(gòu):順序支持隨機(jī)存取,方便操作
鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu):本質(zhì)上就是一個(gè)鏈表,插入和刪除上,鏈?zhǔn)降囊软樞虻姆奖?br>
堆(heap),棧(stack)與隊(duì)列(queue)
堆(heap) 堆數(shù)據(jù)結(jié)構(gòu)
堆數(shù)據(jù)結(jié)構(gòu)是一種樹(shù)狀結(jié)構(gòu)。它的存取數(shù)據(jù)的方式,則與書(shū)架與書(shū)非常相似,將根節(jié)點(diǎn)最大的堆叫做最大堆或大根堆,根節(jié)點(diǎn)最小的堆叫做最小堆或小根堆。一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能被回收,分配方式倒是類似于鏈表。堆則是存放在二級(jí)緩存中,生命周期由虛擬機(jī)的垃圾回收算法來(lái)決定(并不是一旦成為孤兒對(duì)象就能被回收)。所以調(diào)用這些對(duì)象的速度要相對(duì)來(lái)得低一些。
引用類型是保存在堆內(nèi)存中的對(duì)象
棧(stack) 又名堆棧
類似乒乓球桶,先進(jìn)后出,后進(jìn)先出,由操作系統(tǒng)自動(dòng)分配釋放 ,一級(jí)緩存, 他們通常都是被調(diào)用時(shí)處于存儲(chǔ)空間中,調(diào)用完畢立即釋放。
基本類型是保存在棧內(nèi)存中的簡(jiǎn)單數(shù)據(jù)段,它們的值都有固定的大小,保存在??臻g,通過(guò)按值訪問(wèn),JavaScript中有6種基礎(chǔ)數(shù)據(jù)類型,分別是Undefined、Null、Boolean、Number、String,Symbol

隊(duì)列
隊(duì)列是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu)。正如排隊(duì)過(guò)安檢一樣,排在隊(duì)伍前面的人一定是最先過(guò)檢的人。用以下的圖示可以清楚的理解隊(duì)列的原理。




