割り当てからの質問は、順序付けられた二重リンクリストを作成することを示しています...辞書式に小さい名前の各オブジェクトが他のオブジェクトの「前」に来るように...辞書の名前のように...同じ名前のオブジェクトも配置できます任意の順序で...
私が持っている2つのオブジェクトsetBefore()
とsetAfter()
メソッドをリンクするために...そして私はこれをたくさんしました...しかしそれでも私がどこで間違っているのかわかりません..あなたたちからの少しのガイダンスが私を助けることができるかもしれません...
atMe
は、二重リンクリストにすでに存在し、newFrob
挿入されるオブジェクトです。
def insert(atMe, newFrob):
if newFrob.myName() < atMe.myName():
if atMe.getBefore() == None:
atMe.setBefore(newFrob)
newFrob.setAfter(atMe)
elif atMe.getBefore().myName()<newFrob.myName():
atMe.getBefore().setAfter(newFrob)
newFrob.setBefore(atMe.getBefore)
atMe.setBefore(newFrob)
newFrob.setAfter(atMe)
else:
insert(atMe.getBefore(),newFrob)
elif newFrob.myName() > atMe.myName():
if atMe.getAfter() == None:
atMe.setAfter(newFrob)
newFrob.setBefore(atMe)
elif atMe.getAfter().myName()>newFrob.myName():
atMe.getAfter().setBefore(newFrob)
newFrob.setAfter(atMe.getAfter)
atMe.setAfter(newFrob)
newFrob.setBefore(atMe)
else:
insert(atMe.getAfter(),newFrob)
elif newFrob.myName()==atMe.myName():
if atMe.getAfter() != None:
newFrob.setAfter(atMe.getAfter())
newFrob.setBefore(atMe)
if atMe.getAfter() != None:
atMe.getAfter().setBefore(newFrob)
atMe.setAfter(newFrob)
そして、これは使用されるFrobクラスです...
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
ここで、BeforeとAfterは、二重リンクリスト内の左右のオブジェクトへのリンクです...このクラスのオブジェクトは、二重リンクリストに挿入されます...
例:
a=Frob('foo')
b=Frob('bar')
c=Frob('frob')
d=Frob('code')
code output
insert(a,b) bar->foo
insert(a,c) bar->foo->frob
insert(b,d) bar->code->foo->frob
今仮定します
code output
insert(b,Frob('code')) bar->code->code->foo->frob