亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么鏈表要有父類

為什么鏈表要有父類

呼啦一陣風 2023-02-16 16:43:17
這是一個一般性問題,可能與 OOP 概念有關。我剛開始在 JAVA 中實現 DS。我正在嘗試實現鏈表和所有在線資源,我看到了類似的做法:創建一個節點類。創建一個具有節點對象的類鏈表。同樣,我看到了堆棧、隊列和樹。我的問題是,如果我只通過一個如下所示的類來實現 LinkedList: class LinkList {       int data;      LinkList next;       }我仍然能夠進行所有操作。因此,具有包含根或標頭的第二個類的概念僅用于 OOP 目的或其他目的?我寫了下面的代碼,它在不需要標題指針的情況下運行良好。我在所有方法中都使用了一個引用變量,并且主類的對象仍然保持著頭部的軌跡。/* package codechef; // don't place package name! */import java.util.*;import java.lang.*;import java.io.*;class LinkList {    int data;    LinkList next;    LinkList(){        data = 0;        next = null;    }    LinkList(int data) {        this.data = data;        next = null;    }    LinkList insertAtBegin(int data){        LinkList newBegin = new LinkList(data);        newBegin.next = this;        return newBegin;    }    void insertAtPlace(int data, int insertData){        LinkList newNode = new LinkList(insertData);        LinkList iterator = this;        while(iterator!=null && iterator.data!=data){            iterator = iterator.next;        }        if(iterator.data == data)        {            newNode.next = iterator.next;            iterator.next = newNode;        }    }    void insertAtLast(int data) {        if(next == null){            next = new LinkList(data);        }        else{            next.insertAtLast(data);        }    }}/* Name of the class has to be "Main" only if the class is public. */class Codechef{    public static void main (String[] args) throws java.lang.Exception    {        // your code goes here        LinkList linkList = new LinkList(6);        linkList.insertAtLast(5);        linkList.insertAtLast(3);        linkList.insertAtLast(2);        linkList.insertAtLast(1);        linkList = linkList.insertAtBegin(10);        LinkList iterator = linkList;        while(iterator!=null){            System.out.print(iterator.data);            iterator = iterator.next;        }    }}
查看完整描述

3 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

您必須在某處跟蹤鏈表的頭部。否則,您將如何遍歷整個列表,或在列表中搜索元素?

如果您LinkList本質上是一個節點(具有數據和對下一個節點的引用),則必須在某個單獨的類中實現所有鏈表操作(添加、刪除等...),以跟蹤節點的頭節點列表。

這會將您帶回到使用節點類的鏈表類。

至于您添加的代碼,LinkList insertAtBegin(int data)如果您在列表的第一個節點上調用它,只會在列表的開頭插入一個節點。但是沒有什么可以阻止您在列表的任何節點上調用它,在這種情況下,它實際上會返回一個以新元素開頭并以原始列表的子列表結尾的新列表。


查看完整回答
反對 回復 2023-02-16
?
www說

TA貢獻1775條經驗 獲得超8個贊

有兩個班級有幾個原因:

  • 區分列表和單個節點的概念,

  • 為了避免從每個方法中笨拙地返回頭節點,

  • 為了避免讓類的客戶端有責任跟蹤頭節點,

  • 隱藏實現細節,以便可以更輕松地用等效類替換該類,

  • ETC...


查看完整回答
反對 回復 2023-02-16
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

在第一個示例中,您的 LinkList 類只是一個節點類,因為它包含數據和它后面的節點

擁有 LinkedList 類的一般目的是為列表提供一個“包裝器”,它只是一個包含列表頭部的類(在鏈表的情況下,它是列表)和一些功能,例如查找功能或您需要的任何其他功能。

所以在你的情況下(第二個例子)它只是一個實現一些額外功能的包裝類(insertAtBegin()insertAtPlace()insertAtLast()


查看完整回答
反對 回復 2023-02-16
  • 3 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號