安排一个名字列表

时间:2013-01-13 08:13:49

标签: python python-2.7

考虑以下类定义:

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在“之前”链接中按顺序排序,并且所有名称在特定Frob名称后按字母顺序排列的Frob将沿“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 个答案:

答案 0 :(得分:1)

好的,既然你提供了至少一些超出作业文本的内容,我会尽量给出一些提示。

insert函数必须做两件事:

  1. 确定应插入Frob的两个newFrob个对象(或者它应该位于列表的一端)。这是通过比较对象的name属性来完成的,因为赋值表明列表应按字母顺序排序。 常识表明你应该把某种循环(在链表上)放在一起来做这个,在那个循环中你应该检查一些涉及当前对象和新对象名称的条件。
  2. 插入新对象。这是通过分配其beforeafter属性以及其新邻居的属性来完成的。这可以使用setBefore
  3. 等方法完成

    P.S。您可以对我的答案发表评论,要求澄清,您也可以更新问题,详细说明您的进度(如果有的话)和遇到的问题。