成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[個(gè)人心得]數(shù)據(jù)結(jié)構(gòu)之棧,隊(duì)列。

curried / 1583人閱讀

摘要:另外棧也可以用一維數(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

相關(guān)文章

  • 源碼|jdk源碼之棧、隊(duì)列及ArrayDeque分析

    摘要:棧隊(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)...

    ZHAO_ 評(píng)論0 收藏0
  • 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之棧隊(duì)列

    摘要:于是翻出了機(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)與算...

    pingan8787 評(píng)論0 收藏0
  • Javascript數(shù)組系列一之棧隊(duì)列

    摘要:所謂數(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ù)組的分量,也稱...

    sunsmell 評(píng)論0 收藏0
  • 實(shí)戰(zhàn)PHP數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)之棧

    摘要:棧和隊(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)壓入元素...

    banana_pi 評(píng)論0 收藏0
  • Python - 收藏集 - 掘金

    摘要:首發(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)作。 如...

    546669204 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<