棧:如何實現瀏覽器的前進和後退功能?

1、什麼是棧?

  1. 後進先出先進後出,這就是典型的「棧」結構。
  2. 從棧的操做特性來看,是一種「操做受限」的線性表,只容許在一端進行操做,好比插入和刪除數據。

2、爲何須要棧?

  1. 棧是一種操做受限的數據結構,其操做特性用數組鏈表都可實現。
  2. 可是,任何數據結構都是對特定應用場景的抽象,數組和鏈表雖然使用起來更加靈活,但卻暴露了幾乎全部的操做,不免會引起錯誤操做的風險
  3. 因此,當某個數據集合只涉及在某一端插入和刪除數據,且知足後進者先出,先進者後出的操做特性時,咱們應該首選棧這種數據結構。

3、如何實現棧?

1. 棧既能夠用數組來實現,也能夠用鏈表來實現。用數組實現的棧,咱們叫做順序棧,用鏈表實現的棧,咱們叫做鏈式棧。

2.數組實現(自動擴容)

  • 時間複雜度分析:根據均攤複雜度的定義,能夠得數組實現(自動擴容)符合大多數狀況是O(1)級別複雜度,個別狀況是O(n)級別複雜度,好比自動擴容時,會進行完整數據的拷貝。
  • 空間複雜度分析:在入棧和出棧的過程當中,只須要一兩個臨時變量存儲空間,因此O(1)級別。咱們說空間複雜度的時候,是指除了本來的數據存儲空間外,算法運行還須要額外的存儲空間。
  • 攤還複雜度分析:在涉及擴容的那次入棧操做(即第N+1次入棧),須要將N個數據進行遷移,可是N+1次操做觸發一次數據遷移,將N個數據遷移平攤到N+1次操做,複雜度爲O(1)

3.鏈表實現

  • 時間複雜度分析:壓棧和彈棧的時間複雜度均爲O(1)級別,由於只需更改單個節點的索引便可。
  • 空間複雜度分析:在入棧和出棧的過程當中,只須要一兩個臨時變量存儲空間,因此O(1)級別。咱們說空間複雜度的時候,是指除了本來的數據存儲空間外,算法運行還須要額外的存儲空間

四. 解答開篇

  經過兩個棧實現瀏覽器獲得前進後退功能。算法

  一個棧X,一個棧Y。數組

  每次跳轉到新頁面時將此頁面壓入X,並清空Y;當點擊後退按鈕式時,將X出棧,並壓入到Y;當點擊前進按鈕時,將Y出棧,壓入X。瀏覽器

  X爲空時表示沒有頁面能夠後退瀏覽了,當Y爲空時表示沒有頁面能夠前進瀏覽了。數據結構

相關文章
相關標籤/搜索