javascript實現List列表數據結構

書籍推薦

有幸拜讀《數據結構與算法Javascript描述》這本書,先強烈安利一波!非常感謝作者大大給我們前端領域帶來這本書。

全書從javascript的角度出發,簡單明了的分析了數據結構在javascript領域的實現過程與實際的應用案例,且在每一章的結尾,都給大家留了一些書中案例相關的小作業,讓大家可以實操消化,是一本實實在在可以帶領大家入門數據結構與算法的神書,再次強烈推薦!!!

那么,如何使用javascript實現一個列表呢?作為一名前端開發人員,大家的第一反應肯定都是利用數組,但我們可以利用數組做些什么呢?這時候就需要大家對List這種數據結構有一定的了解了。

嘗試理解List

  1. 我們可以把List看成一個對象(比如一列火車)
  2. 這個對象有自己的屬性和方法(火車有車廂長度,每節車廂的位置,可以前進,可以后退,車廂排列一定是有序的,車廂是一節一節連接,可以給火車在后面添加一節車廂…)
  3. 我們如何去獲取或修改對象內部的一些零件或者獲取對象的一些信息?(通過屬性和方法)

代碼實現

function List () {// 列表數據this.data = []// 列表的元素個數this.listSize = 0// 列表的當前位置this.pos = 0// 返回列表元素的個數this.length = function() {return this.listSize}// 清空列表中的所有元素this.clear = function() {this.data.length = 0this.listSize = this.pos = 0}// 返回列表的字符串形式this.toString = function() {return this.data}// 返回當前位置的元素this.getElement = function() {return this.data[this.pos]}/*** 在現有元素后插入新元素* @param elem 需要插入的元素* @param after 將elem插入到after元素的后面*/this.insert = function(elem, after) {const insertIndex = this.findIndex(after)if (insertIndex === -1) {console.error(`未查找需要插入的元素位置`)return false}this.data.splice(insertIndex + 1, 0, elem)++this.listSizereturn true}// 在列表的末尾添加新元素this.append = function(elem) {this.data[this.listSize++] = elem}// 從列表中刪除元素this.remove = function(elem) {const index = this.findIndex(elem)if (index === -1) {console.error(`未查找到需要刪除的元素,目前列表包含的具體元素為:${this.toString()}`)return false}this.data.splice(index, 1)--this.listSizereturn true}// 將列表的當前位置移動到第一個元素this.front = function() {this.pos = 0}// 將列表的當前位置移動到最后一個元素this.end = function() {this.pos = this.listSize - 1}// 將當前位置后移一位this.prev = function() {if (this.pos > 0) {--this.posreturn true}console.error('列表已經不能后移了')return false}// 將當前位置前移一位this.next = function() {if (this.pos < this.listSize - 1) {++this.posreturn true}console.error('列表已經不能前移了')return false}// 返回列表的當前位置this.currPos = function() {return this.pos}// 將當前位置移動到指定位置this.moveTo = function(position) {this.pos = position}// 查找元素在列表中的位置索引this.findIndex = function(elem) {for (let i = 0; i < this.listSize; i ++) {if (this.data[i] === elem) return i}return -1}// 判斷元素是否在列表中this.contains = function (elem) {const index = this.findIndex(elem)if (index > -1) {return true}return false}
}

測試一下

const names = new List();
names.append("Clayton");
names.append("Raymond");
names.append("Cynthia");
names.append("Jennifer");
names.append("Bryan");
names.append("Danny");
names.front();
console.log(names.getElement());
names.next();
console.log(names.getElement());
names.next();
names.next();
names.prev();
console.log(names.getElement());

結果
在這里插入圖片描述

以上就是本文的全部內容,希望大家能從文章中感受到數據結構的魅力,想要了解更多更詳細的實際應用常見,請一定要去看一下 《數據結構與算法Javascript描述》這本書!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210202.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210202.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210202.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

