国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一文讓你快速了解JavaScript棧

3403771864 / 401人閱讀

  這篇文章為大家介紹(Stack)。

  什么是棧?

  棧全稱為堆棧,簡單來說就一種數(shù)據(jù),特點(diǎn)是先進(jìn)后出。在棧中只有兩種基本操作,插入-入棧刪除-出站,記住棧只有一端可以進(jìn)行入棧和出棧操作,我們將其稱為棧頂,另一端稱其為棧底;如下圖展示了棧這個(gè)數(shù)據(jù)結(jié)構(gòu):

1.png

  JavaScript中的棧

  其實(shí)JavaScript的棧并沒有數(shù)據(jù)類型,需要數(shù)組進(jìn)行模擬,其中要知道的就是提供的push()和pop()選項(xiàng),這樣也正好符合棧的特點(diǎn),

  示例代碼如下:

  const stack = []
  // 入棧
  stack.push(1)
  stack.push(2)
  // 出棧
  const v1 = stack.pop() // 2
  const v2 = stack.pop() // 1

  棧的應(yīng)用場景

  其實(shí)棧是算法和程序中最常用的輔助結(jié)構(gòu),先進(jìn)后出場景中我們都可以見到棧的身影,比如:

  函數(shù)調(diào)用堆棧

  判斷字符串括號(hào)是否有效

  接下來我們依次來看:

  函數(shù)調(diào)用堆棧

  JavaScript中的函數(shù)調(diào)用堆棧就是一個(gè)應(yīng)用棧的一個(gè)典型例子,比如下面這段代碼:

  function f1() {}
  function f2() {
  f1()
  }
  function f3() {
  f2()
  }
  f3()

  如下圖:

2.png

  執(zhí)行過程如下:

  調(diào)用函數(shù)f3(),將f3壓入堆棧;

  在f3()中調(diào)用了f2(),將f2壓入堆棧;

  在f2()中又調(diào)用了f1(),將f1壓入堆棧;

  只有f1()運(yùn)行完成才能繼續(xù)往下執(zhí)行,所以f1()先出棧,以此類推。

  有效的括號(hào)

  有效的括號(hào)是力扣中的一個(gè)關(guān)于棧的算法題目,題目大意就是判斷給定字符串中的括號(hào)是否匹配,匹配返回true,否則返回false。

  解題思路如下:

  判斷字符串主要是判斷長度是否偶數(shù),當(dāng)時(shí)奇數(shù)時(shí)直接返回false,實(shí)現(xiàn)這主要是括號(hào)都是成對(duì)出現(xiàn)的;

  新建一個(gè)棧;

  遍歷字符串,遍歷到每一項(xiàng)時(shí)如果時(shí)左括號(hào),將其壓入棧;如果是右括號(hào),與棧頂對(duì)比,如果相匹配則出棧,不匹配則返回false。

  實(shí)現(xiàn)代碼如下:

  /**
  * @param {string} s
  * @return {boolean}
  */
  var isValid = function(s) {
  if (s.length % 2 !== 0) return false
  const stack = []
  for(let i = 0; i<s.length; i++) {
  const c = s[i] // 記錄當(dāng)前項(xiàng)
  if (c === '(' || c === '[' || c==='{') {
  stack.push(c)
  } else {
  const t = stack[stack.length - 1] // 獲取棧頂元素
  if (
  (t === '(' && c === ')') ||
  (t === '[' && c === ']') ||
  (t === '{' && c === '}')
  ) {
  stack.pop()
  } else {
  return false
  }
  }
  }
  // 如果為0表示全部匹配,有剩余則表示不匹配
  return stack.length === 0
  };

  這里些的代碼雖然看起來簡單粗暴,但也非常實(shí)用。


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/127818.html

相關(guān)文章

  • 開始測試從了解產(chǎn)品技術(shù)開始

    摘要:包括了,新項(xiàng)目的人員架構(gòu)熟悉,產(chǎn)品的架構(gòu)學(xué)習(xí),技術(shù)棧的了解,開發(fā)流程的熟悉。今天給大家介紹幾個(gè)快速了解產(chǎn)品技術(shù)棧的工具。希望可以幫助大家在接觸新項(xiàng)目的時(shí)候,可以快速了解到產(chǎn)品使用的技術(shù)棧。 起因 測試人員在介入到新項(xiàng)目的時(shí)候,總會(huì)有個(gè)一迷(xue)茫(xi)時(shí)期,里面會(huì)面臨很多的挑(ji)戰(zhàn)(yu)。包括了,新項(xiàng)目的人員架構(gòu)熟悉,產(chǎn)品的架構(gòu)學(xué)習(xí),技術(shù)棧的了解,開發(fā)流程的熟悉。 如果想要...

    Coly 評(píng)論0 收藏0
  • 「碼個(gè)蛋」2017年200篇精選干貨集合

    摘要:讓你收獲滿滿碼個(gè)蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計(jì)篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個(gè)小時(shí)整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個(gè)蛋從2017年02月20...

    wangtdgoodluck 評(píng)論0 收藏0
  • Java相關(guān)

    摘要:本文是作者自己對(duì)中線程的狀態(tài)線程間協(xié)作相關(guān)使用的理解與總結(jié),不對(duì)之處,望指出,共勉。當(dāng)中的的數(shù)目而不是已占用的位置數(shù)大于集合番一文通版集合番一文通版垃圾回收機(jī)制講得很透徹,深入淺出。 一小時(shí)搞明白自定義注解 Annotation(注解)就是 Java 提供了一種元程序中的元素關(guān)聯(lián)任何信息和著任何元數(shù)據(jù)(metadata)的途徑和方法。Annotion(注解) 是一個(gè)接口,程序可以通過...

    wangtdgoodluck 評(píng)論0 收藏0
  • 一文讓你徹底理解 Java NIO 核心組件

    摘要:的出現(xiàn)解決了這尷尬的問題,非阻塞模式下,通過,我們的線程只為已就緒的通道工作,不用盲目的重試了。注意要將注冊(cè)到,首先需要將設(shè)置為非阻塞模式,否則會(huì)拋異常。 同步、異步、阻塞、非阻塞首先,這幾個(gè)概念非常容易搞混淆,但NIO中又有涉及,所以總結(jié)一下[1]。 同步:API調(diào)用返回時(shí)調(diào)用者就知道操作的結(jié)果如何了(實(shí)際讀取/寫入了多少字節(jié))。 異步:相對(duì)于同步,API調(diào)用返回時(shí)調(diào)用者不知道操作...

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

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

0條評(píng)論

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