搜尋
首頁web前端js教程Javascript資料結構與演算法列表詳解_javascript技巧

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

適合使用在:當列表的元素不是很多的情況下,可以使用列表,因為對列表中的元素查找或排序時,效率還算非常高,反之:如果列表元素非常多的情況下,就不適合使用清單了。

一:列表的抽象資料型別定義

為了設計清單的抽象資料類型,我們需要給出清單的定義,包括清單應該擁有哪些屬性,應該在清單上執行哪些操作等。

列表是一組有序的資料。每個列表中的資料項稱為元素。在javascript中,清單中的元素可以是任意資料類型。清單中可以保存多少元素並沒有事先約定。但是實際使用時元素數量受到程式記憶體的限制。

現在我們想設計一個列表,那麼我們可以想想實現一個列表,他們應該包含哪些屬性和方法,當然我下面的設計都是根據"javascript資料結構與演算法" 書上的demo來設計的,為止我們可以學習下,如果以後我們寫程式時,該如何來設計我們自己的抽象類別來作為一個參考,我們現在學習書上的demo最主要的是學習他們中的設計思想及編寫程式碼的方式。他們有以下屬性;

 1. listSize(屬性):使用一個listSize變數來保存清單中元素的個數。
 2. pos(屬性):  清單的目前位置,元素的索引。
 3. dataStore(屬性): 初始化一個空數組來保存元素的個數。如果我們想要取得具體的列表中的元素 可以使用上面的pos屬性;如 dataStore[pos];

所有的方法;如下列表解釋,不一一介紹了。

二:如何實作列表類別

根據上面定義的列表抽象資料類型,我們可以實作如下一個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             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             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.pos;
        }
    },
    // 返回清單的目前位置
    curPos: function(){
        return this.pos;
    },
    // 將目前位置移到指定位置
    moveTo: function(n) {
        this.pos = n;
    },
    // 傳回目前位置的元素
    getElement:function(){
        return this.dataStore[this.pos];
    }
};

如上:實作一個列表類,包含上面的如上那麼多方法,當然我們也可以擴展一些其他的方法,來豐富實現列表類,最主要可以學習如上編碼方式。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript數據類型:瀏覽器和nodejs之間是否有區別?JavaScript數據類型:瀏覽器和nodejs之間是否有區別?May 14, 2025 am 12:15 AM

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具