javascript數據結構與算法---列表

javascript數據結構與算法---列表javascript

     前言:在平常生活中,人們常常要使用列表,好比咱們有時候要去購物時,爲了購物時東西要買全,咱們能夠在去以前,列下要買的東西,這就要用的列表了,或者咱們小時候上學那段時間,每次考完試後,學校都會列出此次考試成績前十名的同窗的排名及成績單,等等這些都是列表的列子。咱們計算機內也在使用列表,那麼列表適合使用在什麼地方呢?不適合使用在什麼地方呢?java

適合使用在:當列表的元素不是不少的狀況下,能夠使用列表,由於對列表中的元素查找或者排序時,效率還算很是高,反之:若是列表元素很是多的狀況下,就不適合使用列表了。算法

一:列表的抽象數據類型定義數組

      爲了設計列表的抽象數據類型,咱們須要給出列表的定義,包括列表應該擁有哪些屬性,應該在列表上執行哪些操做等。數據結構

列表是一組有序的數據。每一個列表中的數據項稱爲元素。在javascript中,列表中的元素能夠是任意數據類型。列表中能夠保存多少元素並無事先約定。可是實際使用時元素數量受到程序內存的限制。app

     如今咱們想設計一個列表,那麼咱們能夠想一想實現一個列表,他們應該包含哪些屬性和方法,固然我下面的設計都是根據 "javascript數據結構與算法" 書上的demo來設計的,爲止咱們能夠學習下,若是之後咱們編寫程序時,該如何來設計咱們本身的抽象類來做爲一個參考,咱們如今學習書上的demo最主要的是學習他們中的設計思想及編寫代碼的方式。他們有以下屬性;函數

 1. listSize(屬性):使用一個listSize變量來保存列表中元素的個數。學習

 2. pos(屬性):  列表的當前位置,元素的索引。this

 3. dataStore(屬性): 初始化一個空數組來保存元素的個數。若是咱們想取得具體的列表中的元素 能夠使用上面的pos屬性;如 dataStore[pos];編碼

 全部的方法;以下列表解釋,不一一介紹了。

 listSize(屬性)  列表的元素個數
 pos(屬性)  列表的當前位置 是第幾個
 dataStore(屬性)  初始化一個空數組來保存列表元素
 append(方法)  給列表末尾添加元素
 remove(方法)  從列表中刪除元素
 find(方法)  查找列表中的元素 返回索引
 length(方法)  返回列表中元素的個數
 toString(方法)  顯示列表中的元素
 insert(方法)  在指定元素後面插入一個元素
 clear(方法)  清空列表中的全部元素
 contains(方法)  判斷給定的元素是否在列表中
 front(方法)  將列表中的當前元素移動到第一個位置
 end(方法)  將列表中當前的元素移動到最後一個位置
 prev(方法)  將當前位置 後移一位
 next(方法)  將當前位置 前移一位
 curPos(方法)  返回列表的當前位置
 moveTo(方法)  將當前位置移動到指定位置
 getElement(方法)  返回當前位置的元素

二:如何實現列表類。

根據上面定義的列表抽象數據類型,咱們能夠實現以下一個List類,以下經過構造函數+原型模式。

function List() { // 列表的元素個數
    this.listSize = 0; // 列表的當前位置 是第幾個
    this.pos = 0; // 初始化一個空數組來保存列表元素
    this.dataStore = []; } List.prototype = { // 給列表末尾添加元素
    append: function(element) { var self = this; self.dataStore[this.listSize++] = element; }, // 從列表中刪除元素
    remove: function(element) { var self = this; var curIndex = self.find(element); if(curIndex > -1) { self.dataStore.splice(curIndex,1); --self.listSize; return true; } return false; }, // 查找列表中的元素 返回索引
    find: function(element) { var self = this; for(var i = 0,dataLen = self.dataStore.length; i < dataLen; i++) { if(self.dataStore[i] == element) { return i; } } return -1; }, // 返回列表中元素的個數
    length: function() { return this.listSize; }, // 顯示列表中的元素
    toString: function(){ return this.dataStore; }, /* * 在指定元素後面插入一個元素 * @param element 當前的元素 * @param elementAfter 把當前的元素插入到此元素後面 */ insert: function(element,elementAfter){ var self = this; var insertPos = self.find(elementAfter); if(insertPos > -1) { self.dataStore.splice(insertPos+1,0,element); ++self.listSize; return true; } return false; }, // 清空列表中的全部元素
    clear: function() { delete this.dataStore; this.dataStore = []; this.listSize = this.pos = 0; }, // 判斷給定的元素是否在列表中
    contains: function(element) { var self = this; for(var i = 0,ilen = self.dataStore.length; i < ilen; i++) { if(self.dataStore[i] == element) { return true; } } return false; }, // 將列表中的當前元素移動到第一個位置
    front: function(){ this.pos = 0; }, // 將列表中當前的元素移動到最後一個位置
    end: function(){ this.pos = this.listSize - 1; }, // 將當前位置 後移一位
    prev: function(){ if(this.pos > 0) { --this.pos; } }, // 將當前位置 前移一位
    next: function(){ if(this.pos < this.listSize - 1) { ++this.pos; } }, // 返回列表的當前位置
    curPos: function(){ return this.pos; }, // 將當前位置移動到指定位置
    moveTo: function(n) { this.pos = n; }, // 返回當前位置的元素
    getElement:function(){ return this.dataStore[this.pos]; } };

如上:實現一個列表類,包含上面的如上那麼多方法,固然咱們也能夠擴展一些其餘的方法,來豐富實現列表類,最主要能夠學習如上編碼方式。

相關文章
相關標籤/搜索