Ok Une question de devoir dit de créer une liste ordonnée doublement liée ... de sorte que chaque objet avec le nom lexicographiquement plus petit vienne "Avant" l'autre ... Comme des noms dans un Dictionnaire ... aussi objets avec le même nom peuvent être disposés dans un ordre ...Commandé Doublement Liste Liée
Pour lier deux objets que j'ai setBefore()
et setAfter()
méthode ... et moi avons fait autant ... mais ne sais pas où je suis faire mal .. peut être un petit conseil de vous les gars peuvent m'aider ...
atMe
est un objet qui est déjà présent dans la liste doublement liée et newFrob
est un objet à être inséré ...
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)
Et c'est la classe Frob à utiliser ...
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
où avant et après des liens à gauche et à droite des objets en double liste liée ... objets de cette classe doivent être insérés au double liste chaînée ...
Exemple:
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
Supposons maintenant
code output
insert(b,Frob('code')) bar->code->code->foo->frob
@downvoters: Veuillez expliquer. Comme je peux le voir, OP avait clairement posé la question, présenté ses meilleurs efforts et il n'arrive toujours pas à trouver une solution et aurait besoin d'aide. Il n'est peut-être pas tout à fait à l'aise avec Python, mais nous devrions l'aider au lieu de le mettre à bas. – Abhijit
veuillez expliquer ce que vous entendez exactement par une liste chaînée double ordonnée? expliquer comment cela devrait fonctionner, quelles méthodes il devrait mettre en œuvre ... etc etc ... –
@eumiro merci ... mais toujours pas d'amélioration ... – adil