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

TypeScript實現(xiàn)單鏈表的示例代碼

 更新時間:2024年08月23日 11:27:38   作者:samroom  
鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結構,本文主要介紹了TypeScript實現(xiàn)單鏈表的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

鏈表的概念

鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結構,它由一系列結點組成,其特點在于結點可以在運行時動態(tài)生成。

鏈表的存儲結構特點

  • 鏈表的每個結點包括兩個部分:
    • 一個是存儲數據元素的數據域
    • 另一個存儲下一個結點地址的指針域
  • 鏈表可以用任意一組存儲單元來存儲其中的數據結構,與數組不同的是它的存儲單元可以是不連續(xù)的。

單鏈表

鏈表通過每個結點的鏈域將線性表的n個結點按其邏輯順序鏈接在一起構成單鏈表。單鏈表即單向鏈表,單向指的是其指針域所存儲的信息只能為一個方向。具體來說,單鏈表中的每個存儲單元中,除了需要存儲每個單元的數據外,還必須附帶儲存其直接后繼存儲單元的地址信息。如圖所示:

單鏈表的一個結點

單鏈表的結點

鏈表是由一個一個節(jié)點通過某種關系建立關聯(lián)構成的一種數據結構,單鏈表也是如此。單鏈表中的所有節(jié)點只有一個指向各自直接后繼節(jié)點的指針域以及各自的數據域:

結點的指針域以此指向后繼結點構成了鏈表

由于在TypeScript中沒有指針類型,所以我們需要用一個類來模擬一個結點:
由于在Typescript中泛型可以提高我們代碼的可復用性和靈活性,所以下面在定義結點和創(chuàng)建鏈表時會用到泛型。

class ListNode<T>{
    value : T //數據域
    next : ListNode<T> | null //指針域

    constructor(value: T){
        this.value = value;
        this.next = null
    }
}

單鏈表的基本操作

增加結點

增加結點是指為單鏈表增添節(jié)點,增加元素的方法有很多:

  • 從鏈表左端增加結點
  • 從鏈表右端增加結點
  • 從指定位置增加結點

  • 這里我們介紹從鏈表右端增加一個結點:
 //添加結點
    add(value:T){
        const newNode = new ListNode(value); //首先需要創(chuàng)建一個新結點
        //頭結點為空,那么這個新結點就是鏈表的頭結點
        if(!this.head){
            this.head=newNode;
        }
        //頭結點非空
        else{
            let current = this.head;
            //遍歷鏈表,直到找到鏈表的末尾
            while(current.next)
            {
                current = current.next
            }
            current.next = newNode;//將鏈表的最后一個節(jié)點的指針域指向新創(chuàng)建的結點
        }
    }

刪除結點

刪除結點是從鏈表中刪除一個結點,同樣刪除的方法也有很多:

  • 按照結點的索引號刪除鏈表中的單個結點
  • 按照索引號刪除鏈表中某個節(jié)點及其之后的結點
  • 給定兩個索引號a,b,刪除[a,b]的一段結點

  • 這里我們介紹刪除指定數據所在的結點:
 remove(value : T){
        const newNode = new ListNode(value);
        let current = this.head;
        if(!current){
            console.log('該結點不存在,刪除失敗')
        }
        //刪除的結點是頭結點
        else if(current && current.value == value){
            this.head = current.next;
            console.log('刪除成功');
        }
        else{
            while(current.next){
                if(current.next.value==value){
                	//讓所要刪除結點的上一個結點的指針域
                	//直接指向所要刪除結點的下一個結點即可
                    current.next = current.next.next;
                    console.log('刪除成功');
                    return;
                }
                current = current.next;
            }
            console.log('該結點不存在,刪除失敗')
        }

    }

打印鏈表

打印鏈表很簡單,就是將這個鏈表的每個結點都遍歷一次并且每遍歷到一個結點就將這個結點的數據輸出即可

 //打印鏈表
    print(){
        let current = this.head;
        while(current){
            console.log(current);
            current = current.next
        }
    }

鏈表功能測試

增加結點

增加結點并打印

測試結果如下:

增加結點測試結果

刪除結點

創(chuàng)建鏈表并刪除其中的‘hello'元素

測試結果如下:

刪除結點測試結果

完整代碼實現(xiàn)

//鏈表
//定義一個結點類:
class ListNode<T>{
    value : T
    next : ListNode<T> | null

    constructor(value: T){
        this.value = value;
        this.next = null
    }
}

//定義一個鏈表類
class LinkList<T>{
    head:null | ListNode<T>

    constructor(){
        this.head = null;
    }

