成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

curried / 1614人閱讀

摘要:另外棧也可以用一維數(shù)組或連結(jié)串列的形式來完成。壓棧就是,出棧就是。出棧成功第個節(jié)點(diǎn)是這是單鏈表形式的棧的源碼地址。隊(duì)列只允許在后端稱為進(jìn)行插入操作,在前端稱為進(jìn)行刪除操作。

維基百科

堆棧(英語:stack)又稱為棧,是計(jì)算機(jī)科學(xué)中一種特殊的串列形式的抽象資料型別,其特殊之處在于只能允許在鏈接串列或陣列的一端(稱為堆疊頂端指標(biāo),英語:top)進(jìn)行加入數(shù)據(jù)(英語:push)和輸出數(shù)據(jù)(英語:pop)的運(yùn)算。另外棧也可以用一維數(shù)組連結(jié)串列的形式來完成。

特點(diǎn):先入后出,后入先出。 除頭尾節(jié)點(diǎn)之外,每個元素有一個前驅(qū),一個后繼。

從上面可知,有兩種形式,數(shù)組形式和鏈表的形式。

如果是數(shù)組(Array)的形式,那就很簡單啦。壓棧就是push,出棧就是pop。

鏈表形式的,每個元素都有一個指向前的指針和一個指向后的指針......等等,那這不就是雙向鏈表嗎(雙向鏈表),那棧頂就是鏈表的尾,棧底就是鏈表的頭(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;   // 前一個的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指向這個node
        node = front.next;            // node 重新指向 front的下一個
      }
      this.top = front;               //node的next為null時,說明node為棧頂了,那么棧頂要指向前一個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}個節(jié)點(diǎn)是:`);
      console.log(x);
    });
  }
}

這是單鏈表形式的棧的源碼地址 。

維基百科

隊(duì)列,又稱為佇列(queue),是先進(jìn)先出(FIFO, First-In-First-Out)的線性表。在具體應(yīng)用中通常用鏈表或者數(shù)組來實(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/90220.html

相關(guān)文章

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

    摘要:棧隊(duì)列雙端隊(duì)列都是非常經(jīng)典的數(shù)據(jù)結(jié)構(gòu)。結(jié)合了棧和隊(duì)列的特點(diǎn)。因此,在中,有棧的使用需求時,使用代替。迭代器之前源碼源碼之與字段中分析過,容器的實(shí)現(xiàn)中,所有修改過容器結(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_ 評論0 收藏0
  • 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之棧隊(duì)列

    摘要:于是翻出了機(jī)房里的這本學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法開始學(xué)習(xí)程序員的基礎(chǔ)知識。這本書用了我最熟悉的來實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)和算法,而且書很薄,可以說是一本不錯的入門教程。隊(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 評論0 收藏0
  • Javascript數(shù)組系列一之棧隊(duì)列

    摘要:所謂數(shù)組英語,是有序的元素序列。組成數(shù)組的各個變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時也稱為下標(biāo)變量。在棧中添加數(shù)據(jù)和刪除數(shù)據(jù)也被稱為推入和彈出,而且推入和彈出只會發(fā)生在棧的頂部。棧是一種數(shù)據(jù)結(jié)構(gòu),而隊(duì)列則是一種的數(shù)據(jù)結(jié)構(gòu),即先進(jìn)先出。 所謂數(shù)組(英語:Array),是有序的元素序列。 若將有限個類型相同的變量的集合命名,那么這個名稱為數(shù)組名。 組成數(shù)組的各個變量稱為數(shù)組的分量,也稱...

    sunsmell 評論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)。來看基于數(shù)組的棧實(shí)現(xiàn)得益于強(qiáng)大的結(jié)構(gòu),我們輕而易舉的寫出來了棧的基本操作方法。專題系列基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)專題系列目錄地址主要使用語法總結(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)。這意味著棧只有一個出口用來壓入元素...

    banana_pi 評論0 收藏0
  • Python - 收藏集 - 掘金

    摘要:首發(fā)于我的博客線程池進(jìn)程池網(wǎng)絡(luò)編程之同步異步阻塞非阻塞后端掘金本文為作者原創(chuàng),轉(zhuǎn)載請先與作者聯(lián)系。在了解的數(shù)據(jù)結(jié)構(gòu)時,容器可迭代對象迭代器使用進(jìn)行并發(fā)編程篇二掘金我們今天繼續(xù)深入學(xué)習(xí)。 Python 算法實(shí)戰(zhàn)系列之棧 - 后端 - 掘金原文出處: 安生??? 棧(stack)又稱之為堆棧是一個特殊的有序表,其插入和刪除操作都在棧頂進(jìn)行操作,并且按照先進(jìn)后出,后進(jìn)先出的規(guī)則進(jìn)行運(yùn)作。 如...

    546669204 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<