亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JS中的算法與數據結構之列表(List)實例詳解

2024-05-06 16:54:17
字體:
來源:轉載
供稿:網友

本文實例講述了JS中的算法與數據結構之列表(List)。分享給大家供大家參考,具體如下:

前言

前端很少有機會接觸到算法,大多都交互性的操作,所以不少前端工程師會抱著這么一種想法:我是做前端的,為什么要學數據結構與算法?沒有數據結構與算法,我一樣很好的完成工作。實際上,算法是一個寬泛的概念,我們平時寫的任何代碼都可以成為算法,它是對一個問題的解決方案的準確而完整的描述,是解決一系列問題的清晰指令,它代表著用系統的方法描述解決問題的策略機制。隨著現在互聯網的飛速發展,前端工程師已不是靠幾個選擇器操作加鏈接加事件就能應付的,越來越復雜的產品和基礎庫,需要堅實的數據結構與算法才能駕馭,所以我認為前端工程師也是應該要重視算法和數據結構,這對于自己的職業發展是有很大幫助的。當然,算法的學習也不是一朝一夕的事情,這是一個過程,得自己去摸索,去實踐,去總結,我這里只是將一些常見的算法和數據結構用 JavaScript 去實現,起到一個拋磚引玉的作用。


列表(List)

列表是計算機中一種常見的數據結構,日常生活中的購物清單,待辦事項等都可以成為列表,它是一組有序的數據,每個列表中的數據項稱為元素。在javascript中,列表中的元素可以是任意數據類型。列表中可以保存多少元素并沒有限定(在實際使用時會受到程序內存的限制)。列表中會有一些常見屬性或方法,比如列表中的元素個數,列表當前的位置,向列表末尾增加一個元素,從列表中刪除一個元素,清空列表等一系列操作。接下來,我們抽象出一個列表的數據類型定義,并用JS中的數組去實現它。

JS,算法,數據結構,列表 
列表的數據類型定義

列表類