    //定義方法
    //添加結點
    add(value:T){
        const newNode = new ListNode(value);
        //頭結點為空
        if(!this.head){
            this.head=newNode;
        }
        //頭結點非空
        else{
            let current = this.head;
            while(current.next)
            {
                current = current.next
            }
            current.next = newNode;
        }
    }

    //刪除結點
    remove(value : T){
        const newNode = new ListNode(value);
        let current = this.head;
        if(!current){
            console.log('該結點不存在,刪除失敗')
        }
        else if(current && current.value == value){
            this.head = current.next;
            console.log('刪除成功');
        }
        else{
            while(current.next){
                if(current.next.value==value){
                    current.next = current.next.next;
                    console.log('刪除成功');
                    return;
                }
                current = current.next;
            }
            console.log('該結點不存在,刪除失敗')
        }

    }

    //打印鏈表
    print(){
        let current = this.head;
        while(current){
            console.log(current);
            current = current.next
        }
    }
}

let list = new LinkList()

list.add(10);
list.add('hello');
list.add(true);
list.print();
list.remove('hello');
list.print();

到此這篇關于TypeScript實現(xiàn)單鏈表的示例代碼的文章就介紹到這了,更多相關TypeScript 單鏈表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • JavaScript html5 canvas繪制時鐘效果(二)

    JavaScript html5 canvas繪制時鐘效果(二)

    這篇文章主要介紹了JavaScript html5繪制時鐘效果的相關資料,使用HTML5的canvas標簽和Javascript腳本,模擬顯示了一個時鐘,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 微信小程序 函數防抖 解決重復點擊消耗性能問題實現(xiàn)代碼

    微信小程序 函數防抖 解決重復點擊消耗性能問題實現(xiàn)代碼

    這篇文章主要介紹了微信小程序使用函數防抖解決重復點擊消耗性能問題實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • JS中關于事件處理函數名后面是否帶括號的問題

    JS中關于事件處理函數名后面是否帶括號的問題

    JS中的事件處理(事件綁定)就是讓某種或某些事件觸發(fā)某些活動。有兩種常見的形式,分別是DOM Level 0 和DOM Level 2。今天總結一個關于事件處理程序的小細節(jié)。感興趣的朋友一起學習吧
    2016-11-11
  • JavaScript實現(xiàn)原型封裝輪播圖

    JavaScript實現(xiàn)原型封裝輪播圖

    這篇文章主要為大家詳細介紹了JavaScript原型封裝輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • B/S(Web)實時通訊解決方案分享

    B/S(Web)實時通訊解決方案分享

    這篇文章主要為大家分享了B/S(Web)實時通訊的解決方案,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • JS如何判斷對象是否包含某個屬性

    JS如何判斷對象是否包含某個屬性

    這篇文章主要介紹了JS如何判斷對象是否包含某個屬性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • JavaScript中標識符提升問題

    JavaScript中標識符提升問題

    標識符指的是javascript中定義的符號,標識符可以由任意順序的大小寫字母、數字、下劃線和美元符號組成,但標識符不能以數字開頭,也不能是javascript中的保留關鍵字。并且要注意,javascript是嚴格區(qū)分大小寫的。
    2015-06-06
  • ES6中javascript實現(xiàn)函數綁定及類的事件綁定功能詳解

    ES6中javascript實現(xiàn)函數綁定及類的事件綁定功能詳解

    這篇文章主要介紹了ES6中javascript實現(xiàn)函數綁定及類的事件綁定功能,結合實例形式分析了ES6中函數綁定及類的事件綁定原理、實現(xiàn)方法、相關操作技巧與注意事項,需要的朋友可以參考下
    2017-11-11
  • 將rmb數字位錢數轉化為中文錢數的js函數

    將rmb數字位錢數轉化為中文錢數的js函數

    用力將用戶輸入的錢數,中文化輸出的函數代碼,需要的朋友可以參考下。
    2010-07-07
  • JS 攔截全局ajax請求實例解析

    JS 攔截全局ajax請求實例解析

    這篇文章主要介紹了JS 攔截全局ajax請求實例解析的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11

最新評論

睢宁县| 桐乡市| 崇阳县| 武山县| 同仁县| 仁化县| 白朗县| 昌吉市| 互助| 凤台县| 织金县| 定结县| 永靖县| 弥勒县| 临沭县| 荆州市| 白水县| 清水河县| 桦甸市| 辽中县| 津市市| 中山市| 怀集县| 库车县| 如东县| 关岭| 灌云县| 抚顺市| 隆林| 高邑县| 凉城县| 富顺县| 西昌市| 桑植县| 务川| 韶山市| 县级市| 南丹县| 正阳县| 铁岭县| 长白|