国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 百科知識(shí) > java什么是鏈表

    java什么是鏈表

    時(shí)間: 歐東艷656 分享

    java什么是鏈表

      鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成。每個(gè)結(jié)點(diǎn)包括兩個(gè)部分:一個(gè)是存儲(chǔ)數(shù)據(jù)元素的數(shù)據(jù)域,另一個(gè)是存儲(chǔ)下一個(gè)結(jié)點(diǎn)地址的指針域。 相比于線性表順序結(jié)構(gòu),操作復(fù)雜。由于不必須按順序存儲(chǔ),鏈表在插入的時(shí)候可以達(dá)到O(1)的復(fù)雜度,比另一種線性表順序表快得多,但是查找一個(gè)節(jié)點(diǎn)或者訪問特定編號(hào)的節(jié)點(diǎn)則需要O(n)的時(shí)間,而線性表和順序表相應(yīng)的時(shí)間復(fù)雜度分別是O(logn)和O(1)。

      鏈表(Chain本文所說鏈表均為單向鏈表,以下均簡(jiǎn)稱單向鏈表)實(shí)際上是由節(jié)點(diǎn)(Node)組成的,一個(gè)鏈表?yè)碛胁欢〝?shù)量的節(jié)點(diǎn)。而向外暴露的只有一個(gè)頭節(jié)點(diǎn)(Head),我們對(duì)鏈表的所有操作,都是直接或者間接地通過其頭節(jié)點(diǎn)來進(jìn)行的。

      節(jié)點(diǎn)(Node)是由一個(gè)需要儲(chǔ)存的對(duì)象及對(duì)下一個(gè)節(jié)點(diǎn)的引用組成的。也就是說,節(jié)點(diǎn)擁有兩個(gè)成員:儲(chǔ)存的對(duì)象、對(duì)下一個(gè)節(jié)點(diǎn)的引用。

      這樣說可能大家不是很明白,我貼一張圖大家可能更容易理解。

      那么大家可能清除了,為什么說有了頭節(jié)點(diǎn)就可以操作所有節(jié)點(diǎn)。因?yàn)橛兄粩嗟囊寐?

      那么在鏈表里的屬性大概就只有兩個(gè)了:頭節(jié)點(diǎn)和節(jié)點(diǎn)數(shù)量。當(dāng)然,根據(jù)需要,我們通常需要更多的屬性。

      簡(jiǎn)單的鏈表可以寫為下面的樣子:

      1 package myChain;

      2

      3 /**

      4 * (單向)鏈表

      5 *

      6 * @author Johness

      7 */

      8 public class PersonChain {

      9 private PersonChainNode head; // 頭節(jié)點(diǎn)

      10 private int size; // 鏈表的實(shí)體(即節(jié)點(diǎn)的數(shù)量)

      11 private int modCount; // 鏈表被操作的次數(shù)(備用)

      12

      13 /**

      14 * 獲得鏈表中節(jié)點(diǎn)數(shù)量

      15 *

      16 * @return 鏈表中節(jié)點(diǎn)數(shù)

      17 */

      18 public int getSize() {

      19 return this.size;

      20 }

      21

      22 /**

      23 * 添加節(jié)點(diǎn)的一般方法

      24 *

      25 * @param p

      26 * 添加到鏈表節(jié)點(diǎn)的對(duì)象 由于實(shí)現(xiàn)細(xì)節(jié),作為唯一標(biāo)識(shí),同一個(gè)編號(hào)的Person只能添加一次

      27 */

      28 public void addNode(Person p) {

      29 if (!contains(p.personNo)) { // 如果鏈表中沒有該對(duì)象,則準(zhǔn)備添加

      30 if (head != null) { // 如果有頭節(jié)點(diǎn),則添加新節(jié)點(diǎn)作為頭節(jié)點(diǎn)

      31 head = new PersonChainNode((myChain.Person) p, head);

      32 size++;

      33 modCount++;

      34 } else { // 如果沒有頭節(jié)點(diǎn),則添加對(duì)象作為頭節(jié)點(diǎn)

      35 head = new PersonChainNode((myChain.Person) p, null);

      36 size++;

      37 modCount++;

      38 }

      39 }

      40 }

      41 }

    java什么是鏈表

      以上的代碼就是一般鏈表的骨架了。擁有兩個(gè)重要屬性。

    245839