08-棧:如何實現瀏覽器的前進和後退功能?
如何理解棧?
後進者先出,先進者後出,這就是典型的“棧”結構。棧是一種操作受限的線性表。
當某個資料集合只涉及在一端插入和刪除資料,並且滿足後進先出、先進後出的特性時,我們就應該首選“棧”這種資料結構。
棧可以用陣列或連結串列來實現,分別叫作順序棧和鏈式棧。入棧出棧時間複雜度都是 O(1)。
棧在函式呼叫中的應用
函式呼叫棧
表示式求值(通過兩個棧來實現)
括號匹配
瀏覽器的前進和後退功能(通過兩個棧來實現)
......
課後思考
- 為什麼函式呼叫要用“棧”來儲存臨時變數?用其他資料結構不好嗎?
因為函式呼叫符合後進先出的特性,用棧比較方便。
- JVM 記憶體管理中有“堆疊”的概念。棧記憶體用來儲存區域性變數和方法呼叫,堆記憶體用來儲存 Java 中的物件。JVM 裡面的“棧”和我們這裡說的“棧”是不是一回事呢?如果不是為什麼又叫作“棧”呢?
不是一回事。資料結構裡的堆和棧是資料儲存方式的兩種資料結構;記憶體中的堆疊,一般指的是資料操作的儲存位置。記憶體空間在邏輯上分為三部分:程式碼區、靜態資料區和動態資料區,動態資料區又分為棧區和堆區。
相關文章
- history pushState 實現瀏覽器前進與後退瀏覽器
- js實現的點選前進和後退功能JS
- ASP.Net頁面瀏覽器“後退”功能的實現ASP.NET瀏覽器
- 瀏覽器“後退”、“前進”或可以這麼去監聽瀏覽器
- vue中前進重新整理、後退快取使用者瀏覽資料和瀏覽位置的實踐Vue快取
- [html]history禁用瀏覽器的後退功能(包括其他操作後退的按鈕,操作等)HTML瀏覽器
- 監聽瀏覽器的後退事件瀏覽器事件
- JS禁止瀏覽器後退鍵JS瀏覽器
- Ios、Android微信瀏覽器後退跳轉實現,及遇到的bugiOSAndroid瀏覽器
- 監控頁面後退前進,瀏覽器文件載入事件之pageshow、pagehide瀏覽器事件IDE
- C#使用雙連結串列來實現模擬IE前進後退功能C#
- 瀏覽器歷史,判斷是點選了後退按鈕還是前進按鈕瀏覽器
- js 禁用瀏覽器後退按鈕效果JS瀏覽器
- 禁止頁面後退JS(相容各瀏覽器)JS瀏覽器
- vue實現前進重新整理,後退不重新整理Vue
- js如何判斷當前瀏覽器是否是谷歌瀏覽器JS瀏覽器谷歌
- vue路由前進後退動畫Vue路由動畫
- 瀏覽器後退操作時,表單狀態的還原瀏覽器
- 瀏覽器是如何渲染網頁的《學如逆水行舟,不進則退》瀏覽器網頁
- 前端實現很哇塞的瀏覽器端掃碼功能?前端瀏覽器
- win10系統瀏覽器閃退怎麼辦 win10瀏覽器閃退的方法Win10瀏覽器
- 如何實現一個圖片瀏覽器瀏覽器
- vue單頁實現前進重新整理後退不重新整理Vue
- 實戰react技術棧+express前後端部落格專案(5)-- 前後端實現登入功能ReactExpress後端
- 點選瀏覽器後退按鈕時彈出提示資訊瀏覽器
- 判斷當前瀏覽器是不是微信瀏覽器瀏覽器
- JS模擬瀏覽器全域性搜尋功能實現JS瀏覽器
- 【譯】瀏覽器如何工作:在現代web瀏覽器場景的之下瀏覽器Web
- javascript判斷當前瀏覽器是不是微信瀏覽器JavaScript瀏覽器
- 瀏覽器定位是如何實現的?為什麼會有瀏覽器定位失敗的情況?瀏覽器
- 實現UC瀏覽器文章功能 springmvc+mybatis整合cms瀏覽器SpringMVCMyBatis
- 網頁點選後退再前進出現亂碼原因網頁
- js實現的判斷當前瀏覽器是否flash程式碼例項JS瀏覽器
- 再談vue前進重新整理,後退不重新整理,include實現方法。Vue
- 如何利用 Chrome 瀏覽器實現滾動截圖Chrome瀏覽器
- 谷歌瀏覽器開啟實驗性功能谷歌瀏覽器
- vue-route-transition路由前進後退動畫Vue路由動畫
- 瀏覽器的全屏功能小結瀏覽器