摘要:另外棧也可以用一維數(shù)組或連結(jié)串列的形式來(lái)完成。壓棧就是,出棧就是。出棧成功第個(gè)節(jié)點(diǎn)是這是單鏈表形式的棧的源碼地址。隊(duì)列只允許在后端稱為進(jìn)行插入操作,在前端稱為進(jìn)行刪除操作。
維基百科
堆棧(英語(yǔ):stack)又稱為棧,是計(jì)算機(jī)科學(xué)中一種特殊的串列形式的抽象資料型別,其特殊之處在于只能允許在鏈接串列或陣列的一端(稱為堆疊頂端指標(biāo),英語(yǔ):top)進(jìn)行加入數(shù)據(jù)(英語(yǔ):push)和輸出數(shù)據(jù)(英語(yǔ):pop)的運(yùn)算。另外棧也可以用一維數(shù)組或連結(jié)串列的形式來(lái)完成。
特點(diǎn):先入后出,后入先出。 除頭尾節(jié)點(diǎn)之外,每個(gè)元素有一個(gè)前驅(qū),一個(gè)后繼。
從上面可知,有兩種形式,數(shù)組形式和鏈表的形式。
如果是數(shù)組(Array)的形式,那就很簡(jiǎn)單啦。壓棧就是push,出棧就是pop。
鏈表形式的,每個(gè)元素都有一個(gè)指向前的指針和一個(gè)指向后的指針......等等,那這不就是雙向鏈表嗎(雙向鏈表),那棧頂就是鏈表的尾,棧底就是鏈表的頭(head)咯。
下面是我以單鏈表形式寫的棧。 (這是我寫的單鏈表文章)
class Node { constructor (element) { this.element = element; this.next = null; } } class LinkedStack { constructor () { this.top = null; // 棧頂指針 this.bottom = null; // 棧底指針 this.length = 0; } push (element) { let node = new Node(element); if (!this.top) { // 棧頂為空 this.top = this.bottom = node; // 棧頂為node } else { let front = this.top; this.top = front.next = node; // 前一個(gè)的next 和 棧頂 都指向 node } this.length++; console.log("壓棧成功啦!"); } pop () { let node = this.bottom, front; if (!node) { // 棧底為空? 那就是空棧咯。 console.log("null stack"); } else { while (node.next) { // 當(dāng)node.next為null,退出循環(huán) front = node; // 當(dāng)node.next不為null,那么front指向這個(gè)node node = front.next; // node 重新指向 front的下一個(gè) } this.top = front; //node的next為null時(shí),說(shuō)明node為棧頂了,那么棧頂要指向前一個(gè)front front.next = null; // front.next就為null了,不能指向node了,因?yàn)閚ode出???。 } this.length--; console.log("出棧成功!"); } print () { let arr = [this.bottom]; let node = this.bottom; while (node.next) { node = node.next; arr.push(node); } arr.map( (x, index) => { console.log(`第${index + 1}個(gè)節(jié)點(diǎn)是:`); console.log(x); }); } }
這是單鏈表形式的棧的源碼地址 。
維基百科
隊(duì)列,又稱為佇列(queue),是先進(jìn)先出(FIFO, First-In-First-Out)的線性表。在具體應(yīng)用中通常用鏈表或者數(shù)組來(lái)實(shí)現(xiàn)。隊(duì)列只允許在后端(稱為rear)進(jìn)行插入操作,在前端(稱為front)進(jìn)行刪除操作。
有上面可知:
隊(duì)列也有鏈表式和數(shù)組形式。
隊(duì)列的特點(diǎn)是,從隊(duì)尾入隊(duì),在隊(duì)頭出隊(duì),即先進(jìn)先出。
數(shù)組形式就要數(shù)組(Array)的api就行了。鏈表式可以看看前幾遍文章。這里就附上隊(duì)列的源碼
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90220.html
摘要:棧隊(duì)列雙端隊(duì)列都是非常經(jīng)典的數(shù)據(jù)結(jié)構(gòu)。結(jié)合了棧和隊(duì)列的特點(diǎn)。因此,在中,有棧的使用需求時(shí),使用代替。迭代器之前源碼源碼之與字段中分析過(guò),容器的實(shí)現(xiàn)中,所有修改過(guò)容器結(jié)構(gòu)的操作都需要修改字段。 棧、隊(duì)列、雙端隊(duì)列都是非常經(jīng)典的數(shù)據(jù)結(jié)構(gòu)。和鏈表、數(shù)組不同,這三種數(shù)據(jù)結(jié)構(gòu)的抽象層次更高。它只描述了數(shù)據(jù)結(jié)構(gòu)有哪些行為,而并不關(guān)心數(shù)據(jù)結(jié)構(gòu)內(nèi)部用何種思路、方式去組織。本篇博文重點(diǎn)關(guān)注這三種數(shù)據(jù)結(jié)構(gòu)...
摘要:于是翻出了機(jī)房里的這本學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法開(kāi)始學(xué)習(xí)程序員的基礎(chǔ)知識(shí)。這本書(shū)用了我最熟悉的來(lái)實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)和算法,而且書(shū)很薄,可以說(shuō)是一本不錯(cuò)的入門教程。隊(duì)列在頭部刪除元素,尾部添加元素。 本系列所有文章:第一篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊(duì)列第二篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之鏈表第三篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之集合第四篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之字典和散列表第五篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算...
摘要:所謂數(shù)組英語(yǔ),是有序的元素序列。組成數(shù)組的各個(gè)變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時(shí)也稱為下標(biāo)變量。在棧中添加數(shù)據(jù)和刪除數(shù)據(jù)也被稱為推入和彈出,而且推入和彈出只會(huì)發(fā)生在棧的頂部。棧是一種數(shù)據(jù)結(jié)構(gòu),而隊(duì)列則是一種的數(shù)據(jù)結(jié)構(gòu),即先進(jìn)先出。 所謂數(shù)組(英語(yǔ):Array),是有序的元素序列。 若將有限個(gè)類型相同的變量的集合命名,那么這個(gè)名稱為數(shù)組名。 組成數(shù)組的各個(gè)變量稱為數(shù)組的分量,也稱...
摘要:棧和隊(duì)列棧和隊(duì)列和之前講到的實(shí)戰(zhàn)數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)之雙鏈表一樣都是線性結(jié)構(gòu)。來(lái)看基于數(shù)組的棧實(shí)現(xiàn)得益于強(qiáng)大的結(jié)構(gòu),我們輕而易舉的寫出來(lái)了棧的基本操作方法。專題系列基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)專題系列目錄地址主要使用語(yǔ)法總結(jié)基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)和算法。 棧和隊(duì)列 棧和隊(duì)列和之前講到的實(shí)戰(zhàn)PHP數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)之雙鏈表 一樣都是線性結(jié)構(gòu)。 棧有什么特點(diǎn) 棧遵循后進(jìn)先出的原則(LIFO)。這意味著棧只有一個(gè)出口用來(lái)壓入元素...
摘要:首發(fā)于我的博客線程池進(jìn)程池網(wǎng)絡(luò)編程之同步異步阻塞非阻塞后端掘金本文為作者原創(chuàng),轉(zhuǎn)載請(qǐng)先與作者聯(lián)系。在了解的數(shù)據(jù)結(jié)構(gòu)時(shí),容器可迭代對(duì)象迭代器使用進(jìn)行并發(fā)編程篇二掘金我們今天繼續(xù)深入學(xué)習(xí)。 Python 算法實(shí)戰(zhàn)系列之棧 - 后端 - 掘金原文出處: 安生??? 棧(stack)又稱之為堆棧是一個(gè)特殊的有序表,其插入和刪除操作都在棧頂進(jìn)行操作,并且按照先進(jìn)后出,后進(jìn)先出的規(guī)則進(jìn)行運(yùn)作。 如...
閱讀 2972·2021-11-22 15:25
閱讀 2257·2021-11-18 10:07
閱讀 1062·2019-08-29 15:29
閱讀 486·2019-08-29 13:25
閱讀 1522·2019-08-29 12:58
閱讀 3213·2019-08-29 12:55
閱讀 2926·2019-08-29 12:28
閱讀 519·2019-08-29 12:16