/*定義List類*/ function List () {  this.listSize = 0;  //初始化元素個數為0  this.pos = 0;    //初始化位置為0  this.dataStore = []; //初始化空數組來保存列表元素  this.clear = clear;  this.find = find;  //尋找元素  this.toString = toString; //顯示列表中的元素  this.insert = insert;  this.append = append;  this.remove = remove;  this.front = front;  this.end = end;  this.prev = prev;  this.next = next;  this.length = length; //列表中的元素總數  this.currPos = currPos;  this.moveTo = moveTo;  this.getElement = getElement;  this.contains = contains; //判斷給定值是否在列表中}

接著我們來實現這些方法。

首先得可以添加元素,所以我們先來編寫 append 方法

append:向列表中添加一個元素

//該方法給列表的最后一個位置添加一個新的元素,待插入成功后,更新列表中的元素個數function append ( element ) {  this.dataStore[this.listSize++] = element;}

這樣我們就可以往列表里面添加元素了,接著我們來看查找 find 方法

find:查找列表中的某一個元素

//該方法通過循環查找給定元素是否在列表中,如果存在返回元素的位置,否則返回 -1function find(element){  for( var i = 0 ; i < this.dataStore.length ; i ++ ){      if( this.dataStore[i] == element ){        return i;      }    }  return -1;}

可以插入元素,那總得可以刪除了,我們利用 remove 方法刪除一個元素

remove:刪除列表中的某一元素

//該方法通過使用find()方法返回元素的位置對 dataStore 數組進行截取,如果刪除成功,返回 true , 并將 listSize 的值減1,更新列表長度,否則返回 falsefunction remove ( element ) {  var foundAt = this.find(element);  if( foundAt > -1 ){    this.dataStore.splice( foundAt , 1 );    --this.listSize;    return true;  }  return false;}

我想知道我的列表還有多少個元素的時候,就得構建 length 方法,

length:返回列表中總的元素個數

//該方法直接將 listSize 返回即可function length(){  return this.listSize;}

如果能顯示我的列表元素就好了,這個可以有,我們來看看 toString 方法,

toString:顯示列表的元素

//該方法直接返回了列表數組,顯示出當前列表內容function toString(){  return this.dataStore;}

現在我們的列表已經有了基本的一些功能,不妨下試試

//構造列表對象var fruits = new List();//添加三個元素fruits.append('Apple');fruits.append('Grape');fruits.append('Banana');//打印列表console.log( fruits.toString() )   // ["Apple", "Grape", "Banana"]//查看列表長度console.log( fruits.length() )    // 3//查找 Banana 的位置console.log( fruits.find('Banana') ) // 2//刪除 Grape fruits.remove('Grape');console.log( fruits.toString() )   // ["Apple", "Banana"]

如果我們刪除了 Grape 元素 , 我們還想將它放回到原來的位置 ,這時候我們就需要調用 insert 方法

insert:向列表某個位置添加一個元素

//該方法需要傳入兩個參數,第一個參數表示待插入的元素,第二個參數表示待插入元素的前一個元素,用于確定插入元素的位置,并調用 splice 方法更改列表數組,插入成功后更新 listSize 并返回 true , 否則返回 false;function insert( element , after ){  var insertPos = this.find( after );  if( insertPos > -1 ){    this.dataStore.splice( insertPos + 1 , 0 , element );    this.listSize ++;    return true;  }  return false;}

現在,我們把 Grape 放到原來的位置上去;

fruits.insert( 'Grape' , 'Apple' );console.log( fruits.toString() )    // ["Apple", "Grape", "Banana"]

ok,現在已經能夠把 Grape 插入到原來的位置了。

如果我吃完了所有水果,我現在想要清空列表,我們就需要一個 clear 方法;

clear:清空列表

//該方法使用 delete 操作符刪除 dataStore 數組 , 接著創建新的數組,并將其 listSize 和 pos 初始化設為 1 。function clear(){  delete this.dataStore;  this.dataStore = [];  this.listSize = this.pos = 0;}

我們不妨試一試。

fruits.clear();console.log( fruits.toString() );   // []

成功了!

上面我們看到了列表中有個 pos 屬性,表示當前列表所在的位置,我們接下來就圍繞它做點事情,讓用戶可以自由操作列表

front:將列表的位置移到第一個位置上

//該方法只要將 pos 置為 0 即可function front(){  this.pos = 0 ;}

end:將列表的位置移到最后一個位置上

//同上,該方法只要將 pos 置為列表長度減 1 即可,因為數組下標從 0 開始嘛function end(){  this.pos = this.listSize - 1;}

prev:將當前位置前移一位

//只要將 pos 的位置減 1 即可,但要主要不能越界function prev(){  if( this.pos > 0 ){    this.pos --;  }else{    console.log('您當前已在首位');  }}

next:將當前位置后移一位

//同理,只要將 pos 的位置加 1 即可,但要主要不能越界function next(){  if( this.pos < this.listSize - 1 ){    ++this.pos;  }else{    console.log('您當前已在末尾');  }}

moveTo:將當前位置移動到指定位置

//直接改變 pos 的值即可,注意輸入的合法性function moveTo( position ){  if( position < 0 || position > (this.listSize - 1) ){    console.log('請輸入正確的位置');  }else{    this.pos = position;  }}

我既然可以隨意改變我的列表位置,那我總得知道我當前位置在哪里啊,因此我們需要 currPos 和 getElement 兩個方法分別返回當前的位置和元素;

currPos:返回列表的當前位置

//只需將 pos 直接返回即可function currPos(){  return this.pos;}

getElement:返回當前位置的元素

//直接取對應的元素就好function getElement(){  return this.dataStore[this.pos];}

接著,我們測試一下,首先將列表恢復到清空前的樣子,然后我們在多添加幾個元素進去。

//再添加幾個fruits.append('Pear');fruits.append('Orange');fruits.append('Strawberry');console.log( fruits.toString() );  // ["Apple", "Grape", "Banana", "Pear", "Orange", "Strawberry"]//我們先看當前的位置和元素console.log( fruits.currPos() );   // 0console.log( fruits.getElement() ); // Apple//我們嘗試改變一下fruits.moveTo( 2 );fruits.next();console.log( fruits.currPos() );   // 3console.log( fruits.getElement() ); // Pearfruits.end();fruits.prev();console.log( fruits.currPos() );   // 4console.log( fruits.getElement() ); // Orange

至此,我們已經基本完成了列表的所有功能,還差最后一個,判斷給定元素是否在列表內,我們這里采用 contains 方法

contains:判斷給定值是否在列表中

//我們直接利用利用 indexOf() 或者采用跟為高級的 ES6 中的 includes 方法來判斷//ES5function contains( element ){  if( this.dataStore.indexOf( element ) > -1 ) return true;  else return false;}//ES6function contains( element ){  return this.dataStore.includes( element );}

 

寫完測試一下,

console.log(fruits.contains('Banana'));     // trueconsole.log(fruits.contains('Watermelon'));   // false

大功告成!我們自己用 javascript 實現了一個列表,至于后面如何拓展,自己可以發散思維,多動手實踐實踐,一起加油!

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线免费播放| 日韩av在线高清| 91人人爽人人爽人人精88v| 久久成人这里只有精品| 久久精品国产一区二区三区| 日韩美女视频免费在线观看| 国产在线视频欧美| 91九色国产社区在线观看| 亚洲福利在线观看| 岛国精品视频在线播放| 国产不卡一区二区在线播放| 欧美激情在线观看视频| 日韩少妇与小伙激情| 国产97在线播放| 久久国产精品免费视频| 日韩a**中文字幕| 国产亚洲精品美女久久久久| 色婷婷成人综合| 国产午夜精品全部视频在线播放| 亚洲国产福利在线| 中文字幕欧美精品日韩中文字幕| 久久精品亚洲热| 亚洲欧洲国产精品| 成人午夜小视频| 精品久久久国产精品999| 欧美国产日韩二区| 亚洲精品久久久久久下一站| 日韩的一区二区| 久久精品国产久精国产一老狼| 欧美一区二区三区精品电影| 日韩有码在线播放| 在线视频免费一区二区| 欧美日韩激情网| 亚洲成年人在线| 久久青草福利网站| 国产91露脸中文字幕在线| 日本三级韩国三级久久| 欧美日韩午夜激情| 久久精品国产欧美亚洲人人爽| 国产免费一区二区三区在线观看| 亚洲美女精品成人在线视频| 欧美国产日产韩国视频| 美日韩在线视频| 亚洲激情 国产| 81精品国产乱码久久久久久| 萌白酱国产一区二区| 亚洲美女自拍视频| 福利一区福利二区微拍刺激| 这里只有视频精品| 亚洲欧美日韩天堂| 91精品国产自产在线老师啪| 久久精品国产96久久久香蕉| 搡老女人一区二区三区视频tv| 亚洲天堂男人的天堂| 欧美性在线视频| 国产91对白在线播放| 日本中文字幕不卡免费| 久久色在线播放| 欧美日韩人人澡狠狠躁视频| 一本色道久久综合狠狠躁篇怎么玩| 国产精品久久久久久久久久久久| 社区色欧美激情 | 亚洲视频电影图片偷拍一区| 久久躁狠狠躁夜夜爽| 欧美日韩激情网| 精品久久久久久久久国产字幕| 欧美丰满少妇xxxx| 亚洲免费高清视频| 美乳少妇欧美精品| 国产欧美日韩中文字幕在线| 欧美一级淫片丝袜脚交| 欧美猛男性生活免费| 成人黄色中文字幕| 自拍视频国产精品| 美女撒尿一区二区三区| 成人黄色在线播放| 91亚洲精品一区二区| 午夜精品美女自拍福到在线| 精品电影在线观看| 亚洲成av人片在线观看香蕉| 欧美一级黑人aaaaaaa做受| 成人h视频在线| 国产视频精品久久久| 北条麻妃在线一区二区| 欧美最顶级的aⅴ艳星| 精品国产一区二区三区久久狼黑人| 成人免费高清完整版在线观看| xxxxx91麻豆| 国产91热爆ts人妖在线| 欧美黄色三级网站| 欧美精品18videos性欧美| 91精品久久久久久久久久| 日韩国产高清污视频在线观看| 欧美色xxxx| 亚洲人成欧美中文字幕| 亚洲免费一级电影| 欧美日在线观看| 精品国产乱码久久久久久婷婷| 精品动漫一区二区三区| 久久久国产视频| 亚洲一区第一页| 成人精品福利视频| 91精品在线观| 亚洲色图25p| 久热精品视频在线观看| 色yeye香蕉凹凸一区二区av| 成人在线国产精品| 高清欧美一区二区三区| 国产精品美女主播在线观看纯欲| 中文字幕亚洲精品| 亚洲欧美日韩精品久久亚洲区| 综合av色偷偷网| 国产精品视频大全| 成人有码在线视频| 久久久综合免费视频| 精品视频一区在线视频| 欧美一级高清免费播放| 色婷婷综合久久久久中文字幕1| 国产日本欧美一区| 亚洲大胆美女视频| 欧美性黄网官网| 国产精品日韩专区| 色偷偷偷综合中文字幕;dd| 国产成人综合精品| 国产精品福利在线| 成人h猎奇视频网站| 91日本在线视频| 久久亚洲一区二区三区四区五区高| 久久网福利资源网站| 九九热99久久久国产盗摄| 性夜试看影院91社区| 欧美精品在线免费观看| 欧美主播福利视频| 最新的欧美黄色| 国产自产女人91一区在线观看| 国产精品视频资源| 亚洲无线码在线一区观看| 欧美激情在线有限公司| 欧美成人亚洲成人| 国语自产精品视频在免费| 亚洲图片在区色| 亚洲自拍av在线| 国产色视频一区| 色综合男人天堂| 日韩av电影免费观看高清| 日韩中文字幕免费视频| 亚洲视频在线观看视频| 人人澡人人澡人人看欧美| 亚洲欧美精品中文字幕在线| 91久久久久久久久久久久久| 国语自产精品视频在线看抢先版图片| 欧美激情一级欧美精品| 日韩中文字幕在线免费观看| 久久视频这里只有精品| 精品久久久久国产| 97成人精品视频在线观看| 91久久久精品| 久久成年人免费电影| 久久久久久久一区二区三区| 亚洲精品www久久久| 久久久亚洲福利精品午夜| 欧洲美女免费图片一区| 中文字幕无线精品亚洲乱码一区| 成人午夜小视频|