野生前端的數據結構基礎練習(3)——鏈表

来源:https://www.cnblogs.com/dashnowords/archive/2018/10/06/9747051.html
-Advertisement-
Play Games

網上的相關教程非常多,基礎知識自行搜索即可。 習題主要選自Orelly出版的《數據結構與演算法javascript描述》一書。 參考代碼可見: "https://github.com/dashnowords/blogs/tree/master/Structure/List" 鏈表的基本知識 特點: 鏈 ...


網上的相關教程非常多,基礎知識自行搜索即可。

習題主要選自Orelly出版的《數據結構與演算法javascript描述》一書。

參考代碼可見:https://github.com/dashnowords/blogs/tree/master/Structure/List

鏈表的基本知識

  • 特點:

    鏈表由節點組成,每個節點增加一個對象的引用指向它的後繼節點。鏈表也就是將一個線性表轉換為一個存儲空間上不連續,而在抽象層面可連續訪問的表。

  • 用途:

    更快的插入和刪除,因為只需要操作插入刪除位置相鄰元素即可,如果線上性表中,操作中間位置的元素後,後續的元素位置都需要調整。javascript中的應用例如原型鏈。

  • 基本屬性

    • element當前節點的值
    • next下一個節點
  • 基本方法

    • insert(item, newitem)在item後面插入一個新元素newitem

      插入一個元素,需要將item元素節點的next指向新元素,新元素的next指向item元素的後繼元素。

    • remove(pos)從隊頭刪除一個元素

      刪除一個節點時,需要將其前驅節點的next指向其後繼節點即可。

    • find(element)查詢值為element的節點位置

    • findpre(element)查詢值為element的節點的前一個節點

    • display()顯示整個鏈表

基本練習

  1. 根據鏈表的基本特性實現一個LinkedList類,併在後續題目中需要用鏈表時使用它。

    【註意點】:刪除指定元素時,由於需要修改指定元素前一個節點的next指針,所以當所查找的節點存在時,搜索方法應當返回其前一個節點以供後續步驟使用。

  2. 實現一個雙向鏈表TwoWayLinkedList類。

    【註意點】:每一個實例會記錄前驅節點和後繼節點,雙向鏈表比單鏈表增加了反向遍歷的能力,並且由於所查找節點的屬性中包含了前驅和後繼節點的信息,故插入節點和刪除節點時使用同一個搜索方法即可。

  3. LinkedList類為參考基準,實現一個迴圈鏈表CircularLinkedList類。

    【註意點】:迴圈鏈表的特點是尾節點的next指針指向了頭節點。

課後習題(書中第六節習題)

  1. 實現Advance(n)方法,使節點向前移動n個節點。
  2. 實現back(n)方法,使節點向後移動n個節點。
  3. 實現show()方法,只顯示當前節點上的數據。
  4. (略)
  5. (略)
  6. 傳說在公元1世紀猶太戰爭中,猶太歷史學家弗拉維奧·約瑟夫斯和他的40個同胞被羅馬士兵包圍,猶太士兵決定寧可自殺也不做俘虜,於是商量出一個自殺方案。他們圍成一個圈,從一個人開始,數到第三個人事將第三個人殺死,然後再數,直到殺光所有人,約瑟夫和另一個人決定不參加這個瘋狂的游戲,他們快速地計算出兩個位置,站在那裡得以幸存。寫一段將n個人圍成一圈,並且第m個人會被殺掉,計算一圈中哪兩個人最後會存貨,使用迴圈鏈表解決該問題。

習題思路

  1. 向前移動n個位置,在位置驗證合法時相當於,從原位置刪除一個節點,在新位置插入一個節點,為操作方便直接使用雙向鏈表來實現即可。【註意點】:示例代碼中直接以放入鏈表的值為依據進行節點查找,故不支持重覆數據,可為節點增加index屬性來區分相同數據。

  1. 與上一題原理一致

  2. 簡單,不做贅述。

  3. 使用一個單鏈表來存儲輸入的成績即可,當最後一個成績節點的指針指向null即可。

  4. 用值為1-40的元素迴圈鏈表來刪除節點直到總節點數目只剩2個為止。為了方便統計剩餘元素的數量,為鏈表增加一個count屬性來記錄元素個數。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文主要介紹Flutter佈局中的Padding、Align以及Center控制項,詳細介紹了其佈局行為以及使用場景,並對源碼進行了分析。 ...
  • 在函數內部,有兩個特殊的對象:arguments和this。 1、arguments arguments是一個類數組對象。包含著傳入函數中的所有參數。但這個對象還有一個名叫callee的屬性,該屬性是一個指針,指向擁有這個arguments對象的函數。 經典案例:階乘函數 定義階乘函數一般都要用到遞 ...
  • 6-2 css樣式的優點 為什麼使用css樣式來設置網頁的外觀樣式呢?右邊編輯器是一段文字,我們想把“超酷的互聯網”、“服務及時貼心”、“有趣易學”這三個短語的文本顏色設置為紅色,這時就 可以通過設置樣式來設置,而且只需要編寫一條css樣式語句。 第一步:把這三個短語用<span></span>括起 ...
  • 最近阿裡正式開源的BizCharts圖表庫基於React技術棧,各個圖表項皆採用了組件的形式,貼近React的使用特點。同時BizCharts基於G2進行封裝,Bizcharts也繼承了G2相關特性。公司目前統一使用的是ECharts圖表庫,下文將對3種圖表庫進行分析比對。 BizCharts 文檔 ...
  • 前言 JS基於原型的‘類’,一直被轉行前端的碼僚們大呼驚奇,但接近傳統模式使用class關鍵字定義的出現,卻使得一些前端同行深感遺憾而紛紛留言:“還我獨特的JS”、“凈搞些沒實質的東西”、“自己沒有類還非要往別家的類上靠”,甚至是“已轉行”等等。有情緒很正常,畢竟新知識意味著更多時間與精力的開銷,又 ...
  • ```const open$ = new Subject(); const ws = webSocket({ url: 'wss://echo.websocket.org', openObserver: open$ }); // 訂閱打開事件 open$.subscribe(() => {});``... ...
  • web基礎筆記 1.首行縮進:text-indent 單位有兩種:em 字元 、 px 像素 2.字母間距或文字間距:letter-spacing 單詞間距:word-spacing 3.margin 兩個問題: (1) 當大盒子里放小盒子,給小盒子加margin-top時,小盒子會帶著大盒子一起向 ...
  • 1 引言 作者給出了從 12 個角度全面分析 JS 庫的可用性,分別是: 特性。 穩定性。 性能。 包生態。 社區。 學習曲線。 文檔。 工具。 發展歷史。 團隊。 相容性。 趨勢。 下麵總結一下作者的觀點。 2 概述 & 精讀 特性 當你調研一個 JS 庫,功能當然是最重要的,就好比 Re ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...