2013-01-13 38 views
-4

列表考慮下面的類定義:安排與名

class Frob(object): 

    def __init__(self, name): 
     self.name = name 
     self.before = None 
     self.after = None 
    def setBefore(self, before): 
     self.before = before 
    def setAfter(self, after): 
     self.after = after 
    def getBefore(self): 
     return self.before 
    def getAfter(self): 
     return self.after 
    def myName(self): 
     return self.name 

一個FROB是具有名稱的對象,並且兩個連接或鏈接:一個「前」和鏈接「後,」那些意圖指向其他對象的實例。

我們可以使用Frobs形成一個稱爲雙向鏈表的數據結構。在一個雙向鏈表中,每個元素都有這樣的屬性,如果元素A具有到元素B的「之前」鏈接,則元素B具有到元素A的「之後」鏈接。我們希望創建一個雙向鏈接的Frob實例集合,在特定Frob的名稱前面按字母順序排列的名稱的所有Frobs按照「before」鏈接排序,並且所有具有特定Frob名稱後按字母順序排列的名稱的Frobs將沿着「after」鏈接排序。

請注意,如果一個Frob插入的名稱與預先存在的Frob相同,則應在最終的數據結構中插入兩個名稱(兩個相同Frobs的確切順序無關緊要)。

爲將創建一個有序的雙向鏈表的插入函數提供一個定義。該函數在類Frob之外定義,並且有兩個參數:當前是雙向鏈表的一部分的Frob和新的Frob。新的Frob最初不會有任何「之前」或「之後」鏈接到其他Frobs。該函數應該改變列表以將新的Frob放置在正確的位置,由此產生的雙鏈表具有適當的「之前」和「之後」鏈接。完成以下功能定義:

這是我試圖編寫的代碼,但它是錯誤的。請幫我完成代碼。我一直堅持了很長時間。

def insert(atMe, newFrob): 
    """ 
    atMe: a Frob that is part of a doubly linked list 
    newFrob: a Frob with no links  
    This procedure appropriately inserts newFrob into the linked list that atMe is a part of.  
""" 
    # My Code 
    nodes = [] 
    if atMe in nodes: 
     nodes.append(newFrob) 
     nodes.sort() 
    else: 
     nodes.append(atMe) 
     nodes.append(newFrob) 
     nodes.sort() 
+1

聽起來像一個家庭作業... – robertklep

+2

這是你的第二個問題,它也是一個作業的複製粘貼,就像第一個問題。請再次參考[問]。請[編輯]問題,以顯示您已經嘗試了什麼,以及您的具體問題是什麼。 'Ctrl + V'不足以完成你的功課。 –

+0

即使您進行編輯,問題仍然會被關閉。如果你進一步改進它,它可以重新打開。 –

回答

1

好的,既然您至少提供了一些超出作業文本的內容,我會嘗試提供一些提示。

insert功能必須做兩兩件事:

  1. 確定兩臺Frob對象之間newFrob應插入(或者如果它應是對列表的端部中的一個)。這是通過比較對象的name屬性來完成的,因爲分配表明列表應按字母順序排序。 常識意味着你應該把某種循環放在一起(在鏈表上)來做到這一點,並且在這個循環中你應該檢查一些涉及當前對象和新對象名稱的條件。
  2. 插入新對象。這通過分配其beforeafter屬性以及其新鄰居的屬性來完成。這可以使用諸如setBefore等方法來完成。

P.S.您可以對我的答案發表評論以要求澄清,並且您還可以更新問題並詳細說明您的進度(如果有)以及遇到的問題。