2018-07-18 棧與隊(duì)列

上周還說寫寫markdown的學(xué)習(xí),但是看了一遍博客發(fā)現(xiàn)似乎沒什么可說的寂殉,看了一圈教程發(fā)現(xiàn)似乎只要模仿就好了囚巴,參考鏈接

http://www.reibang.com/p/q81RER

所以這周想隨便寫寫。

兩種數(shù)據(jù)結(jié)構(gòu)

棧和隊(duì)列友扰,兩種我們用的最多也是最常見的兩種數(shù)據(jù)結(jié)構(gòu)彤叉。讓我回憶一下,在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的時(shí)候村怪,一開始介紹了順序表秽浇,鏈表,然后就是棧和隊(duì)列甚负,再然后就是樹柬焕,圖一類的比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)审残。而棧和隊(duì)列,可以說是比較常用的兩種斑举,因?yàn)槠鋵?shí)現(xiàn)方式簡單搅轿,很多語言把這兩種數(shù)據(jù)結(jié)構(gòu)專門封裝了庫,而且這兩種本身也和程序的執(zhí)行有關(guān)(調(diào)用棧等等)富玷。

區(qū)別與共同點(diǎn)

從這里開始我將結(jié)合js做一些常用點(diǎn)的討論璧坟。首先,棧和隊(duì)列赎懦,無論在當(dāng)時(shí)進(jìn)行編寫的時(shí)候還是后來用js進(jìn)行練習(xí)雀鹃,我都認(rèn)為,順序表励两,鏈表褐澎,棧和隊(duì)列都可以理解為數(shù)組,甚至樹和圖也可以這么理解伐蒋。不過他們會(huì)有很多自己的特性工三,以至于他們不能完全像數(shù)組那么隨意。

就今天的主角——棧和隊(duì)列來說先鱼,他們的共同特點(diǎn)就是俭正,只能從首尾進(jìn)行插入和刪除,棧是只能從頭進(jìn)行插入和刪除焙畔,隊(duì)列是要從頭進(jìn)行插入掸读,從尾部進(jìn)行刪除。棧和隊(duì)列這樣的特性宏多,決定了他們的各自數(shù)據(jù)插入刪除的結(jié)構(gòu)儿惫,棧必須是后進(jìn)先出,因?yàn)樗挥袟m斠粋€(gè)出入口伸但,隊(duì)列是先進(jìn)先出肾请,靈魂繪圖。更胖。铛铁。:

所以無論何時(shí)我們做任何操作的時(shí)候,我們必須記住兩個(gè)各自的特性却妨,從刪除到添加饵逐,從搜索到遍歷,從逆序到交換等各種操作都得講究這種先進(jìn)先出彪标,后進(jìn)先出的特性倍权。比如我要在棧或者中刪除B捞烟,那么絕對不可以像數(shù)組刪除一樣直接從中間干掉就好薄声,需要滿足兩者的特性当船,棧必須B移到棧頂刪除,隊(duì)列必須到隊(duì)列尾刪除奸柬,交換的時(shí)候不能破壞棧與隊(duì)列的結(jié)構(gòu)生年,或者也可以一個(gè)一個(gè)的pop,然后再一個(gè)一個(gè)的push進(jìn)來廓奕。

未完抱婉。。桌粉。蒸绩。

更復(fù)雜的形式(鏈棧,鏈隊(duì)列铃肯,循環(huán)隊(duì)列)

手寫js的棧與隊(duì)列

今天再填一個(gè)坑患亿,手寫了js的棧和隊(duì)列,當(dāng)然使用了typescript押逼,所以從形式上是更直觀的面向?qū)ο?/p>

------

interface ObjectT {

? value: string,

}

