真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中怎么實(shí)現(xiàn)一個(gè)靜態(tài)鏈表

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Java中怎么實(shí)現(xiàn)一個(gè)靜態(tài)鏈表,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比梓潼網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式梓潼網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋梓潼地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

什么是靜態(tài)鏈表?

對(duì)于線性鏈表,也可用一維數(shù)組來進(jìn)行描述。這種描述方法便于在沒有指針類型的高級(jí)程序設(shè)計(jì)語言中使用鏈表結(jié)構(gòu)。

用數(shù)組描述的鏈表,即稱為靜態(tài)鏈表。

在C語言中,靜態(tài)鏈表的表現(xiàn)形式即為結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體變量包括數(shù)據(jù)域data和游標(biāo)CUR。

靜態(tài)鏈表的節(jié)點(diǎn)

數(shù)據(jù)域:用于存儲(chǔ)數(shù)據(jù)元素的值游標(biāo):即數(shù)組下標(biāo),表示直接后繼元素所在數(shù)組中的位置

public class StaticLinkedListNode {   public T data; // 數(shù)據(jù)  public int cursor; // 游標(biāo)  ...}

注:通常靜態(tài)鏈表會(huì)將第一個(gè)數(shù)據(jù)元素放到數(shù)組下標(biāo)為1(即a[1])的位置中。

備用鏈表

靜態(tài)鏈表中,除了數(shù)據(jù)本身通過游標(biāo)組成鏈表外,還需要有一條連接各個(gè)空閑位置的鏈表,稱為備用鏈表。

作用:回收數(shù)組中未使用或者之前使用過(現(xiàn)在不用)的存儲(chǔ)空間,留待后期使用。即靜態(tài)鏈表使用數(shù)組申請(qǐng)的物理空間中,存在兩個(gè)鏈表,一條連接數(shù)據(jù),另一條連接數(shù)組中為使用的空間。

注:通常備用鏈表的表頭位于數(shù)組下標(biāo)為0(a[0])的位置,而數(shù)據(jù)鏈表的表頭位于數(shù)組下標(biāo)為1(a[1])的位置。

靜態(tài)鏈表中設(shè)置備用鏈表的好處是,可以清楚地知道數(shù)組中是否有空閑位置,以便數(shù)據(jù)鏈表添加新數(shù)據(jù)時(shí)使用。比如,若靜態(tài)鏈表中數(shù)組下標(biāo)為 0 的位置上存有數(shù)據(jù),則證明數(shù)組已滿。

完整代碼

public class StaticLinkedListNode {  public T data;  private int cursor;  public StaticLinkedListNode(T data, int cursor) {    this.cursor = cursor;  }  public T getData() {    return data;  }  public void setData(T data) {    this.data = data;  }  public int getCursor() {    return cursor;  }  public void setCursor(int cursor) {    this.cursor = cursor;  }}

public class StaticLinkedList {  StaticLinkedListNode[] nodes;  private static final int MAX_SIZE = 100;  private int length;  public StaticLinkedList() {    nodes = new StaticLinkedListNode[MAX_SIZE];    for (int i = 0; i < MAX_SIZE; i++) {      nodes[i] = new StaticLinkedListNode(null, i + 1);    }    nodes[MAX_SIZE - 1].setCursor(0);    this.length = 0;  }  // 鏈表實(shí)際長度  public int Length() {    return length;  }  // 判斷使用數(shù)組是否為空  public boolean isEmpty() {    return length == 0;  }  // 判斷備用鏈表是否為空  public boolean isFull() {    return length == MAX_SIZE;  }  // 插入一個(gè)節(jié)點(diǎn)  public boolean addTo(T data, int index) {    if (isFull() || index > MAX_SIZE || index < -1 || data == null)      return false;    if (index == 0) {      insert(data);      return true;    }    if (index > Length()) {      index = Length();    }    // 獲取第一個(gè)使用節(jié)點(diǎn)的下標(biāo)    int firstUse = nodes[MAX_SIZE - 1].getCursor();    // 獲取備用數(shù)組第一個(gè)節(jié)點(diǎn)的下標(biāo)    int firstNull = nodes[0].getCursor();    for (int i = 1; i < index; i++) {      firstUse = nodes[firstUse].getCursor();    }    // 獲取目標(biāo)節(jié)點(diǎn)的后續(xù)節(jié)點(diǎn)    int nextUse = nodes[firstUse].getCursor();    int nextNull = nodes[firstNull].getCursor();    nodes[0].setCursor(nextNull);    nodes[firstUse].setCursor(firstNull);    nodes[firstNull].setCursor(nextUse);    nodes[firstNull].setData(data);    length++;    return true;  }  public void insert(T data) {    int t = nodes[MAX_SIZE - 1].getCursor();    int firstNull = nodes[0].getCursor();    nodes[MAX_SIZE - 1].setCursor(firstNull);    nodes[0].setCursor(nodes[firstNull].getCursor());    nodes[firstNull].setCursor(t);    nodes[firstNull].setData(data);    length++;  }  public void print() {    int first = nodes[MAX_SIZE - 1].getCursor();    System.out.println("鏈表:");    for (int i = first; i != 0; ) {      System.out.print(nodes[i].getData() + " ");      i = nodes[i].getCursor();    }  }  // 刪除指定節(jié)點(diǎn)  public boolean delete(T data) {    if (isEmpty()) {      return false;    }    int temp = MAX_SIZE - 1;    while (temp != 0) {      if (nodes[nodes[temp].getCursor()].getData() == data) {        int p = nodes[temp].getCursor();        nodes[temp].setCursor(nodes[p].getCursor());        nodes[p].setCursor(nodes[0].getCursor());        nodes[0].setCursor(p);        nodes[p].setData(null);        length--;        return true;      }      temp = nodes[temp].getCursor();    }    return false;  }  // 刪除所有節(jié)點(diǎn)  public boolean deleteAll() {    if (isEmpty()) {      return true;    }    for (int i = 0; i < MAX_SIZE - 1; i++) {      nodes[i].setCursor(i + 1);      nodes[i].setData(null);    }    nodes[MAX_SIZE - 1].setCursor(0);    nodes[MAX_SIZE - 1].setData(null);    length = 0;    return true;  }  public void printAll() {    System.out.println("鏈表:");    for (int i = 0; i < MAX_SIZE; i++) {      System.out.print("[" + i + " " + nodes[i].getData() + " " + nodes[i].getCursor() + "]");      if (i % 5 == 0 && i != 0) {        System.out.println();      }    }  }  public static void main(String[] args) {    StaticLinkedList list = new StaticLinkedList();    list.insert("A");    list.insert("B");    list.insert("C");    list.insert("D");    list.insert("E");    list.addTo("X", 2);    System.out.println(list.Length());    list.print();//    list.printAll();//    list.deleteAll();  }}

上述就是小編為大家分享的Java中怎么實(shí)現(xiàn)一個(gè)靜態(tài)鏈表了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁名稱:Java中怎么實(shí)現(xiàn)一個(gè)靜態(tài)鏈表
文章出自:http://weahome.cn/article/jpdjcs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部