postgres 登錄及常用命令

登陸 輸入以下命令&#xff0c;嘗試登錄psql: psql -U postgres 報告以下錯誤&#xff1a; psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres" 換成下面…

Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

報錯&#xff1a; OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performan…

差異計算基礎知識 - 了解期末業務操作、WIP 和差異

原文地址&#xff1a;Basics of variance calculation-Understanding Period End activities, WIP and Variances | SAP Blogs 大家好&#xff0c; 這是我在成本核算方面的第六份文件&#xff0c;旨在解釋期末的差異計算和相關活動。 我將引導您完成期末活動和差異計算。在本文…

MySQL char 尾隨空格丟失與右側空格填充

今天看《高性能MySQL(第四版)》,講char,varchar時說“當存儲CHAR值時&#xff0c;MySQL刪除所有尾隨空格。如果需要進行比較&#xff0c;值會用空格填充。”感覺這兩句話有沖突啊&#xff0c;便研究了下。 對于具體的問題&#xff0c;當然官方文檔是最好的&#xff0c;The CHAR…

【性能測試】Jmeter 配置元件(一):計數器

Jmeter 配置元件&#xff08;一&#xff09;&#xff1a;計數器 在 Jmeter 中&#xff0c;通過函數 ${__counter(,)} 可以實現每次加 1 1 1 的計數效果。但如果步長不為 1 1 1&#xff0c;則要利用到我們的計數器。 函數作用${__counter(,)}計數器&#xff0c;每次加 1${__d…

vue父子組件傳值

父組件向子組件傳值 1.在父組件中調用子組件時&#xff0c;定義要傳遞的參數 //使用子組件&#xff0c;并傳遞value作為prop<childComponent :childValue"parentValue"></childComponent>// 父組件的data中定義傳遞的參數data() {return {parentValue: &…

論文導讀|10月MSOM文章精選:智慧醫療

編者按 在“10月MSOM文章精選&#xff1a;智慧醫療”中&#xff0c;我們有主題、有針對性地選擇了MSOM期刊雜志中一些有關智慧醫療領域的有趣文章&#xff0c;不但對文章的內容進行了概括與點評&#xff0c;而且也對文章的結構進行了梳理&#xff0c;旨在激發廣大讀者的閱讀興趣…

c++--面向對象特性

1.面向對象指的是繼承&#xff0c;封裝&#xff0c;多態。 繼承主要關注類的構造&#xff0c;賦值&#xff0c;析構。 以下對多態&#xff0c;封裝進行補充說明。 2、多態 2.1.定義 a.賦值 派生類的指針&#xff0c;可以賦值給基類的指針。 派送類的對象&#xff0c;可以賦值給…

教師需要什么技能?

作為一名老師&#xff0c;需要掌握許多技能&#xff0c;以便能夠成功地教育和指導學生。以下是一些關鍵技能&#xff1a; 1.教學技能&#xff1a;老師需要有深入的學科知識和教學經驗&#xff0c;以便能夠有效地傳授知識。教師應該了解如何設計和執行教學計劃&#xff0c;制定課…

【Java基礎篇 | 面向對象】—— 聊聊什么是接口(下篇)

個人主頁&#xff1a;兜里有顆棉花糖 歡迎 點贊&#x1f44d; 收藏? 留言? 加關注&#x1f493;本文由 兜里有顆棉花糖 原創 收錄于專欄【JavaSE_primary】 本專欄旨在分享學習JavaSE的一點學習心得&#xff0c;歡迎大家在評論區交流討論&#x1f48c; 上篇&#xff08;【Ja…

SpringBoot 自動裝配原理詳解

什么是 SpringBoot 自動裝配&#xff1f; 我們現在提到自動裝配的時候&#xff0c;一般會和 Spring Boot 聯系在一起。但是&#xff0c;實際上 Spring Framework 早就實現了這個功能。Spring Boot 只是在其基礎上&#xff0c;通過 SPI 的方式&#xff0c;做了進一步優化。 Spr…