class Stack {

? private stackContent: ObjectT[]

? private stackTop?: ObjectT

? private objectNumber: number

? constructor(stack:ObjectT[]) {

? ? this.stackContent = stack || []

? ? this.objectNumber = this.stackContent.length

? ? if(this.objectNumber != 0) {

? ? ? this.stackTop = this.stackContent[0]

? ? }

? }

? public push(obj: ObjectT) {

? ? this.objectNumber++

? ? for(let i = this.objectNumber-1;i >= 0;i--) {

? ? ? if(i == 0) {

? ? ? ? this.stackContent[i] = obj

? ? ? }

? ? ? else {

? ? ? ? this.stackContent[i] = this.stackContent[i-1]

? ? ? }

? ? }

? ? this.stackTop = this.stackContent[0]

? ? console.log(this.stackContent)

? ? console.log(this.stackTop)

? }

? public pop() {

? ? if(this.objectNumber > 0) {

? ? ? for(let i = 0;i < this.objectNumber-1;i++) {

? ? ? ? this.stackContent[i] = this.stackContent[i+1]

? ? ? }

? ? ? let result = this.stackTop

? ? ? this.stackTop = this.stackContent[0]

? ? ? delete this.stackContent[this.objectNumber-1]

? ? ? this.objectNumber--

? ? ? return result

? ? }

? }

}

class Queue {

? private queueContent: ObjectT[]

? private queueTop?: ObjectT

? private queueTail?: ObjectT

? private objectNumber: number

? constructor(queue: ObjectT[]) {

? ? this.queueContent = queue || []

? ? this.objectNumber = this.queueContent.length

? ? if(this.objectNumber != 0) {

? ? ? this.queueTop = this.queueContent[0]

? ? ? this.queueTail = this.queueContent[this.objectNumber-1]

? ? }

? }

? public push(obj:ObjectT) {

? ? this.objectNumber++

? ? for(let i = this.objectNumber-1;i >= 0;i--) {

? ? ? if(i == 0) {

? ? ? ? this.queueContent[i] = obj

? ? ? }

? ? ? else {

? ? ? ? this.queueContent[i] = this.queueContent[i-1]

? ? ? }

? ? }

? ? this.queueTop = this.queueContent[0]

? ? this.queueTail = this.queueContent[this.objectNumber-1]

? ? console.log(this.queueContent)

? ? console.log(this.queueTop)

? ? console.log(this.queueTail)

? }

? public pop() {

? ? if(this.objectNumber > 0) {

? ? ? let result = this.queueTail

? ? ? delete this.queueContent[this.objectNumber-1]

? ? ? this.objectNumber--

? ? ? this.queueTail = this.queueContent[this.objectNumber-1]

? ? ? console.log(this.queueContent)

? ? ? return result

? ? }


? }

}

-----------

有趣的題目步藕,兩個(gè)隊(duì)列模擬棧,兩個(gè)棧模擬隊(duì)列

計(jì)算機(jī)的堆棧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挑格,一起剝皮案震驚了整個(gè)濱河市咙冗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漂彤,老刑警劉巖雾消,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挫望,居然都是意外死亡立润,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門媳板,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桑腮,“玉大人,你說我怎么就攤上這事拷肌〉降” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵巨缘,是天一觀的道長。 經(jīng)常有香客問我采呐,道長若锁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任斧吐,我火速辦了婚禮又固,結(jié)果婚禮上仲器,老公的妹妹穿的比我還像新娘。我一直安慰自己仰冠,他們只是感情好乏冀,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洋只,像睡著了一般辆沦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上识虚,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天肢扯,我揣著相機(jī)與錄音,去河邊找鬼担锤。 笑死蔚晨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肛循。 我是一名探鬼主播铭腕,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼多糠!你這毒婦竟也來了累舷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤熬丧,失蹤者是張志新(化名)和其女友劉穎笋粟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體析蝴,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡害捕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闷畸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尝盼。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖佑菩,靈堂內(nèi)的尸體忽然破棺而出盾沫,到底是詐尸還是另有隱情,我是刑警寧澤殿漠,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布赴精,位于F島的核電站,受9級特大地震影響绞幌,放射性物質(zhì)發(fā)生泄漏蕾哟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谭确。 院中可真熱鬧帘营,春花似錦、人聲如沸逐哈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昂秃。三九已至禀梳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間械蹋,已是汗流浹背出皇。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哗戈,地道東北人征冷。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓锭弊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子坝初,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359