我是 python 的初学者,我遇到了这个程序的问题:
下面的程序是后进先出 (LIFO)。我想采用先进先出 (FIFO) 计划。
from NodeList import Node
class QueueLL:
def __init__(self):
self.head = None
def enqueueQLL(self,item):
temp = Node(str(item))
temp.setNext(self.head)
self.head = temp
length = max(len(node.data) for node in self.allNodes()) if self.head else 0
print('\u2510{}\u250c'.format(' '*length))
for node in self.allNodes():
print('\u2502{:<{}}\u2502'.format(node.data, length))
print('\u2514{}\u2518'.format('\u2500'*length))
这是节点列表:
class Node:
def __init__(self,initdata):
self.data = initdata
self.next = None
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self,newdata):
self.data = newdata
def setNext(self,newnext):
self.next = newnext
注意:“彩虹”应该在“弧”的底部或先进先出(下图为后进先出)
我正在考虑在 NodeList 中放置一个新的定义,例如 setPrevious 但我不知道该怎么做。 (老实说,我对这些 self.head = none 东西真的很陌生。我以前写过 self.items = [])
任何帮助和提示将不胜感激!谢谢!
最佳答案
除了学习目的,我不建议使用自定义数据结构来制作 LIFO 或 FIFO。毕竟,内置数据类型 list
就可以了。
您可以使用 append
方法添加项目并使用 pop
删除它们。对于 LIFO,这看起来像这样:
stack = list()
stack.append(1)
stack.append(2)
stack.append(3)
print stack.pop() #3
print stack.pop() #2
print stack.pop() #1
如果您为 pop
提供整数参数,您可以指定要删除的元素。对于 FIFO,第一个元素使用索引 0
:
stack = list()
stack.append(1)
stack.append(2)
stack.append(3)
print stack.pop(0) #1
print stack.pop(0) #2
print stack.pop(0) #3
关于Python:先进先出打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19219903/