成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

TypeScript實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)(一)棧,隊(duì)列,鏈表

qujian / 3255人閱讀

摘要:最近在學(xué)習(xí),就想著用自己練習(xí)一些基本的數(shù)據(jù)結(jié)構(gòu),記錄一下,讀者有什么想法和建議也可以交流一下。棧隊(duì)列鏈表如果刪除的是尾節(jié)點(diǎn)

最近在學(xué)習(xí)typescript,就想著用typescript自己練習(xí)一些基本的數(shù)據(jù)結(jié)構(gòu),記錄一下,讀者有什么想法和建議也可以交流一下。

class Stack{
    private items = null;
    constructor() {
        this.items = new Array();
    }
    push(data: T): void {
        this.items.push(data);
    }
    pop(): T {
        return this.items.pop();
    }
    top(): T {
        return this.items[this.items.length - 1];
    }
    isEmpty(): boolean {
        return this.items.length === 0;
    }
    size(): number {
        return this.items.length;
    }
    clear(): void {
        this.items = new Array();
    }
    print(): void {
        console.log(this.items);
    }
}
隊(duì)列
class Queue{
    private items = null;
    constructor() {
        this.items = new Array();
    }
    enqueue(data: T): void {
        this.items.push(data);
    }
    dequeue(): T {
        return this.items.shift();
    }
    head(): T {
        return this.items[0];
    }
    size(): number {
        return this.items.length;
    }
    clear(): void {
        this.items = new Array();
    }
    isEmpty(): boolean {
        return this.items.length === 0;
    }
    tail(): T {
        return this.items[this.items.length - 1];
    }
    print(): void {
        console.log(this.items);
    }
}


鏈表
class LinkNode{
    public data: T;
    public next: LinkNode;
    constructor(data: T) {
        this.data = data;
        this.next = null;
    }
}

class LinkList{
  private head: Node;
  private length: number;
  private tail: Node;
  constructor() {
    this.head = null;
    this.tail = null;
  }

  append(data: T): boolean {
    let new_node = new Node(data);
    if (this.head == null) {
      this.head = new_node
      this.tail = new_node;
    } else {
      this.tail.next = new_node;
      this.tail = this.tail.next;
    }
    this.length++;
    return true;
  }

  len(): number {
    return this.length;
  }

  insert(index: number, data: T): boolean {
    if (index == this.length) {
      return this.append(data);
    } else {
      let insert_index = 1;
      let cur_node = this.head;
      while(insert_index < index) {
        cur_node = cur_node.next;
        insert_index++;
      }
      let next_node = cur_node.next;
      let new_node = new Node(data);
      cur_node.next = new_node;
      cur_node.next.next = next_node;
    }
    this.length++;
    return true;
  }

  remove(index): Node {
    if (index < 0 || index >= this.length) {
      return null;
    } else {
      let del_node = null;
      if (index == 0) {
        del_node = this.head;
        this.head = this.head.next;
      } else {
        let del_index = 0;
        let pre_node = null;
        let cur_node = this.head;
        while (del_index < index) {
          del_index++;
          cur_node = cur_node.next;
        }
        pre_node = cur_node;
        cur_node = cur_node.next;
        pre_node.next = cur_node;
        //如果刪除的是尾節(jié)點(diǎn)
        if (cur_node == null) {
          this.tail = pre_node;
        }
        this.length--;
        return del_node;
      }
    }
  }

  get(index): Node {
    if (index < 0 || index > this.length) {
      return null;
    }
    let node_index = 0;
    let cur_node = this.head;
    while(node_index < index) {
      node_index++;
      cur_node = cur_node.next;
    }
    return cur_node;
  }

  print(): void {
    let cur = this.head;
    while(cur != null) {
      console.log(cur.data);
      cur = cur.next;
    }
  }

}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/101578.html

相關(guān)文章

  • JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法之美 - 線性表(數(shù)組、隊(duì)列、鏈表

    摘要:每個(gè)線性表上的數(shù)據(jù)最多只有前和后兩個(gè)方向。數(shù)組鏈表隊(duì)列棧等就是線性表結(jié)構(gòu)。非線性表數(shù)據(jù)之間并不是簡(jiǎn)單的前后關(guān)系。不包含任何元素的棧稱為空棧。移除棧頂?shù)脑?,同時(shí)返回被移除的元素。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 前言 基礎(chǔ)知識(shí)就像是一座大樓的地基,它決定了我們的技術(shù)高度。 我們應(yīng)該多掌握一些可移值的...

    kaka 評(píng)論0 收藏0
  • 隊(duì)列 - Algorithms, Part I, week 2 STACKS AND QUEUE

    摘要:在改進(jìn)前使用數(shù)組的一個(gè)缺點(diǎn)是必須聲明數(shù)組的大小,所以棧有確定的容量。待解決的問(wèn)題建立一個(gè)能夠增長(zhǎng)或者縮短到任意大小的棧。下邊的圖是觀察時(shí)間開(kāi)銷的另一種方式,表示了入棧操作需要訪問(wèn)數(shù)組的次數(shù)。 前言 上一篇:算法分析下一篇:基本排序 本篇內(nèi)容主要是棧,隊(duì)列 (和包)的基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)文章里頭所有的對(duì)數(shù)函數(shù)都是以 2 為底關(guān)于性能分析,可能還是需要一些數(shù)學(xué)知識(shí),有時(shí)間可以回一下在很多...

    Stardustsky 評(píng)論0 收藏0
  • 【Java實(shí)現(xiàn)隊(duì)列就是這么簡(jiǎn)單

    摘要:一前言上一篇已經(jīng)講過(guò)了鏈表實(shí)現(xiàn)單向鏈表了,它跟數(shù)組都是線性結(jié)構(gòu)的基礎(chǔ),本文主要講解線性結(jié)構(gòu)的應(yīng)用棧和隊(duì)列如果寫(xiě)錯(cuò)的地方希望大家能夠多多體諒并指正哦,如果有更好的理解的方式也希望能夠在評(píng)論下留言,讓大家學(xué)習(xí)學(xué)習(xí)二數(shù)據(jù)結(jié)構(gòu)棧就是這么簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu) 一、前言 上一篇已經(jīng)講過(guò)了鏈表【Java實(shí)現(xiàn)單向鏈表】了,它跟數(shù)組都是線性結(jié)構(gòu)的基礎(chǔ),本文主要講解線性結(jié)構(gòu)的應(yīng)用:棧和隊(duì)列 如果寫(xiě)錯(cuò)的地方希望大家...

    Ethan815 評(píng)論0 收藏0
  • 圖解幾種常見(jiàn)的線性表

    摘要:下面來(lái)看一下,有哪些數(shù)據(jù)結(jié)構(gòu)屬于線性表吧棧特性先進(jìn)后出只有唯一的一個(gè)出入口介紹棧又名堆棧,它是一種運(yùn)算受限的線性表。 原文是在我自己博客中,小伙伴也可以點(diǎn)閱讀原文進(jìn)行跳轉(zhuǎn)查看,還有好聽(tīng)的背景音樂(lè)噢背景音樂(lè)已取消~ 2333333 線性表 什么是線性表?就是一種連續(xù)或間斷存儲(chǔ)的數(shù)組,這里的連續(xù)和間斷是針對(duì)物理內(nèi)存空間中線性表元素之間是否連續(xù),其中連續(xù)數(shù)組對(duì)應(yīng)內(nèi)置數(shù)組的實(shí)現(xiàn)方式,間斷數(shù)組對(duì)...

    wawor4827 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

qujian

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<