解決npm install時報:gyp ERR! configure error

報錯內容&#xff1a; npm ERR! gyp ERR! cwd C:\Users\zccbbg\code\my\examvue\node_modules\node-sass npm ERR! gyp ERR! node -v v16.13.1 npm ERR! gyp ERR! node-gyp -v v3.8.0 npm ERR! gyp ERR! not ok npm ERR! Build failed with error code: 1 解決辦法&#xff1a;…

自行編寫一個簡單的shell!

本文旨在編寫一個簡單的shell外殼程序&#xff01;功能類似于shell的一些基本操作&#xff01;雖然不能全部實現shell的一些功能&#xff01;但是通過此文章&#xff0c;自己寫一個簡單的shell程序也是不成問題&#xff01;并且通過此文章&#xff0c;可以讓讀者對linux中一些環…

C#基礎面試題集

C#基礎 1. 簡述值類型和引用類型有什么區別2. C# String類型比 stringBuilder 類型的優勢是什么?3.面向對象的三大特點4.請簡述private&#xff0c;public&#xff0c;protected&#xff0c;internal的區別5.結構體和類6.請描述Interface與抽象類之間的不同7.在類的構造函數前…

藍橋杯:貨物擺放--因數存到數組里的技巧--減少運算量的方法

小藍有一個超大的倉庫&#xff0c;可以擺放很多貨物。 現在&#xff0c;小藍有 n 箱貨物要擺放在倉庫&#xff0c;每箱貨物都是規則的正方體。小藍規定了長、寬、高三個互相垂直的方向&#xff0c;每箱貨物的邊都必須嚴格平行于長、寬、高。 小藍希望所有的貨物最終擺成一個大…

go自帶rpc框架生產環境使用demo

基礎使用 序列化使用自帶gob協議 server package mainimport ("net""net/rpc" )// 定義一個handler結構體 type HelloService struct { }// 定義handler方法,大小寫&#xff0c;參數&#xff0c;返回值都是固定的&#xff0c;否則無法注冊 func (receiv…

數據庫事務:保障數據一致性的基石

目錄 1. 什么是數據庫事務&#xff1f; 1.1 ACID特性解析 2. 事務的實現與控制 2.1 事務的開始和結束 2.2 事務的隔離級別 3. 并發控制與事務管理 3.1 并發控制的挑戰 3.2 鎖和并發控制算法 4. 最佳實踐與性能優化 4.1 事務的劃分 4.2 批處理操作 5. 事務的未來發展…

Qt OpenCV 學習(文章鏈接匯總)

Qt OpenCV 學習&#xff08;一&#xff09;&#xff1a;環境搭建 Qt OpenCV 學習&#xff08;二&#xff09;&#xff1a;兩個簡單圖片識別案例 Qt OpenCV 學習&#xff08;三&#xff09;&#xff1a;跟蹤視頻中的運動物體 Qt OpenCV 學習&#xff08;四&#xff09;&#xff…

SpringSecurity6 | 自定義登錄頁面

?作者簡介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;熱愛Java后端開發者&#xff0c;一個想要與大家共同進步的男人&#x1f609;&#x1f609; &#x1f34e;個人主頁&#xff1a;Leo的博客 &#x1f49e;當前專欄&#xff1a; Java從入門到精通 ?特色專欄&#xf…

高工氫電年會 | 未勢能源解超朋博士受邀出席并做主題演講

12月4日&#xff0c;以“戰略重構 商業覺醒”為主題的2023高工氫電年會在深圳舉辦&#xff0c;未勢能源副總裁解超朋博士受邀出席開幕式論壇&#xff0c;以《把握機遇、直面挑戰&#xff0c;迎接氫車規模化推廣時代》為主題發表演講&#xff0c;并參與圓桌論壇研討。 氫勢已來&…