最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript數(shù)據(jù)結(jié)構(gòu)與算法之列表詳解

 更新時(shí)間:2015年03月12日 10:01:31   投稿:junjie  
這篇文章主要介紹了Javascript數(shù)據(jù)結(jié)構(gòu)與算法之列表詳解,本文講解了列表的抽象數(shù)據(jù)類(lèi)型定義、如何實(shí)現(xiàn)列表類(lèi)等內(nèi)容,需要的朋友可以參考下

前言:在日常生活中,人們經(jīng)常要使用列表,比如我們有時(shí)候要去購(gòu)物時(shí),為了購(gòu)物時(shí)東西要買(mǎi)全,我們可以在去之前,列下要買(mǎi)的東西,這就要用的列表了,或者我們小時(shí)候上學(xué)那段時(shí)間,每次考完試后,學(xué)校都會(huì)列出這次考試成績(jī)前十名的同學(xué)的排名及成績(jī)單,等等這些都是列表的列子。我們計(jì)算機(jī)內(nèi)也在使用列表,那么列表適合使用在什么地方呢?不適合使用在什么地方呢?

適合使用在:當(dāng)列表的元素不是很多的情況下,可以使用列表,因?yàn)閷?duì)列表中的元素查找或者排序時(shí),效率還算非常高,反之:如果列表元素非常多的情況下,就不適合使用列表了。

一:列表的抽象數(shù)據(jù)類(lèi)型定義

為了設(shè)計(jì)列表的抽象數(shù)據(jù)類(lèi)型,我們需要給出列表的定義,包括列表應(yīng)該擁有哪些屬性,應(yīng)該在列表上執(zhí)行哪些操作等。

列表是一組有序的數(shù)據(jù)。每個(gè)列表中的數(shù)據(jù)項(xiàng)稱為元素。在javascript中,列表中的元素可以是任意數(shù)據(jù)類(lèi)型。列表中可以保存多少元素并沒(méi)有事先約定。但是實(shí)際使用時(shí)元素?cái)?shù)量受到程序內(nèi)存的限制。

現(xiàn)在我們想設(shè)計(jì)一個(gè)列表,那么我們可以想想實(shí)現(xiàn)一個(gè)列表,他們應(yīng)該包含哪些屬性和方法,當(dāng)然我下面的設(shè)計(jì)都是根據(jù) "javascript數(shù)據(jù)結(jié)構(gòu)與算法" 書(shū)上的demo來(lái)設(shè)計(jì)的,為止我們可以學(xué)習(xí)下,如果以后我們編寫(xiě)程序時(shí),該如何來(lái)設(shè)計(jì)我們自己的抽象類(lèi)來(lái)作為一個(gè)參考,我們現(xiàn)在學(xué)習(xí)書(shū)上的demo最主要的是學(xué)習(xí)他們中的設(shè)計(jì)思想及編寫(xiě)代碼的方式。他們有如下屬性;

 1. listSize(屬性):使用一個(gè)listSize變量來(lái)保存列表中元素的個(gè)數(shù)。
 2. pos(屬性):  列表的當(dāng)前位置,元素的索引。
 3. dataStore(屬性): 初始化一個(gè)空數(shù)組來(lái)保存元素的個(gè)數(shù)。如果我們想取得具體的列表中的元素 可以使用上面的pos屬性;如 dataStore[pos];

所有的方法;如下列表解釋?zhuān)灰灰唤榻B了。

二:如何實(shí)現(xiàn)列表類(lèi)

根據(jù)上面定義的列表抽象數(shù)據(jù)類(lèi)型,我們可以實(shí)現(xiàn)如下一個(gè)List類(lèi),如下通過(guò)構(gòu)造函數(shù)+原型模式。

復(fù)制代碼 代碼如下:

function List() {
    // 列表的元素個(gè)數(shù)
    this.listSize = 0;

    // 列表的當(dāng)前位置 是第幾個(gè)
    this.pos = 0;

    // 初始化一個(gè)空數(shù)組來(lái)保存列表元素
    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;
    },
   
    // 返回列表中元素的個(gè)數(shù)
    length: function() {
        return this.listSize;
    },

    // 顯示列表中的元素
    toString: function(){
        return this.dataStore;
    },

    /*
     * 在指定元素后面插入一個(gè)元素
     * @param element 當(dāng)前的元素
     * @param elementAfter 把當(dāng)前的元素插入到此元素后面
     */
    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;
    },
    // 將列表中的當(dāng)前元素移動(dòng)到第一個(gè)位置
    front: function(){
        this.pos = 0;
    },
    // 將列表中當(dāng)前的元素移動(dòng)到最后一個(gè)位置
    end: function(){
        this.pos = this.listSize - 1;
    },
    // 將當(dāng)前位置 后移一位
    prev: function(){
        if(this.pos > 0) {
            --this.pos;
        }
    },
    // 將當(dāng)前位置 前移一位
    next: function(){
        if(this.pos < this.listSize - 1) {
            ++this.pos;
        }
    },
    // 返回列表的當(dāng)前位置
    curPos: function(){
        return this.pos;
    },
    // 將當(dāng)前位置移動(dòng)到指定位置
    moveTo: function(n) {
        this.pos = n;
    },
    // 返回當(dāng)前位置的元素
    getElement:function(){
        return this.dataStore[this.pos];
    }
};

如上:實(shí)現(xiàn)一個(gè)列表類(lèi),包含上面的如上那么多方法,當(dāng)然我們也可以擴(kuò)展一些其他的方法,來(lái)豐富實(shí)現(xiàn)列表類(lèi),最主要可以學(xué)習(xí)如上編碼方式。

相關(guān)文章

最新評(píng)論

奇台县| 余姚市| 裕民县| 仁寿县| 宁武县| 平武县| 阿瓦提县| 普兰县| 原平市| 衡东县| 晋中市| 武强县| 大港区| 黑山县| 仪陇县| 阳东县| 黄平县| 许昌市| 蒙山县| 都兰县| 海城市| 班戈县| 南平市| 定安县| 陆良县| 遂川县| 同心县| 香格里拉县| 上林县| 始兴县| 胶南市| 西昌市| 黄浦区| 榆林市| 四平市| 绿春县| 集安市| 日照市| 靖州| 渭南市| 渭源县|